Infograb logo
Azure 관리 ID를 통한 서비스 결합

이 가이드는 Azure 결합 방법을 사용하여 Teleport 인스턴스를 구성하여 Azure 가상 머신에서 실행 중일 때 비밀을 공유하지 않고 Teleport 클러스터에 결합하는 방법을 설명합니다.

Azure 결합 방법은 Teleport 12.1+에서 사용할 수 있습니다. Azure 가상 머신에서 실행 중인 모든 Teleport 프로세스에서 사용할 수 있습니다. 레이어 7 로드 밸런서나 리버스 프록시에 뒤에 있는 Proxy Service와 클러스터에 결합하는 기능은 Teleport 13.0+에서 사용할 수 있습니다.

Teleport 프로세스를 클러스터에 결합하는 다른 방법에 대해서는 클러스터에 Teleport 서비스 결합하기를 참조하세요.

전제 조건

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

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

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

  • Teleport 바이너리가 설치된 리눅스에서 실행되는 Azure 가상 머신. 가상 머신에는 가상 머신 정보를 읽을 수 있는 권한을 가진 관리 ID가 할당되어 있어야 합니다.
  • 당신의 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. 관리 ID 설정

Azure 방법을 사용하여 Teleport 클러스터에 결합하는 Teleport 프로세스를 호스팅하는 각 가상 머신에는 관리 ID가 할당되어 있어야 합니다. 이 ID는 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을 클릭하세요.

Roleteleport-read-vm, Scope가 선택한 리소스 그룹과 일치하며, Members 필드에 이전에 생성한 teleport-azure 관리 ID가 포함되어 있는지 확인하세요.

다시 Review + assign을 클릭하세요.

Azure VM에 ID 연결하기

Azure Portal의 가상 머신 뷰에서 Teleport Application Service를 호스팅하는 VM의 이름을 클릭하세요.

오른쪽 패널에서 Identity 탭을 클릭한 후, Identity 보기에서 User assigned 탭을 클릭하세요. +Add를 클릭한 후 teleport-azure ID를 선택하세요. Add를 클릭하세요.

Azure VM 페이지의 Identity 탭으로 돌아가세요. User assigned 하위 탭에 새로운 ID가 나열된 것을 확인해야 합니다:

중요

인증의 일부로, Teleport는 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가 설치되어 있어야 실행 가능하며, 이를 via 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 Service에 보내 Azure 구독 내에서 실행되고 있음을 증명합니다. VM의 ID는 Azure 결합 토큰에 구성된 허용 규칙과 일치해야 합니다.

다음과 같은 token.yaml을 생성하여 Azure 구독 및 VM의 ID가 일치해야 하는 리소스 그룹을 지정하는 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, Proxy, Kubernetes, Application, Database 또는 Desktop Service에서 실행되는 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가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.

your Teleport instance를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

your Teleport instance를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

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

your Teleport instance의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

당신의 Teleport 프로세스가 클러스터에 연결하고 결합할 수 있는지 확인하세요. 모든 설정이 완료되었습니다!

Teleport 원문 보기