AKS에서 Teleport Application Access로 Azure CLI 보호하기
Teleport v18.9Teleport를 사용하여 Azure의 API와 상호 작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. in an AKS pod에 설치된 Teleport Application Service는 Microsoft Entra Workload ID을 사용하여 Azure로부터 인증 토큰을 얻습니다.
Teleport를 사용하여 Azure의 API와 상호 작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. 이를 통해 인프라 자체를 보호하는 데 사용하는 것과 동일한 RBAC 시스템을 사용하여 인프라의 관리 API에 대한 액세스를 제어할 수 있습니다.
이 가이드에서 다음을 수행합니다:
- Application Service를 위한 Azure 관리 ID를 생성하고 Kubernetes 서비스 계정의 기본 Workload ID로 설정합니다.
- 사용자 접근을 위한 Azure 관리 ID를 생성하고 동일한 Kubernetes 서비스 계정에 연결합니다.
- Teleport 클러스터에서 Azure 앱을 사용하여 Teleport Application Service를 배포합니다.
- 관리 ID를 어썸(assume)하고
tsh를 통해az명령어를 실행합니다.
작동 방식#
in an AKS pod에 설치된 Teleport Application Service는 Microsoft Entra Workload ID을 사용하여 Azure로부터 인증 토큰을 얻습니다. 사용자가 Teleport에 인증하면 해당 사용자 할당 관리 ID 중 하나를 assume하여 Azure CLI 명령을 실행할 수 있습니다.
어떤 Teleport 사용자 또는 역할이 특정 Azure ID에 액세스할 수 있는지 구성할 수 있으므로, 누가 Azure CLI에 대한 여러 수준의 액세스 자격 증명을 얻을 수 있는지 제어할 수 있습니다.
Teleport Application Service는 리버스 터널을 통해 Teleport Proxy Service에 연결하므로, Application Service를 프라이빗 네트워크에서 실행하여 조직의 Azure ID에 대한 무단 액세스를 방지할 수 있습니다.
사전 요구사항#
-
실행 중인 Teleport (v15.2.4 or higher) 클러스터. 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
```
- Azure Kubernetes Service (AKS) 클러스터 및 클러스터를 관리할 수 있는 관리자 권한.
- 사용자 할당 Azure 관리 ID, 역할 정책, 페더레이션 ID 자격 증명을 관리할 수 있는 권한.
- 워크스테이션에 설치된
azCLI 도구. AKS 클러스터를 구성하고 관리 ID를 생성하려면 Azure 관리자 계정으로 로그인해야 합니다. Teleport의tsh클라이언트도 명령을 실행하기 위해az바이너리를 사용합니다. 운영체제에azCLI를 설치하는 방법은 Azure 문서를 참조하세요. - AKS 배포를 위한
kubectl과helm.
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/6단계. Teleport Application Service를 위한 Azure 관리 ID 생성#
Teleport Application Service에는 사용자 접근을 위한 관리 ID의 클라이언트 ID를 조회할 수 있는 관리 ID가 필요합니다. 이 관리 ID는 Kubernetes 서비스 계정의 기본 ID로 할당됩니다.
아직 로그인하지 않았다면 az login 명령으로 Azure 관리자 계정에 로그인하고, 이후 단계를 위해 몇 가지 환경 변수를 준비합니다. eastus에 Azure 지역 이름을, myResourceGroup에
Azure 리소스 그룹 이름을, myAKSCluster에 AKS 클러스터 이름을,
teleport-azure-cli-aks-agent에 Teleport 에이전트에 할당할 Azure
ID를 지정합니다:
$ export SUBSCRIPTION="$(az account show --query id --output tsv)"
$ export LOCATION="eastus"
$ export RESOURCE_GROUP="myResourceGroup"
$ export AKS_CLUSTER_NAME="myAKSCluster"
$ export USER_ASSIGNED_IDENTITY_NAME="teleport-azure-cli-aks-agent"
이제 관리 ID를 생성하고, 이후 단계를 위해 클라이언트 ID를 기억해 둡니다:
$ az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
$ export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -o tsv)"
다음으로 Microsoft.ManagedIdentity/userAssignedIdentities/read 권한을 가진
역할을 생성하고 이를 관리 ID에 할당합니다:
$ cat > ${USER_ASSIGNED_IDENTITY_NAME}-role.json <
2/6단계. Workload ID를 위한 AKS 클러스터 구성#
Microsoft Entra Workload ID를 사용하려면 AKS 클러스터에서 OIDC 발급자와 Workload ID를 활성화해야 합니다.
$ az aks update -g "${RESOURCE_GROUP}" -n "{AKS_CLUSTER_NAME}" --enable-oidc-issuer --enable-workload-identity
kubectl을 사용하기 전에 로컬 Kubernetes 구성이 AKS 클러스터에 접근할 수 있도록
업데이트되었는지 확인하세요:
$ az aks get-credentials -n "${AKS_CLUSTER_NAME}" -g "${RESOURCE_GROUP}"
Kubernetes 서비스 계정을 생성하고, 이전 단계에서 생성한 관리 ID의 클라이언트 ID로 주석을 추가합니다:
$ cat > azure_access_aks_service_account.yaml <
이제 이전 단계에서 생성한 관리 ID를 Kubernetes 서비스 계정과 연결하기 위한 페더레이션 자격 증명을 생성합니다.
$ export AKS_OIDC_ISSUER="$(az aks show -n "${AKS_CLUSTER_NAME}" -g "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
$ az identity federated-credential create --name "federated-${USER_ASSIGNED_IDENTITY_NAME}" --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:teleport-ns:teleport-azure-cli-aks-service-account --audience api://AzureADTokenExchange
3/6단계. 사용자 접근을 위한 Azure 관리 ID 생성#
이 단계에서는 Teleport 사용자가 이후 tsh를 통해 어썸할 수 있는 사용자 할당 관리
ID를 생성하고, 이 관리 ID를 Kubernetes 서비스 계정과 연결합니다.
사용자 접근에 사용할 다른 관리 ID가 이미 있다면 새 ID 생성 단계를 건너뛸 수 있습니다.
Azure 관리 ID 생성#
az로 관리 ID를 생성합니다:
$ az identity create --name "teleport-reader" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
이 관리 ID의 리소스 ID URI는 Teleport 역할 또는 사용자 트레이트(trait)에서 필요하므로 기억해 두세요:
$ az identity show --name "teleport-reader" -g "${RESOURCE_GROUP}" --query id -o tsv
다음으로 Teleport 사용자가 가져야 할 권한을 관리 ID에 할당합니다. 이 예시에서는 "Reader" 역할을 관리 ID에 할당합니다:
$ az role assignment create --role "Reader" --scope "/subscriptions/${SUBSCRIPTION}" --assignee-object-id $(az identity show --name "teleport-reader" --resource-group "${RESOURCE_GROUP}" --query principalId --output tsv) --assignee-principal-type ServicePrincipal
관리 ID를 Kubernetes 서비스 계정과 연결#
Kubernetes 서비스 계정에는 여러 개의 관리 ID를 할당할 수 있습니다. Application Service를 위한 관리 ID는 이전 단계에서 서비스 계정에 할당되었습니다. 이제 사용자 접근을 위한 관리 ID에 대해서도 동일한 작업을 반복합니다:
$ export AKS_OIDC_ISSUER="$(az aks show -n "${AKS_CLUSTER_NAME}" -g "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -o tsv)"
$ az identity federated-credential create --name "federated-teleport-reader" --identity-name "teleport-reader" --resource-group "${RESOURCE_GROUP}" --issuer "${AKS_OIDC_ISSUER}" --subject system:serviceaccount:teleport-ns:teleport-azure-cli-aks-service-account --audience api://AzureADTokenExchange
4/6단계 사용자가 Azure CLI에 접근하도록 활성화#
다음 단계는 Teleport 사용자가 Azure 자격 증명을 assume하고 Teleport를 통해 Azure CLI 명령을 실행하도록 권한을 부여하는 것입니다. Teleport의 RBAC 시스템을 사용하여 이 자격 증명에 대한 액세스를 보호하며, 사용자의 역할이 액세스할 수 있는 Azure 관리형 자격 증명(있는 경우)을 결정합니다.
사용자에게 Azure 자격 증명에 대한 액세스 권한을 부여하는 데는 두 가지 접근 방식이 있습니다.
| 접근 방식 | 설명 | 지원되는 사용자 유형 |
|---|---|---|
| Dynamic | Teleport 역할에 사용자에게 직접 할당된 모든 Azure 자격 증명에 대한 액세스 권한을 부여하는 템플릿 변수가 포함됩니다. | 로컬 사용자, OIDC, SAML |
| Static | Teleport 역할이 사용자가 assume할 수 있는 Azure 자격 증명을 명시적으로 지정합니다. | 로컬 사용자, OIDC, SAML, GitHub |
계정에 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.yaml
Web 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.yaml
Web 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-azure
azure_identities 필드의 자격 증명 URI를 Step 1에서 복사한 것과 일치하도록
편집합니다.
이 역할은 사용자에게 앞서 정의한 azure-cli 애플리케이션과 같이 Teleport에 등록된
모든 애플리케이션에 대한 액세스 권한을 부여하고, 해당 사용자가 앞서 생성한
teleport-azure 자격 증명을 assume할 수 있도록 허용합니다.
역할을 생성합니다:
$ tctl create -f azure-cli-access.yaml
Web 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 클러스터에서 로그아웃한 다음 다시 로그인하여 새 역할을 적용합니다.
5/6단계. Teleport Application Service 배포#
이 단계에서는 AKS 클러스터에서 Teleport Application Service를 실행합니다.
조인 토큰 받기#
조인 토큰을 생성하여 Teleport 클러스터와 새 Application Service 인스턴스 간에 신뢰를 구축합니다:
$ tctl tokens add --type=app --ttl=1h --format=text
(=presets.tokens.first=)
Teleport Application Service 시작#
values.yaml이라는 Helm values 파일을 생성하고, token에 위에서
받은 조인 토큰의 값을,
example.teleport.sh:443에 Teleport Proxy Service의 호스트
및 포트(예: teleport.example.com:443)를 지정합니다:
$ cat > azure_access_agent.values.yaml <
Teleport 에이전트 서비스용 Helm 차트인 teleport-kube-agent를 설치합니다:
$ helm -n teleport-ns install teleport-azure-access-agent \
teleport/teleport-kube-agent --values azure_access_agent.values.yaml
Teleport 에이전트 파드가 실행 중인지 확인하세요. 준비 완료 상태의 컨테이너 하나를
가진 teleport-azure-access-agent 파드가 하나 보여야 합니다:
$ kubectl -n teleport-ns get pods
NAME READY STATUS RESTARTS AGE
teleport-azure-access-agent-0 1/1 Running 0 99s
6/6단계. Teleport로 Azure CLI 사용#
이제 Teleport 사용자가 teleport-azure 아이덴티티를 가정하도록 권한을
부여했으므로, Teleport를 사용하여 Azure의 API에 인증하고 az CLI를 통해
명령을 실행할 수 있습니다.
Azure CLI 애플리케이션 목록 확인#
Teleport 사용자가 앞서 등록한 azure-cli 애플리케이션을 볼 수 있는지
확인합니다:
$ tsh apps ls
Application Description Type Public Address Labels
----------- ----------- ---- ------------------------------ -------------------
azure-cli HTTP azure-cli.teleport.example.com teleport.dev/origin
Azure 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 list
Azure CLI 명령 실행#
이 시점에서, az 명령 앞에 tsh를 붙여 Teleport Application Service를 통해
실행할 수 있습니다. 예를 들어 Azure 리소스 그룹에서 실행 중인 VM 목록을
확인하려면 다음 명령을 실행합니다:
$ tsh az vm list
이 시점에서 예상한 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 azure
tsh 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.pem
tsh proxy azure는 로컬 프록시를 포그라운드에서 실행하므로, 로컬 프록시를
닫을 준비가 될 때까지 프로세스를 중단하거나 명령을 실행한 터미널을 종료하지
마십시오.
export 명령을 복사하여 두 번째 터미널에 붙여넣습니다. 이제 해당
터미널에서 원하는 Azure CLI 애플리케이션을 실행할 수 있습니다. 예를 들어
Azure VM 목록을 확인하려면 다음 명령을 실행할 수 있습니다:
$ az vm list
az CLI는 앞서 생성한 teleport-azure 아이덴티티를 사용하여 인증 토큰을
요청하고, 해당 아이덴티티는 리소스 그룹의 리소스를 볼 수 있는 권한이 있으므로,
az vm list 명령은 해당 리소스 그룹의 VM만 나열합니다.
tsh az를 통해 az 명령을 실행하면, tsh는 백그라운드에서 로컬 프록시를
시작하고 이를 사용하여 명령을 실행합니다.
다음 단계#
- AKS에서 Workload ID 구성에 대한 Microsoft 가이드를 참조하세요.
- Teleport로 Azure CLI 접근을 보호하는 방법을 알았으니, 이제 Teleport 사용자가 공격자가 탈취할 수 있는 장기적인 관리자 역할 없이 일시적으로만 Azure 리소스를 관리할 수 있도록 하세요. 역할 접근 요청 및 접근 요청 플러그인 관련 문서를 확인하세요.
- Azure 관리 ID에 대한 자세한 내용과 사용자 할당 관리 ID를 관리하는 방법은 Azure 관리 ID 및 사용자 할당 관리 ID 관리 Azure 문서를 참조하세요.
azCLI 명령어 전체 목록은 Azure 문서를 참조하세요.- 이 가이드에서 설명한 Teleport 역할 내에서 Teleport가
internal및external트레이트를 채우는 방식에 대한 자세한 내용은 접근 제어 참조를 확인하세요.