Infograb logo
Azure CLIs를 Teleport 애플리케이션 액세스로 보호하기

당신은 Teleport를 사용하여 Azure의 CLI 도구에 대한 액세스를 관리할 수 있습니다. 이를 통해 인프라 자체를 보호하는 데 사용하는 것과 동일한 RBAC 시스템을 사용하여 인프라의 관리 API에 대한 액세스를 제어할 수 있습니다.

이 가이드에서는 다음을 수행합니다:

  1. 사용자 액세스를 위해 Azure 관리 ID를 생성하고 이를 VM에 연결합니다.
  2. Teleport 클러스터에 Azure 앱과 함께 Teleport 애플리케이션 서비스를 배포합니다.
  3. 관리 ID를 가정하고 az 명령을 tsh를 통해 실행합니다.

작동 방식

Teleport Application Service는 Azure VM에서에 설치되어 있으며, managed identities을 사용하여 Azure에서 인증 토큰을 얻습니다. 사용자가 Teleport에 인증하면, Azure CLI 명령을 실행하기 위해 각각의 사용자 할당 관리 ID 중 하나를 수임할 수 있습니다.

어떤 Teleport 사용자 또는 역할이 특정 Azure ID에 접근할 수 있는지를 구성할 수 있으며, 이를 통해 Azure CLI의 다양한 접근 수준에 대한 자격 증명을 얻을 수 있는 사람을 제어할 수 있습니다. Teleport Application Service는 역 터널을 통해 Teleport Proxy Service에 연결되므로, 애플리케이션 서비스를 개인 네트워크에서 실행하고 조직의 Azure ID에 대한 무단 접근을 방지할 수 있습니다.

전제 조건

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 워크스테이션에 az CLI 도구가 설치되어 있어야 합니다. Teleport의 tsh 클라이언트는 명령을 실행하기 위해 az 바이너리를 사용합니다. Azure 문서에서 운영 체제에 az CLI를 설치하는 방법을 확인하세요.

  • Teleport 애플리케이션 서비스를 실행할 Azure VM이 필요합니다. Azure VM은 리눅스 배포판에서 실행되어야 합니다.

    Azure Kubernetes Service (AKS)

    이 가이드는 Microsoft Entra pod-managed identities가 활성화된 Azure Kubernetes Service (AKS) 배포에도 적용됩니다. 그러나 pod-managed identities 기능은 2024년 9월에 중단될 예정입니다.

    Microsoft Entra Workload ID를 통한 AKS에서 Teleport 애플리케이션 서비스를 실행하는 방법에 대해서는 Azure CLI Access on AKS with Workload ID를 참조하세요.

  • 사용자 지정 Azure 관리 ID를 생성하고 이를 VM에 연결할 수 있는 권한이 필요합니다. Azure 계정에서 이를 수행하기 위해서는 세 가지 역할 할당이 필요합니다: Managed Identity Contributor, Managed Identity Operator, 및 Virtual Machine Contributor.

    기존 ID 사용하기

    이 가이드에서는 Azure CLI 액세스를 보여주기 위해 사용자 지정 관리 ID를 생성합니다.

    Teleport를 통해 Azure CLI 사용자가 가정할 다른 ID가 있다면, 대신 이를 사용할 수 있습니다. 이 경우 Managed Identity Contributor 역할 할당이 필요하지 않습니다.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오.

    예를 들어:

    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다.

    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

단계 1/4. VM에 ID 부여하기

이 단계에서는 Azure 관리 ID를 생성하고 이를 Azure VM에 할당합니다. 생성할 ID는 teleport-azure라고 하며, Azure 계정 내 리소스를 조회할 수 있는 권한을 가집니다.

Teleport를 통해 어떤 Azure ID에도 Azure CLI 액세스를 부여할 수 있습니다. 사용할 다른 ID가 있다면, 새 ID 생성을 건너뛸 수 있습니다.

Azure 관리 ID 생성하기

Azure 포털에서 Managed Identities 뷰를 방문합니다.

생성을 클릭합니다.

구독, 리소스 그룹, 및 지역에서 VM이 속한 것을 선택합니다.

이름 필드에 teleport-azure를 입력합니다.

검토 + 생성을 클릭한 다음 생성을 클릭합니다.

생성이 완료되면 리소스 이동을 클릭합니다. 새 ID 페이지에서 JSON 뷰를 클릭합니다. 오른쪽 사이드바 상단에서 리소스 ID라는 필드를 확인할 수 있으며, 값은 다음과 비슷합니다:

/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure

이 ID의 URI를 복사해 이 가이드에서 나중에 사용할 수 있도록 합니다.

teleport-azure ID에 리소스 보기 허용하기

Azure ID를 생성한 후, Azure 계정 내 리소스에 액세스할 수 있도록 승인합니다. 이 경우, 새 Azure ID에 리소스 그룹 내 리소스를 조회할 수 있는 권한을 부여합니다.

Azure 포털 검색창에 Azure 리소스 그룹의 이름을 입력하고 해당 리소스 그룹 페이지를 방문합니다. 왼쪽 탐색 사이드바에서 액세스 제어(IAM) 탭을 클릭합니다. 액세스 제어(IAM) 패널 상단 버튼 행에서 추가 > 역할 할당 추가를 클릭합니다.

역할 할당 추가 화면 내에서 Reader를 클릭합니다. 이는 리소스에 대한 보기 전용 액세스를 부여하는 내장 역할입니다.

화면 하단으로 스크롤하여 다음을 클릭합니다.

구성원 탭에서 액세스 부여 필드에서 Managed identity를 선택합니다. 구성원 선택을 클릭합니다.

오른쪽 사이드바에서 Managed identity 드롭다운 메뉴를 찾아 사용자 지정 관리 ID를 선택합니다. 이전에 생성한 teleport-azure ID를 선택합니다.

선택을 클릭한 다음 검토 + 할당을 클릭합니다.

역할이 "Reader"인지, 범위가 선택한 리소스 그룹과 일치하는지, 구성원 필드에 이전에 생성한 teleport-azure 관리 ID가 포함되어 있는지 확인합니다.

검토 + 할당을 다시 클릭합니다.

Azure VM에 ID 연결하기

이제 관리 ID를 생성하고 역할을 할당했으므로, Azure VM에 ID를 연결하여 Teleport 애플리케이션 서비스가 ID를 가정하고 Azure CLI 트래픽을 프록시할 수 있도록 합니다.

Azure 포털의 가상 머신 뷰에서 Teleport 애플리케이션 서비스를 호스팅하는 VM의 이름을 클릭합니다.

우측 패널에서 ID 탭을 클릭한 다음 ID 뷰 내에서 사용자 지정 탭을 클릭합니다. +추가를 클릭한 뒤 teleport-azure ID를 선택합니다. 추가를 클릭합니다.

Azure VM 페이지의 ID 탭으로 돌아갑니다. 사용자 지정 하위 탭에 새 ID가 나열되어 있는지 확인합니다:

단계 2/4. Teleport 애플리케이션 서비스 배포하기

이 단계에서는 teleport-azure ID가 할당된 Azure VM에서 Teleport 애플리케이션 서비스를 실행합니다.

가입 토큰 가져오기

새 애플리케이션 서비스 인스턴스와 Teleport 클러스터 간에 신뢰를 구축하려면 가입 토큰을 생성하세요:

tctl tokens add --type=app --ttl=1h --format=text
abcd123-insecure-do-not-use-this

Teleport 애플리케이션 서비스를 설치할 호스트에서, 당신의 토큰만으로 구성된 /tmp/token이라는 파일을 생성하세요:

echo join-token | sudo tee /tmp/token

Teleport 애플리케이션 서비스 설치하기

Teleport 애플리케이션 서비스를 설치할 호스트에서 다음 명령을 실행합니다:

Linux 서버에 Teleport 설치하기:

  1. Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:

    에디션
    Teleport Enterprise Cloudcloud
    Teleport Enterprise (자체 호스팅)enterprise
    Teleport Community Editionoss
  2. 설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"

    그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')"
  3. Linux 서버에 Teleport를 설치합니다:

    curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition

    설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.

Teleport 애플리케이션 서비스 구성하기

Teleport 애플리케이션 서비스를 실행할 호스트에서 /etc/teleport.yaml에 다음 내용을 포함한 파일을 생성합니다:

version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.example.com:443"
auth_service:
  enabled: off
proxy_service:
  enabled: off
ssh_service:
  enabled: off
app_service:
  enabled: true
  apps:
  - name: azure-cli
    cloud: Azure

/etc/teleport.yaml를 수정하여 teleport.example.com:443를 Teleport 프록시 서비스 또는 Teleport 클라우드 테넌트의 호스트 및 포트로 바꿉니다. 예를 들어, mytenant.teleport.sh:443으로 변경합니다.

app_service 필드는 Teleport 애플리케이션 서비스를 구성합니다. app_service.apps 내의 각 항목은 애플리케이션 구성입니다.

이번 예제에서는 cloudAzure로 설정하여 Azure CLI 액세스를 활성화했습니다. 이 설정이 구성되면, 애플리케이션 서비스는 사용자의 선택한 ID로 Azure API에 대한 액세스를 요청하여 Azure CLI로부터의 사용자 명령을 프록시합니다. 이는 ID가 애플리케이션 서비스 호스트에 연결된 ID 중 하나일 때 작동합니다.

Teleport 애플리케이션 서비스 실행하기

호스트가 부팅될 때 Teleport 애플리케이션 서비스가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 Teleport 애플리케이션 서비스를 설치한 방법에 따라 다릅니다.

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

sudo teleport install systemd -o /etc/systemd/system/teleport.service
sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 애플리케이션 서비스의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

단계 3/4. 사용자에게 Azure CLI 액세스 허용하기

다음 단계는 Teleport 사용자가 Azure ID를 가정하고 Teleport를 통해 Azure CLI 명령을 실행할 수 있도록 권한을 부여하는 것입니다. 사용자의 역할이 어떤 Azure 관리 ID에 접근할 수 있는지 결정하는 Teleport의 RBAC 시스템을 사용하여 이 ID에 대한 접근을 보호합니다.

Azure ID에 접근할 수 있도록 사용자를 권한 부여하는 두 가지 접근 방식이 있습니다.

접근 방식설명지원되는 사용자 유형
DynamicTeleport 역할에 사용자가 직접 할당된 모든 Azure ID에 접근할 수 있는 템플릿 변수가 포함됩니다.로컬 사용자, OIDC, SAML
StaticTeleport 역할이 사용자가 가정할 수 있는 Azure ID를 명시적으로 지정합니다.로컬 사용자, OIDC, SAML, GitHub

Azure ID를 계정에 추가할 때 잘 확장되는 동적 접근 방식을 사용하는 것이 좋습니다. GitHub SSO를 사용하여 사용자를 인증하도록 Teleport Community Edition 클러스터를 구성한 경우, OAuth 기반 GitHub 애플리케이션이 사용자 지정 클레임을 지원하지 않기 때문에 정적 접근 방식을 사용해야 합니다.

접근 방식

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 서비스는 사용자가 할당된 모든 Azure ID로 {{internal.azure_identities}} 템플릿 변수를 채웁니다.

다음 명령어를 실행하여 Teleport 사용자에게 teleport-azure ID를 할당합니다. 이전에 복사한 Azure ID의 URI를 --set-azure-identities의 값으로 붙여넣습니다:

tctl users update teleport-user \--set-azure-identities azure-identity-uri

이 명령은 --set-azure-identities 플래그를 사용하여 사용자에게 Azure ID를 추가합니다. 쉼표로 구분하여 여러 ID URI를 --set-azure-identities에 지정할 수 있습니다.

ID 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

신원 제공자에서 azure_identities라는 사용자 지정 SAML 속성 또는 OIDC 클레임을 정의합니다. 각 사용자의 azure_identities 속성 또는 클레임은 다음 형식을 사용하는 Azure ID 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 서비스는 사용자가 할당된 모든 Azure ID로 {{external.azure_identities}} 템플릿 변수를 채웁니다.

역할을 생성합니다:

tctl create -f azure-cli-access.yaml

특정 Azure ID에 접근할 수 있는 역할을 정의합니다. 이는 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

1단계에서 복사한 ID URI에 맞게 azure_identities 필드를 수정합니다.

이 역할은 사용자가 이전에 정의한 azure-cli 애플리케이션과 같은 Teleport 등록 애플리케이션에 접근할 수 있도록 하며, 사용자가 이전에 생성한 teleport-azure ID를 가정할 수 있도록 합니다.

역할을 생성합니다:

tctl create -f azure-cli-access.yaml

Azure ID에 대한 접근을 거부하는 Teleport 역할을 정의할 수 있습니다. 그렇게 하려면 role 리소스의 spec.deny 섹션 내에서 azure_identities 필드에 값을 할당합니다.

예를 들어, 이 역할은 사용자가 모든 Azure ID에 접근하는 것을 거부합니다:

kind: role
version: v5
metadata:
  name: "no-azure-identities"
spec:
  allow:
    app_labels:
      '*': '*'
  deny:
    azure_identities:
      - '*'

no-azure-identities 역할은 사용자가 모든 등록된 애플리케이션에 접근할 수 있도록 하지만, deny.azure_identities 필드 내에 와일드카드 문자(*)를 사용하여 사용자가 어떤 Azure ID도 가정하는 것을 방지합니다.

allow.azure_identities의 값과는 달리, deny.azure_identities의 값은 특정 Azure ID URI 외에도 와일드카드 표현식을 포함할 수 있습니다.

Teleport Auth 서비스는 사용자의 역할을 평가할 때 deny 규칙을 allow 규칙보다 우선시합니다.

azure-cli-access 역할을 Teleport 사용자에게 할당하려면 인증 제공자에 맞는 적절한 명령어를 실행하세요:

  1. 로컬 사용자의 역할을 콤마로 구분된 목록으로 가져옵니다:

    ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")')
  2. 로컬 사용자를 편집하여 새로운 역할을 추가합니다:

    tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},azure-cli-access"
  3. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. github 인증 커넥터를 가져옵니다:

    tctl get github/github --with-secrets > github.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 github.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 github.yaml 파일을 제거해야 합니다.

  2. github.yaml을 편집하고 teams_to_roles 섹션에 azure-cli-access을 추가합니다.

    이 역할에 매핑할 팀은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 하지만 팀에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 팀이어야 합니다.

    여기에 예시가 있습니다:

      teams_to_roles:
        - organization: octocats
          team: admins
          roles:
            - access
    +       - azure-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f github.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 assum 하기 위해 다시 로그인합니다.

  1. saml 구성 리소스를 가져옵니다:

    tctl get --with-secrets saml/mysaml > saml.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 saml.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 saml.yaml 파일을 제거해야 합니다.

  2. saml.yaml을 편집하고 attributes_to_roles 섹션에 azure-cli-access을 추가합니다.

    이 역할에 매핑할 속성은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      attributes_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - azure-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f saml.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

  1. oidc 구성 리소스를 가져옵니다:

    tctl get oidc/myoidc --with-secrets > oidc.yaml

    --with-secrets 플래그는 spec.signing_key_pair.private_key의 값을 oidc.yaml 파일에 추가합니다. 이 키는 민감한 값을 포함하고 있기 때문에, 리소스를 업데이트한 후 즉시 oidc.yaml 파일을 제거해야 합니다.

  2. oidc.yaml을 편집하고 claims_to_roles 섹션에 azure-cli-access을 추가합니다.

    이 역할에 매핑할 클레임은 귀하의 조직에서 어떻게 역할 기반 접근 제어(RBAC)를 설계했느냐에 따라 달라집니다. 그러나 그룹에는 귀하의 사용자 계정이 포함되어야 하며, 조직 내에서 가능한 한 작은 그룹이어야 합니다.

    여기에 예시가 있습니다:

      claims_to_roles:
        - name: "groups"
          value: "my-group"
          roles:
            - access
    +       - azure-cli-access
    
  3. 변경 사항을 적용합니다:

    tctl create -f oidc.yaml
  4. Teleport 클러스터에서 로그아웃한 후 새로운 역할을 asum 하기 위해 다시 로그인합니다.

단계 4/4. 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"
    }
  }
]

Azure 애플리케이션 "azure-cli"에 로그인했습니다.
당신의 아이덴티티: /subscriptions/0000000000000-0000-0000-0000-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure
예제 Azure CLI 명령: tsh az vm list

Azure CLI 명령 실행하기

이제 Teleport 애플리케이션 서비스를 사용하여 az 명령을 실행할 수 있으며, tsh로 접두사를 붙여 실행합니다. 예를 들어, Azure 리소스 그룹에서 실행 중인 VM 목록을 보려면 다음 명령을 실행하세요:

tsh az vm list

이 시점에서 예상되는 VM이 보이지 않는 경우, Azure 관리 아이덴티티가 리소스 그룹의 범위에서 "Reader" 역할이 할당되어 있는지 다시 확인하세요.

tsh 없이 Azure CLI 애플리케이션 사용하기

tsh를 통해 az 명령을 실행하는 것 외에도, Azure API에 대해 명령을 실행하는 모든 CLI 애플리케이션에 안전하게 접근할 수 있습니다.

이를 위해, tsh를 사용하여 CLI 애플리케이션의 트래픽을 Teleport 애플리케이션 서비스로 포워딩하는 로컬 프록시를 시작합니다. 애플리케이션 서비스는 Azure 관리 아이덴티티를 사용하여 Azure에서 인증 토큰을 가져오고, 이 토큰을 사용하여 CLI 애플리케이션이 Azure API에 인증 요청을 수행합니다.

로컬 프록시를 시작하려면 다음 tsh 명령을 실행하세요:

tsh proxy azure

tsh proxy az 명령은 tsh proxy azure의 별칭입니다.

이 명령은 로컬 프록시 서버의 주소와 환경 변수를 할당하기 위한 export 명령을 출력합니다. Azure CLI 애플리케이션은 이러한 변수를 읽어 Azure API의 인증 토큰을 요청합니다:

http://127.0.0.1:54321에서 Azure 프록시가 시작되었습니다.
포트 랜덤화를 피하려면 --port 플래그를 사용하여 리스닝 포트를 선택할 수 있습니다.

프록시에 연결하려면 다음 자격 증명 및 HTTPS 프록시 설정을 사용하세요:

  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를 통해 명령을 실행할 때, tsh는 로컬 프록시를 백그라운드에서 시작하고 이를 사용하여 명령을 실행합니다.

다음 단계

  • 이제 Azure CLI 액세스를 Teleport로 보호하는 방법을 알게 되었으므로, Teleport 사용자가 공격자가 가로챌 수 있는 오랜 관리자 역할 없이 Azure 리소스를 일시적으로만 관리할 수 있도록 설정하세요. 역할 액세스 요청액세스 요청 플러그인에 대한 문서를 참조하세요.
  • Azure 관리 ID에 대한 정보 및 사용자 지정 관리 ID 관리 방법에 대한 정보는 Azure 문서를 참조하세요.
  • az CLI 명령의 전체 목록은 Azure 문서를 참조하세요.
  • 이 가이드 내 Teleport 역할의 internalexternal 속성을 어떻게 Teleport가 채우는지에 대한 전체 세부 사항은 Teleport 액세스 제어 참조를 참조하세요.
Teleport 원문 보기