인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Teleport 애플리케이션 액세스로 Azure CLI 보호
Teleport를 사용하여 Azure의 API와 상호작용하는 CLI 도구에 대한 액세스를 관리할 수 있습니다. 이를 통해 인프라 자체를 보호하는 데 사용하는 것과 동일한 RBAC 시스템을 사용하여 인프라의 관리 API에 대한 액세스를 제어할 수 있습니다.
이 가이드에서는 다음을 수행합니다:
- 사용자 액세스를 위한 Azure 관리 ID를 생성하고 이를 VM에 연결합니다.
- Teleport 클러스터에 Azure 앱으로 Teleport 애플리케이션 서비스를 배포합니다.
- 관리 ID를 맡고
tsh
를 통해az
명령을 실행합니다.
작동 방식
Teleport Application Service는 on an Azure VM에 설치되어 있으며 managed identities을 사용하여 Azure에서 인증 토큰을 얻습니다. 사용자가 Teleport에 인증할 때, Azure CLI 명령을 실행하기 위해 해당 사용자 지정 관리 ID 중 하나를 가정할 수 있습니다.
어떤 Teleport 사용자 또는 역할이 특정 Azure ID에 접근할 수 있는지를 구성할 수 있어, Azure CLI에 대한 다양한 수준의 접근을 위해 자격 증명을 얻을 수 있는 사람을 제어할 수 있습니다.
Teleport Application Service는 리버스 터널을 통해 Teleport Proxy Service에 연결되므로, Application Service를 개인 네트워크에서 실행하고 조직의 Azure ID에 대한 무단 접근을 방지할 수 있습니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
-
귀하의 워크스테이션에
az
CLI 도구가 설치되어 있어야 합니다. Teleport의tsh
클라이언트는 명령을 실행하기 위해az
바이너리를 사용합니다. 귀하의 운영 체제에az
CLI를 설치하는 방법은 Azure 문서를 참조하십시오. -
Teleport 애플리케이션 서비스를 실행할 Azure VM이 필요합니다. Azure VM 은 리눅스 배포판에서 실행 중이어야 합니다.
Azure Kubernetes Service (AKS)이 가이드는 Microsoft Entra의 포드 관리 ID가 활성화된 Azure Kubernetes Service (AKS) 배포에도 적용 가능합니다. 그러나 포드 관리 ID 기능은 2024년 9월에 중단될 예정입니다.
Microsoft Entra 워크로드 ID를 사용하여 AKS에서 Teleport 애플리케이션 서비스를 실행하는 방법은 Azure CLI Access on AKS with Workload ID를 참조하십시오.
-
VM에 연결할 사용자 지정 Azure 관리 ID를 생성할 수 있는 권한이 필요합니다. Azure에서는 이를 수행하기 위해 Azure 계정에서 세 가지 역할 할당이 필요합니다: 관리 ID 기여자, 관리 ID 운영자 및 가상 머신 기여자.
기존 ID 사용이 가이드에서는 Azure CLI 액세스를 위해 사용자 지정 관리 ID를 생성하여 Teleport와 함께 보여줍니다.
만약 다른 ID를 사용하여 Azure CLI 사용자가 Teleport를 통해 가질 수 있도록 하고 싶다면, 그 ID를 사용하실 수 있습니다. 이 경우, 관리 ID 기여자 역할 할당이 필요하지 않습니다.
-
연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오.예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1/4단계. VM에 ID 부여
이 단계에서는 Azure 관리 ID를 생성하고 이를 Azure VM에 할당할 것입니다. 생성할 ID의 이름은 teleport-azure
이며, Azure 계정의 리소스를 볼 수 있는 권한이 부여됩니다.
Teleport를 통해 모든 Azure ID 아래에서 Azure CLI에 대한 액세스를 부여할 수 있습니다. 사용하려는 다른 ID가 있는 경우, 새 ID 생성 단계를 건너뛸 수 있습니다.
Azure 관리 ID 생성
Azure Portal에서 관리 ID 보기로 이동합니다.
생성을 클릭합니다.
구독, 리소스 그룹, 지역에서 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
정체성을 사용하여 리소스 보기 허용
Azure 정체성을 생성한 후에는 해당 정체성이 귀하의 계정에서 리소스에 접근할 수 있도록 권한을 부여해야 합니다. 이 경우, 새로운 Azure 정체성이 자신의 리소스 그룹에서 리소스를 볼 수 있도록 권한을 부여하겠습니다.
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-azure
정체성을 선택합니다.
Select를 클릭한 다음 Review + assign을 클릭합니다.
귀하의 Role이 "Reader"인지, Scope가 선택한 리소스 그룹과 일치하는지, Members 필드에 이전에 생성한 teleport-azure
관리형 정체성이 포함되어 있는지 확인하십시오.
다시 Review + assign을 클릭합니다.
Azure VM에 정체성 연결
관리형 정체성을 생성하고 역할을 할당했으므로, Teleport Application Service가 정체성을 가정할 수 있도록 Azure VM에 정체성을 연결합니다.
Azure Portal의 가상 머신 보기에서 Teleport Application Service를 호스팅하는 데 사용하고 있는 VM의 이름을 클릭합니다.
오른쪽 패널에서 Identity 탭을 클릭한 다음 Identity 보기 내에서 User assigned 탭을 클릭합니다. +Add를 클릭하고 teleport-azure
정체성을 선택합니다. Add를 클릭합니다.
Azure VM 페이지의 Identity 탭으로 돌아갑니다. User assigned 하위 탭에 새 정체성이 나열되어 있어야 합니다:
2/4단계. Teleport Application Service 배포
이 단계에서는 teleport-azure
정체성을 할당한 Azure VM에서 Teleport Application Service를 실행합니다.
조인 토큰 가져오기
Teleport 클러스터와 새로운 애플리케이션 서비스 인스턴스 간의 신뢰를 형성하려면 조인 토큰을 생성하세요:
tctl tokens add --type=app --ttl=1h --format=textabcd123-insecure-do-not-use-this
Teleport 애플리케이션 서비스를 설치할 호스트에서, /tmp/token
이라는 파일을 생성하고 그 안에 오직 당신의 토큰만 포함되도록 하세요:
echo join-token | sudo tee /tmp/token
Teleport Application Service 설치
Teleport Application Service를 설치할 호스트에서 다음 명령을 실행합니다:
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition를 다음 중 하나로 할당합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자가 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport 버전을 가져옵니다. 클러스터에서 자동 에이전트 업데이트가 활성화된 경우, 최신 Teleport 버전을 쿼리하여 업데이트된 내용과의 호환성을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 가져옵니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
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: 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 Proxy Service 또는 Teleport Cloud 테넌트의 호스트와 포트로 교체합니다. 예: mytenant.teleport.sh:443
.
app_service
필드는 Teleport Application Service를 구성합니다. app_service.apps
내의 각 항목은 애플리케이션 구성입니다.
이번 예제에서는 cloud
를 Azure
로 설정하여 Azure CLI 액세스를 활성화했습니다. 이러한 설정이 구성되면, Application Service는 사용자가 선택한 정체성 하에 Azure의 API에 대한 액세스를 요청하여 Azure CLI로부터 사용자 명령을 프록시합니다. 이는 정체성이 Application Service 호스트에 연결된 정체성 중 하나인 동안 작동합니다.
Teleport 애플리케이션 서비스 실행
호스트가 부팅될 때 the Teleport Application Service가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 the Teleport Application Service를 설치한 방법에 따라 다릅니다.
the Teleport Application Service를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
the Teleport Application Service를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 the Teleport Application Service의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
3/4 단계. 사용자에게 Azure CLI 접근 권한 부여
다음 단계는 Teleport 사용자가 Azure Identities를 가정하고 Teleport를 통해 Azure CLI 명령을 실행할 수 있도록 권한을 부여하는 것입니다. 사용자의 역할이 사용자가 접근할 수 있는 Azure 관리 Identities(있다면)를 결정하는 Teleport의 RBAC 시스템을 사용하여 이 Identity에 대한 접근을 보호합니다.
사용자가 Azure Identities에 접근하도록 권한을 부여하는 두 가지 접근 방식이 있습니다.
접근 방식 | 설명 | 지원되는 사용자 유형 |
---|---|---|
동적 | Teleport 역할에는 사용자가 직접 할당된 모든 Azure Identities에 접근할 수 있는 템플릿 변수가 포함되어 있습니다. | 로컬 사용자, OIDC, SAML |
정적 | Teleport 역할은 사용자가 가정할 수 있는 Azure Identities를 명시적으로 지정합니다. | 로컬 사용자, OIDC, SAML, GitHub |
동적 접근 방식을 사용하는 것이 좋습니다. Azure Identities를 계정에 추가할 때 잘 확장됩니다. GitHub SSO를 사용하여 사용자를 인증하는 Teleport 커뮤니티 에디션 클러스터를 구성한 경우 OAuth 기반 GitHub 애플리케이션이 사용자 정의 클레임을 지원하지 않기 때문에 정적 접근 방식을 사용해야 합니다.
접근 방식
- 동적 Identities
- 정적 Identities
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 Identities로 {{internal.azure_identities}}
템플릿 변수를 채웁니다.
다음 명령을 실행하여 teleport-azure
Identity를 Teleport 사용자에게 할당합니다. 앞에서 복사한 Azure Identity의 URI를 --set-azure-identities
의 값으로 붙여넣습니다:
tctl users update teleport-user \--set-azure-identities azure-identity-uri
이 명령은 --set-azure-identities
플래그를 사용하여 사용자에게 Azure Identities를 추가합니다. 쉼표로 구분된 여러 Identity URI에 --set-azure-identities
를 할당할 수 있습니다.
Identity 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 Identity 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 Identities로 {{external.azure_identities}}
템플릿 변수를 채웁니다.
역할을 생성합니다:
tctl create -f azure-cli-access.yaml
특정 Azure Identities에 대한 접근 권한이 있는 역할을 정의합니다. 즉, 이 역할을 가정한 Teleport 사용자는 해당 Identities(그리고 오직 해당 Identities)만 사용하여 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
필드의 Identity URI를 1단계에서 복사한 것과 일치하도록 수정합니다.
이 역할은 사용자가 이전에 정의한 azure-cli
애플리케이션과 같은 모든 Teleport 등록 애플리케이션에 접근할 수 있도록 하며, 사용자는 이전에 생성한 teleport-azure
Identity를 가정할 수 있습니다.
역할을 생성합니다:
tctl create -f azure-cli-access.yaml
사용자가 하나 이상의 Azure Identities에 접근하지 못하도록 하는 Teleport 역할을 정의할 수 있습니다. 이를 위해 role
리소스의 spec.deny
섹션 내에서 azure_identities
필드에 값을 할당합니다.
예를 들어, 이 역할은 모든 Azure Identities에 대한 접근을 거부합니다:
kind: role
version: v5
metadata:
name: "no-azure-identities"
spec:
allow:
app_labels:
"*": "*"
deny:
azure_identities:
- "*"
no-azure-identities
역할은 사용자가 모든 등록된 애플리케이션에 접근할 수 있도록 하지만, deny.azure_identities
필드 내에서 와일드카드 문자(*
)를 사용하여 사용자가 어떤 Azure Identity도 가정하지 못하도록 합니다.
allow.azure_identities
의 값과 달리, deny.azure_identities
의 값에는 특정 Azure Identities의 URI 이외에 와일드카드 표현식을 포함할 수 있습니다.
Teleport Auth 서비스는 사용자의 역할을 평가할 때 deny
규칙이 allow
규칙보다 우선합니다.
azure-cli-access
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
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
인증 커넥터를 엽니다: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
구성 리소스를 가져옵니다: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
구성 리소스를 가져옵니다: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에 인증하고 az
CLI를 통해 해당 API에 명령을 실행할 수 있습니다.
Azure CLI 애플리케이션 목록
이전에 등록한 azure-cli
애플리케이션을 Teleport 사용자가 볼 수 있는지 확인하세요:
tsh apps lsApplication 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-000000000000/resourceGroups/my-resource-group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/teleport-azure
예시 Azure CLI 명령: tsh az vm list
Azure CLI 명령 실행
이 시점에서 tsh
로 접두사를 붙여 Azure Application Service를 사용하여 az
명령을 실행할 수 있습니다. 예를 들어, 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에 대한 인증 토큰을 요청합니다:
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
이전에 생성한 teleport-azure
신원을 사용하여 인증 토큰을 요청하기 때문에, 해당 신원은 리소스 그룹 내의 자원을 조회할 수 있습니다. 따라서 az vm list
명령은 해당 리소스 그룹 내의 VM만 나열합니다.
tsh az
를 통해 az
명령을 실행할 때, tsh
는 로컬 프록시를 백그라운드에서 시작하고 이를 사용하여 명령을 실행합니다.
다음 단계
- Teleport를 사용하여 Azure CLI 접근을 보호하는 방법을 알게 되었으므로, Teleport 사용자가 공격자가 탈취할 수 있는 장기 관리자 역할 없이 Azure 리소스를 일시적으로만 관리할 수 있는지 확인하십시오. Role Access Requests 및 Access Request plugins 에 대한 문서를 참조하십시오.
- Azure managed identities 에 대한 정보와 사용자 할당 관리 ID 관리 방법에 대한 Azure 문서를 참조하십시오.
- 모든
az
CLI 명령의 전체 목록은 Azure documentation 에서 확인하십시오. - 이 가이드 내의 Teleport 역할에서 설명된
internal
및external
특성을 Teleport가 어떻게 채우는지에 대한 전체 세부정보는 Teleport Access Controls Reference 를 참조하십시오.