인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Azure Managed Identity를 통한 서비스 연결
이 가이드는 Azure 조인 방법을 사용하여 Azure 가상 머신에서 실행 중일 때 비밀을 공유하지 않고 Teleport 인스턴스를 Teleport 클러스터에 조인하는 방법을 설명합니다.
Azure 조인 방법은 Azure 가상 머신에서 실행 중인 모든 Teleport 프로세스에서 사용할 수 있습니다. 레이어 7 로드 밸런서 또는 리버스 프록시 뒤에서 프록시 서비스를 사용하여 클러스터에 조인하는 지원은 Teleport 13.0+ 버전에서 가능합니다.
Teleport 프로세스를 클러스터에 조인하는 다른 방법에 대해서는 클러스터에 Teleport 서비스 조인하기를 참조하세요.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Teleport 이진 파일이 설치된 Linux에서 실행 중인 Azure 가상 머신. 가상 머신은 가상 머신 정보를 읽을 수 있는 권한이 부여된 Managed Identity가 필요합니다.
- 연결이 가능한지 확인하기 위해
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단계. Managed Identity 설정하기
Azure 방법을 사용하여 Teleport 클러스터에 조인하는 Teleport 프로세스를 호스팅하는 모든 가상 머신에는 Managed Identity가 할당되어야 합니다. 이 신원은 Teleport가 가상 머신을 조회할 수 있도록 Microsoft.Compute/virtualMachines/read
권한이 필요합니다. 다른 권한은 필요하지 않습니다.
사용자 정의 역할 만들기
Azure Portal 검색 상자에 Azure 리소스 그룹의 이름을 입력하고 해당 리소스 그룹의 페이지로 이동합니다. 왼쪽 탐색 사이드바에서 Access control (IAM) 탭을 클릭합니다. Access control (IAM) 패널 상단의 버튼 행에서 Add > Add custom role 을 클릭합니다.
Custom role name 필드에 teleport-read-vm
을 입력합니다.
Permissions 탭을 클릭한 다음, Permissions 보기에서 +Add permissions 을 클릭합니다.
검색 상자에 Microsoft.Compute/virtualMachines/read
를 입력합니다.
Microsoft Compute 박스를 클릭한 다음, Read: Get Virtual Machine 을 활성화합니다.
Add 를 클릭합니다.
Review + create 를 클릭한 다음 Create 를 클릭합니다.
Azure 관리 ID 만들기
Azure Portal의 Managed Identities 뷰로 이동합니다.
Create 를 클릭합니다.
Subscription, Resource group, Region에서 VM이 포함된 것을 선택합니다.
Name 필드에 teleport-azure
를 입력합니다.
Review + create 를 클릭한 다음 Create 를 클릭합니다.
생성이 완료되면 Go to resource 를 클릭합니다. 새 ID의 페이지에서 Client ID 값을 복사하여 이 가이드에서 나중에 사용합니다.
teleport-read-vm
역할을 teleport-azure
ID에 할당
Azure Portal 검색 상자에 Azure 리소스 그룹의 이름을 입력하고 해당 리소스 그룹 페이지로 이동합니다. 왼쪽 탐색 사이드바에서 Access control (IAM) 탭을 클릭합니다. Access control (IAM) 패널 상단의 버튼 행에서 Add > Add role assignment 을 클릭합니다.
Add role assignment 화면에서 teleport-read-vm 을 클릭합니다.
화면 하단으로 스크롤하여 Next 를 클릭합니다.
Members 탭에서 Assign access to 필드에서 Managed identity 를 선택합니다. Select members 를 클릭합니다.
오른쪽 사이드바에서 Managed identity 드롭다운 메뉴를 찾아
User-assigned managed identity 를 선택합니다. 이전에 만든 teleport-azure
ID를 선택합니다.
Select 를 클릭한 다음 Review + assign 을 클릭합니다.
Role 이 teleport-read-vm
인지, Scope 가 선택한 리소스 그룹과 일치하는지,
Members 필드에 이전에 만든 teleport-azure
관리 ID가 포함되어 있는지 확인합니다.
다시 Review + assign 을 클릭합니다.
Azure VM에 ID 첨부
가상 머신 보기에서 Teleport 서비스를 호스팅하는 VM의 이름을 클릭합니다.
오른쪽 패널에서 Security/Identity 탭을 클릭한 다음,
Identity 보기에서 User assigned 탭을 클릭합니다. +Add 를 클릭한 다음
teleport-azure
ID를 선택합니다. Add 를 클릭합니다.
Azure VM의 페이지에서 Identity 탭으로 돌아갑니다. 새 ID가 User assigned 하위 탭에 나열되어 있어야 합니다:
중요
인증의 일환으로 Teleport는 해당 ID로 허용된 모든 작업을 수행할 수 있습니다. 이 가이드에서 생성한 ID 외의 관리 ID를 사용하는 경우 권한과 범위를 제한하는 것이 좋습니다.
teleport-create-identity.json
이라는 파일을 만들고 다음 내용을 복사합니다:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "2227781763411200690"
}
},
"parameters": {
"roleName": {
"type": "string",
"defaultValue": "teleport-read-vm",
"metadata": {
"description": "역할 정의의 친숙한 이름"
}
},
"identityName": {
"type": "string",
"defaultValue": "teleport-azure",
"metadata": {
"description": "관리 ID의 이름"
}
}
},
"variables": {
"roleDefName": "[guid(resourceGroup().id, string('Microsoft.Compute/virtualMachines/read'))]"
},
"resources": [
{
"type": "Microsoft.Authorization/roleDefinitions",
"apiVersion": "2022-04-01",
"name": "[variables('roleDefName')]",
"properties": {
"roleName": "[parameters('roleName')]",
"description": "가상 머신에 대한 정보를 읽을 수 있도록 허용하는 역할로, Teleport에 사용됩니다.",
"type": "customRole",
"permissions": [
{
"actions": ["Microsoft.Compute/virtualMachines/read"],
"notActions": []
}
],
"assignableScopes": ["[resourceGroup().id]"]
}
},
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[parameters('identityName')]",
"apiVersion": "2018-11-30",
"location": "[resourceGroup().location]"
}
],
"outputs": {
"principalID": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))).principalId]"
},
"clientID": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', parameters('identityName'))).clientId]"
},
"roleName": {
"type": "string",
"value": "[variables('roleDefName')]"
}
}
}
그런 다음, 사용자 정의 역할과 관리 ID를 만들기 위해 다음 명령어를 실행합니다:
DEPLOY_OUTPUT=$(az deployment group create \--resource-group <your-resource-group> \--template-file teleport-create-identity.json)PRINCIPAL_ID=$(echo $DEPLOY_OUTPUT | jq -r '.properties.outputs.principalID.value')CLIENT_ID=$(echo $DEPLOY_OUTPUT | jq -r '.properties.outputs.principalID.value')ROLE_NAME=$(echo $DEPLOY_OUTPUT | jq -r '.properties.outputs.roleName.value')
이 명령은 jq
가 워크스테이션에 설치되어 있어야 합니다. 설치는 jq
다운로드
페이지를 통해 가능합니다.
다음으로, teleport-assign-identity.json
이라는 다른 파일을 만들고 다음 내용을 복사합니다:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.5.6.12127",
"templateHash": "2227781763411200690"
}
},
"parameters": {
"identityName": {
"type": "string",
"defaultValue": "teleport-azure"
},
"principalId": {
"type": "string"
},
"roleName": {
"type": "string"
},
"vmNames": {
"type": "array"
}
},
"resources": [
{
"type": "Microsoft.Authorization/roleAssignments",
"apiVersion": "2022-04-01",
"name": "[guid(resourceGroup().id)]",
"properties": {
"roleDefinitionId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', parameters('roleName'))]",
"principalId": "[parameters('principalId')]"
}
},
{
"apiVersion": "2018-06-01",
"type": "Microsoft.Compute/virtualMachines",
"name": "[parameters('vmNames')[copyIndex('vmcopy')]]",
"location": "[resourceGroup().location]",
"identity": {
"type": "userAssigned",
"userAssignedIdentities": {
"[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('identityName'))]": {}
}
},
"copy": {
"name": "vmcopy",
"count": "[length(parameters('vmNames'))]"
}
}
]
}
다음 명령을 실행하여 관리 ID에 사용자 정의 역할을 할당하고 ID를 가상 머신에 할당합니다:
az deployment group create \--resource-group <your-resource-group> \--template-file teleport-assign-identity.json \-- parameters principalId="$PRINCIPAL_ID" roleName="$ROLE_NAME" \vmNames='<list-of-vm-names>'
3단계에서 CLIENT_ID
값을 사용합니다.
2/4단계. Azure 조인 토큰 생성하기
Teleport 프로세스는 서명된 증명 데이터 문서와 액세스 토큰을 Teleport Auth 서비스에 전송하여 Azure 구독에서 실행되고 있음을 증명합니다. VM의 신원은 Azure 조인 토큰에 구성된 허용 규칙과 일치해야 합니다.
다음 token.yaml
파일을 생성하여 Azure 구독과 VM의 신원이 일치해야 하는 리소스 그룹을 명시하는 allow
규칙을 지정하십시오.
# token.yaml
kind: token
version: v2
metadata:
# 이 토큰의 이름은 비밀이 아닙니다. 인스턴스는 이 토큰을 사용하기 위해
# 귀하의 Azure 구독에서 실행 중임을 증명해야 합니다.
name: azure-token
spec:
# 요구되는 최소한의 역할만 사용하십시오.
roles: [Node]
join_method: azure
azure:
allow:
# Teleport 프로세스가 조인할 수 있는 Azure 구독을 지정합니다.
- subscription: 11111111-1111-1111-1111-111111111111
# 여러 개의 허용 규칙을 지원합니다.
- subscription: 22222222-2222-2222-2222-222222222222
# resource_groups는 선택 사항이며 Teleport 프로세스의
# 조인하는 리소스 그룹을 제한할 수 있습니다.
- subscription: 33333333-3333-3333-3333-333333333333
resource_groups: ["group1", "group2"]
토큰 이름 azure-token
은 예시일 뿐이며, 3단계에서 join_params.token_name
에 동일한 값을 사용할 수 있는 한 원하는 값으로 지정할 수 있습니다.
다음 명령어를 실행하여 토큰을 생성하십시오:
tctl create -f token.yaml
3/4단계. Teleport 프로세스 구성하기
Azure 조인 방법은 SSH, 프록시, Kubernetes, 애플리케이션, 데이터베이스 또는 데스크탑 서비스가 실행 중인 Teleport 프로세스에 사용할 수 있습니다.
사용자 정의 teleport.yaml
파일로 Teleport 프로세스를 구성하십시오. 2단계에서 생성한 토큰과 일치하는 token_name
을 가진 join_params
섹션과 method: azure
를 사용하십시오. 다음 예시 구성과 같이 설정하십시오:
# /etc/teleport.yaml
version: v3
teleport:
join_params:
token_name: azure-token
method: azure
azure:
# client_id는 1단계에서 생성된 관리 ID의 클라이언트 ID입니다.
client_id: 11111111-1111-1111-1111-111111111111
proxy_server: teleport.example.com:443
ssh_service:
enabled: yes
auth_service:
enabled: no
proxy_service:
enabled: no
4/4단계. Teleport 프로세스 시작하기
Azure VM에서 Teleport를 시작하십시오.
호스트가 부팅될 때 your Teleport instance가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.
your Teleport instance를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
your Teleport instance를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 your Teleport instance의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
Teleport 프로세스가 클러스터에 연결하고 조인할 수 있는지 확인하십시오. 준비가 완료되었습니다!