Teleport로 Azure CLI와 API 보호하기
Teleport v18.9Teleport를 사용하여 Azure의 API와 상호 작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. on an Azure VM에 설치된 Teleport Application Service는 managed identities을 사용하여 Azure로부터 인증 토큰을 얻습니다.
Teleport를 사용하여 Azure의 API와 상호 작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. 이를 통해 인프라 자체를 보호하는 데 사용하는 것과 동일한 RBAC 시스템을 사용하여 인프라의 관리 API에 대한 액세스를 제어할 수 있습니다.
이 가이드에서 다음을 수행합니다:
- 사용자 접근을 위한 Azure 관리 ID를 생성하고 VM에 연결합니다.
- Teleport 클러스터에 Azure 앱과 함께 Teleport Application Service를 배포합니다.
- 관리 ID를 수임하고
tsh를 통해az명령을 실행합니다.
작동 방식#
on an Azure VM에 설치된 Teleport Application Service는 managed identities을 사용하여 Azure로부터 인증 토큰을 얻습니다. 사용자가 Teleport에 인증하면 해당 사용자 할당 관리 ID 중 하나를 assume하여 Azure CLI 명령을 실행할 수 있습니다.
어떤 Teleport 사용자 또는 역할이 특정 Azure ID에 액세스할 수 있는지 구성할 수 있으므로, 누가 Azure CLI에 대한 여러 수준의 액세스 자격 증명을 얻을 수 있는지 제어할 수 있습니다.
Teleport Application Service는 리버스 터널을 통해 Teleport Proxy Service에 연결하므로, Application Service를 프라이빗 네트워크에서 실행하여 조직의 Azure ID에 대한 무단 액세스를 방지할 수 있습니다.
또는, Teleport SAML IdP 기반 통합을 사용하여 Azure Portal 및 CLI 애플리케이션에 대한 접근을 관리할 수 있습니다. 이 방식에서는 사용자가 Azure 포털 및 CLI 도구에 대화형으로 로그인하고, Azure 서비스는 Teleport 사용자 계정을 대신하여 감사 로그에 태그를 지정하여 Teleport 사용자가 Azure와 상호작용하는 방식에 대한 더 많은 가시성을 제공합니다. 이것은 또한 Azure 포털에 대한 접근을 관리하는 유일한 지원 방법입니다.
사전 요구 사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
-
워크스테이션에 설치된
azCLI 도구. Teleport의tsh클라이언트는az바이너리를 사용하여 명령을 실행합니다. 운영 체제에azCLI를 설치하는 방법은 Azure 문서를 참조하십시오. -
Teleport Application Service를 실행할 Azure VM. Azure VM은 Linux 배포판을 실행해야 합니다.
Azure Kubernetes Service (AKS)이 가이드는 Microsoft Entra 파드 관리 ID가 활성화된 Azure Kubernetes Service(AKS) 배포에도 적용됩니다. 그러나 파드 관리 ID 기능은 2024년 9월에 지원이 종료될 예정입니다.
Microsoft Entra Workload ID를 사용하여 AKS에서 Teleport Application Service를 실행하려면 Workload ID를 사용한 AKS에서의 Azure CLI 접근을 참조하십시오.
-
사용자 할당 Azure 관리 ID를 생성하고 VM에 연결하는 기능. Azure에서 이 작업을 수행하려면 Azure 계정에 세 가지 역할 할당이 필요합니다: Managed Identity Contributor, Managed Identity Operator, Virtual Machine Contributor.
기존 ID 사용이 가이드에서는 Teleport를 사용한 Azure CLI 접근을 시연하기 위해 사용자 할당 관리 ID를 생성합니다.
Teleport를 통해 Azure CLI 사용자가 수임할 다른 ID가 있다면 그것을 대신 사용할 수 있습니다. 이 경우 Managed Identity Contributor 역할 할당이 필요하지 않습니다.
Teleport cluster에 연결할 수 있는지 확인하려면
tsh login으로 로그인한 다음, 현재 자격 증명으로tctl명령을 실행할 수 있는지 확인합니다.예를 들어,
teleport.example.com에 cluster 내 Teleport Proxy Service의 도메인 이름을,email@example.com에 Teleport 사용자 이름을 지정하여 다음 명령을 실행합니다:$ tsh login --proxy=teleport.example.com --user=email@example.com $ tctl status # Cluster (=teleport.url=) # Version (=teleport.version=) # CA pin (=presets.ca_pin=)cluster에 연결하여
tctl status명령을 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 이후의tctl명령을 실행할 수 있습니다. 자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를 호스팅하는 컴퓨터에서tctl명령을 실행할 수도 있습니다.1/4단계. VM에 ID 부여#
이 단계에서는 Azure 관리 ID를 생성하고 Azure VM에 할당합니다. 생성할 ID는
teleport-azure라고 하며, Azure 계정의 리소스를 볼 수 있는 권한을 가집니다.모든 Azure ID 아래에서 Teleport가 Azure CLI에 대한 접근 권한을 부여할 수 있도록 설정할 수 있습니다. 사용하려는 다른 ID가 있다면 새 ID 생성을 건너뛸 수 있습니다.
Azure 관리 ID 생성#
Azure Portal에서 관리 ID 보기를 방문합니다.
Create를 클릭합니다.
Subscription, Resource group, Region 아래에서 VM이 속한 것을 선택합니다.
Name 필드에
teleport-azure를 입력합니다.
Review + create를 클릭한 다음 Create를 클릭합니다.
생성이 완료되면 Go to resource를 클릭합니다. 새 ID 페이지에서 JSON View를 클릭합니다. 오른쪽 사이드바 상단에서 다음과 유사한 값이 있는 Resource ID 필드를 볼 수 있습니다:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure이 가이드의 나중에 사용할 수 있도록 이 ID의 URI를 복사합니다.
teleport-azureID에 리소스 보기 권한 허용#Azure ID를 생성한 후, 계정의 리소스에 접근할 수 있도록 권한을 부여합니다. 이 경우 새 Azure ID가 리소스 그룹의 리소스를 볼 수 있도록 권한을 부여합니다.
Azure Portal 검색 상자에 Azure 리소스 그룹 이름을 입력하고 해당 리소스 그룹 페이지를 방문합니다. 왼쪽 탐색 사이드바에서 Access control (IAM) 탭을 클릭합니다. Access control (IAM) 패널 상단의 버튼 행에서 Add > Add role assignment를 클릭합니다.
Add role assignment 화면에서 리소스에 대한 읽기 전용 접근 권한이 있는 기본 제공 역할인 Reader를 클릭합니다.

화면 하단으로 스크롤하여 Next를 클릭합니다.
Members 탭에서 Assign access to 필드에 Managed identity를 선택합니다. Select members를 클릭합니다.
오른쪽 사이드바에서 Managed identity 드롭다운 메뉴를 찾아 User-assigned managed identity를 선택합니다. 이전에 생성한
teleport-azureID를 선택합니다.
Select를 클릭한 다음 Review + assign을 클릭합니다.
Role이 "Reader"이고, Scope가 선택한 리소스 그룹과 일치하며, Members 필드에 이전에 생성한
teleport-azure관리 ID가 포함되어 있는지 확인합니다.Review + assign을 다시 클릭합니다.
Azure VM에 ID 연결#
관리 ID를 생성하고 역할을 할당했으므로, Teleport Application Service가 Azure CLI 트래픽을 프록시하기 위해 ID를 수임할 수 있도록 Azure VM에 ID를 연결합니다.
Azure Portal의 가상 머신 보기에서 Teleport Application Service를 호스팅하는 데 사용하는 VM 이름을 클릭합니다.
오른쪽 패널에서 Identity 탭을 클릭한 다음, Identity 보기 내에서 User assigned 탭을 클릭합니다. +Add를 클릭한 다음
teleport-azureID를 선택합니다. Add를 클릭합니다.
Azure VM 페이지의 Identity 탭으로 다시 이동합니다. User assigned 서브 탭에 새 ID가 목록에 표시되어야 합니다:

2/4단계. Teleport Application Service 배포#
이 단계에서는
teleport-azureID를 할당한 Azure VM에서 Teleport Application Service를 실행합니다.join token 가져오기#
join token을 생성하여 Teleport 클러스터와 새 Application Service 인스턴스 간의 신뢰를 설정하십시오:
$ tctl tokens add --type=app --ttl=1h --format=text (=presets.tokens.first=)join-token에 토큰을 할당하고, Teleport Application Service를 설치할 호스트에서 다음 명령을 실행하여 토큰만으로 구성된/tmp/token이라는 파일을 생성하십시오:$ echo join-token | sudo tee /tmp/tokenTeleport Application Service 설치#
Teleport Application Service를 설치할 호스트에서 다음 명령을 실행합니다:
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
Teleport Application Service 구성#
Teleport Application Service를 실행할 호스트에서 다음 내용으로
/etc/teleport.yaml파일을 생성합니다:version: v3 teleport: join_params: token_name: "/tmp/token" method: token proxy_server: "teleport.example.com:443" auth_service: enabled: false proxy_service: enabled: false ssh_service: enabled: false app_service: enabled: true apps: - name: azure-cli cloud: Azure/etc/teleport.yaml을 편집하여teleport.example.com:443을 Teleport Proxy Service 또는 Teleport Cloud 테넌트의 호스트 및 포트(예:mytenant.teleport.sh:443)로 교체합니다.app_service필드는 Teleport Application Service를 구성합니다.app_service.apps내의 각 항목은 애플리케이션 구성입니다.이 예에서는
cloud를Azure로 설정하여 Azure CLI 접근을 활성화했습니다. 이 설정이 구성되면, Application Service는 Azure CLI의 사용자 명령을 프록시하여 사용자가 선택한 ID 아래에서 Azure의 API에 대한 접근을 요청합니다. 이는 ID가 Application Service 호스트에 연결된 것 중 하나인 경우 작동합니다.Teleport Application Service 실행#
systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Application Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Application Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Teleport Application Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport $ sudo systemctl start teleportTAR Archive
the Teleport Application Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service $ sudo systemctl enable teleport $ sudo systemctl start teleportsystemctl status teleport로 the Teleport Application Service의 상태를 확인하고journalctl -fu teleport로 로그를 볼 수 있습니다.3/4단계. 사용자가 Azure CLI에 접근할 수 있도록 설정#
다음 단계는 Teleport 사용자가 Azure 자격 증명을 assume하고 Teleport를 통해 Azure CLI 명령을 실행하도록 권한을 부여하는 것입니다. Teleport의 RBAC 시스템을 사용하여 이 자격 증명에 대한 액세스를 보호하며, 사용자의 역할이 액세스할 수 있는 Azure 관리형 자격 증명(있는 경우)을 결정합니다.
사용자에게 Azure 자격 증명에 대한 액세스 권한을 부여하는 데는 두 가지 접근 방식이 있습니다.
접근 방식 설명 지원되는 사용자 유형 Dynamic Teleport 역할에 사용자에게 직접 할당된 모든 Azure 자격 증명에 대한 액세스 권한을 부여하는 템플릿 변수가 포함됩니다. 로컬 사용자, OIDC, SAML Static Teleport 역할이 사용자가 assume할 수 있는 Azure 자격 증명을 명시적으로 지정합니다. 로컬 사용자, OIDC, SAML, GitHub Tip계정에 Azure 자격 증명을 추가할 때 확장성이 좋으므로 dynamic 접근 방식을 사용하는 것을 권장합니다. GitHub SSO를 사용하여 사용자를 인증하도록 Teleport Community Edition 클러스터를 구성한 경우, OAuth 기반 GitHub 애플리케이션은 사용자 지정 클레임을 지원하지 않으므로 static 접근 방식을 사용해야 합니다.
Dynamic identities#
dynamic 접근 방식을 사용하는 경우, 선택하는 방식은 Teleport 사용자가 로컬 사용자인지 SSO 사용자인지에 따라 달라집니다:
Local Users
다음 내용으로
azure-cli-access.yaml이라는 파일을 생성합니다:kind: role version: v5 metadata: name: azure-cli-access spec: allow: app_labels: '*': '*' azure_identities: - '{{internal.azure_identities}}'azure-cli-access역할을 가진 사용자가 Teleport를 통해 Azure CLI에 인증하면, Teleport Auth Service는 사용자에게 할당한 Azure 자격 증명으로{{internal.azure_identities}}템플릿 변수를 채웁니다.다음 명령을 실행하여 Teleport 사용자에게
teleport-azure자격 증명을 할당합니다.teleport-user를 Teleport 사용자 이름으로 지정하고 앞서 복사한 Azure 자격 증명의 URI를azure-identity-uri값으로 붙여넣습니다:$ tctl users update teleport-user \ --set-azure-identities azure-identity-uri이 명령은
--set-azure-identities플래그를 사용하여 사용자에게 Azure 자격 증명을 추가합니다.--set-azure-identities에는 쉼표로 구분된 여러 자격 증명 URI를 할당할 수 있습니다.자격 증명 URI는 다음 형식의 Azure 리소스 ID입니다:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME역할을 생성합니다:
$ tctl create -f azure-cli-access.yamlTipWeb UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
SAML/OIDC Connectors
ID 공급자에서
azure_identities라는 사용자 지정 SAML 속성 또는 OIDC 클레임을 정의합니다. 각 사용자의azure_identities속성 또는 클레임은 다음 형식을 사용하는 Azure 자격 증명 URI의 목록이어야 합니다:/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/RESOURCE_GROUP_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY_NAME다음 내용으로
azure-cli-access.yaml이라는 파일을 생성합니다:kind: role version: v5 metadata: name: azure-cli-access spec: allow: app_labels: '*': '*' azure_identities: - '{{external.azure_identities}}'azure-cli-access역할을 가진 사용자가 Teleport를 통해 Azure CLI에 인증하면, Teleport Auth Service는 사용자에게 할당한 Azure 자격 증명으로{{external.azure_identities}}템플릿 변수를 채웁니다.역할을 생성합니다:
$ tctl create -f azure-cli-access.yamlTipWeb UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
Static identities#
static 자격 증명을 사용하는 경우, 특정 Azure 자격 증명에 대한 액세스 권한을 가진 역할을 정의합니다. 이는 이 역할을 assume하는 Teleport 사용자가 해당 자격 증명(그리고 오직 해당 자격 증명만)을 사용하여 Azure CLI를 통해 명령을 실행할 수 있음을 의미합니다.
다음 내용으로
azure-cli-access.yaml이라는 파일을 생성합니다:kind: role version: v5 metadata: name: azure-cli-access spec: allow: app_labels: '*': '*' azure_identities: - /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azureazure_identities필드의 자격 증명 URI를 Step 1에서 복사한 것과 일치하도록 편집합니다.이 역할은 사용자에게 앞서 정의한
azure-cli애플리케이션과 같이 Teleport에 등록된 모든 애플리케이션에 대한 액세스 권한을 부여하고, 해당 사용자가 앞서 생성한teleport-azure자격 증명을 assume할 수 있도록 허용합니다.역할을 생성합니다:
$ tctl create -f azure-cli-access.yamlTipWeb UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
Azure 자격 증명에 대한 액세스 거부
하나 이상의 Azure 자격 증명에 대한 사용자 액세스를 거부하는 Teleport 역할을 정의할 수 있습니다. 이를 위해
role리소스의spec.deny섹션 내azure_identities필드에 값을 할당합니다.예를 들어, 이 역할은 사용자가 모든 Azure 자격 증명에 액세스하는 것을 거부합니다:
kind: role version: v5 metadata: name: "no-azure-identities" spec: allow: app_labels: '*': '*' deny: azure_identities: - '*'no-azure-identities역할은 사용자가 등록된 모든 애플리케이션에 액세스할 수 있도록 하지만,deny.azure_identities필드 내에서 와일드카드 문자(*)를 사용하여 사용자가 어떠한 Azure 자격 증명도 assume하지 못하도록 방지합니다.allow.azure_identities의 값과 달리,deny.azure_identities의 값에는 특정 Azure 자격 증명의 URI 외에도 와일드카드 표현식을 포함할 수 있습니다.Teleport Auth Service는 사용자의 역할을 평가할 때
deny규칙에allow규칙보다 우선권을 부여합니다.인증 공급자에 맞는 적절한 명령을 실행하여
azure-cli-access역할을 your Teleport user에게 할당하십시오:Local User
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
$ ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
로컬 사용자를 편집하여 새 역할을 추가합니다:
$ tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},azure-cli-access" -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
GitHub
-
텍스트 편집기에서
github인증 커넥터를 엽니다:$ tctl edit github/github -
github커넥터를 편집하여teams_to_roles섹션에azure-cli-access을 추가합니다.이 역할에 매핑해야 할 팀은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 팀은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 팀이어야 합니다.
다음은 예시입니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - azure-cli-access -
편집기에서 파일을 저장하고 닫아 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
SAML
-
saml구성 리소스를 가져옵니다:$ tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을saml.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 saml.yaml 파일을 삭제해야 합니다. -
saml.yaml을 편집하여attributes_to_roles섹션에azure-cli-access을 추가합니다.이 역할에 매핑해야 할 속성은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - azure-cli-access -
변경 사항을 적용합니다:
$ tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
OIDC
-
oidc구성 리소스를 가져옵니다:$ tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets플래그는spec.signing_key_pair.private_key값을oidc.yaml파일에 추가한다는 점에 유의하십시오. 이 키에는 민감한 값이 포함되어 있으므로, 리소스를 업데이트한 직후 oidc.yaml 파일을 삭제해야 합니다. -
oidc.yaml을 편집하여claims_to_roles섹션에azure-cli-access을 추가합니다.이 역할에 매핑해야 할 클레임은 조직의 역할 기반 액세스 제어(RBAC)를 어떻게 설계했는지에 따라 달라집니다. 다만, 해당 그룹은 여러분의 사용자 계정을 포함해야 하며 조직 내에서 가능한 한 가장 작은 그룹이어야 합니다.
다음은 예시입니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - azure-cli-access -
변경 사항을 적용합니다:
$ tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
4/4단계. Teleport로 Azure CLI 사용#
이제 Teleport 사용자가
teleport-azure아이덴티티를 가정하도록 권한을 부여했으므로, Teleport를 사용하여 Azure의 API에 인증하고azCLI를 통해 명령을 실행할 수 있습니다.Azure CLI 애플리케이션 목록 확인#
Teleport 사용자가 앞서 등록한
azure-cli애플리케이션을 볼 수 있는지 확인합니다:$ tsh apps ls Application Description Type Public Address Labels ----------- ----------- ---- ------------------------------ ------------------- azure-cli HTTP azure-cli.teleport.example.com teleport.dev/originAzure CLI 사용을 위한 로그인#
teleport-azure아이덴티티를 가정하겠다고 지정하여 애플리케이션에 로그인합니다:$ tsh apps login azure-cli --azure-identity teleport-azure이 명령은
--azure-identity플래그의 값을 사용자가 가정할 수 있도록 권한이 부여된 아이덴티티와 대조하여 검증합니다. 플래그의 값은 아이덴티티의 전체 URI(예: 이 가이드 앞부분에서 복사한 URI)이거나 아이덴티티의 이름(예:teleport-azure)일 수 있습니다.사용자가 단일 Azure 아이덴티티에만 접근할 권한이 있는 경우
--azure-identity플래그를 생략할 수 있지만, 그 외의 경우에는--azure-identity플래그를 포함하지 않으면 오류가 발생합니다.명령이 성공하면 사용자가 선택한 Azure 아이덴티티에 대한 정보가 다음과 유사하게 표시됩니다:
[ { "environmentName": "AzureCloud", "homeTenantId": "00000000-0000-0000-0000-000000000000", "id": "00000000-0000-0000-0000-000000000000", "isDefault": true, "managedByTenants": [], "name": "Microsoft Azure Sponsorship", "state": "Enabled", "tenantId": "00000000-0000-0000-0000-000000000000", "user": { "assignedIdentityInfo": "MSIResource-/subscriptions/0000000000000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure", "name": "userAssignedIdentity", "type": "servicePrincipal" } } ] Logged into Azure app "azure-cli". Your identity: /subscriptions/0000000000000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure Example Azure CLI command: tsh az vm listAzure CLI 명령 실행#
이 시점에서,
az명령 앞에tsh를 붙여 Teleport Application Service를 통해 실행할 수 있습니다. 예를 들어 Azure 리소스 그룹에서 실행 중인 VM 목록을 확인하려면 다음 명령을 실행합니다:$ tsh az vm listTip이 시점에서 예상한 VM이 표시되지 않는다면, Azure 관리형 아이덴티티에 리소스 그룹 범위에서 "Reader" 역할이 할당되어 있는지 다시 확인하십시오.
tsh없이 Azure CLI 애플리케이션 사용하기#tsh를 통해az명령을 실행하는 것 외에도, Azure의 API에 대해 명령을 실행하는 모든 CLI 애플리케이션에 안전한 접근 권한을 부여할 수 있습니다.이를 위해
tsh를 사용하여 CLI 애플리케이션에서 Teleport Application Service로 트래픽을 전달하는 로컬 프록시를 시작합니다. Application Service는 Azure 관리형 아이덴티티를 사용하여 Azure에서 인증 토큰을 가져오며, CLI 애플리케이션은 이 토큰을 사용하여 Azure의 API에 대한 요청을 인증합니다.로컬 프록시를 시작하려면 다음
tsh명령을 실행합니다:$ tsh proxy azureTiptsh proxy az명령은tsh proxy azure의 별칭입니다.이 명령은 로컬 프록시 서버의 주소와 함께 환경 변수를 할당하기 위한
export명령을 출력합니다. Azure CLI 애플리케이션은 Azure의 API에 대한 인증 토큰을 요청하기 위해 이러한 변수를 읽습니다:Started Azure proxy on http://127.0.0.1:54321. To avoid port randomization, you can choose the listening port using the --port flag. Use the following credentials and HTTPS proxy setting to connect to the proxy: export AZURE_CONFIG_DIR=/Users/myuser/.tsh/azure/my.teleport.cluster/azure export HTTPS_PROXY=http://127.0.0.1:54321 export HTTP_PROXY=http://127.0.0.1:54321 export MSI_ENDPOINT=https://azure-msi.teleport.dev/123456789abcdef01234 export REQUESTS_CA_BUNDLE=/Users/myuser/.tsh/keys/teleport.example.com/myuser-app/teleport.example.com/azure-cli-localca.pemWarningtsh proxy azure는 로컬 프록시를 포그라운드에서 실행하므로, 로컬 프록시를 닫을 준비가 될 때까지 프로세스를 중단하거나 명령을 실행한 터미널을 종료하지 마십시오.export명령을 복사하여 두 번째 터미널에 붙여넣습니다. 이제 해당 터미널에서 원하는 Azure CLI 애플리케이션을 실행할 수 있습니다. 예를 들어 Azure VM 목록을 확인하려면 다음 명령을 실행할 수 있습니다:$ az vm listazCLI는 앞서 생성한teleport-azure아이덴티티를 사용하여 인증 토큰을 요청하고, 해당 아이덴티티는 리소스 그룹의 리소스를 볼 수 있는 권한이 있으므로,az vm list명령은 해당 리소스 그룹의 VM만 나열합니다.Notetsh az를 통해az명령을 실행하면,tsh는 백그라운드에서 로컬 프록시를 시작하고 이를 사용하여 명령을 실행합니다.다음 단계#
- 이제 Teleport를 사용하여 Azure CLI 접근을 보호하는 방법을 알았으니, Teleport 사용자가 공격자가 탈취할 수 있는 장기적인 관리자 역할 없이 일시적으로만 Azure 리소스를 관리할 수 있도록 하십시오. 역할 접근 요청 및 접근 요청 플러그인 문서를 참조하십시오.
- Azure 관리 ID 및 사용자 할당 관리 ID 관리 방법에 대한 Azure 문서를 참조하십시오.
azCLI 명령의 전체 목록은 Azure 문서를 참조하십시오.- 이 가이드의 Teleport 역할에서 설명한
internal및external특성이 Teleport에 의해 채워지는 방법에 대한 자세한 내용은 접근 제어 참조를 참조하십시오.
-
-