View a markdown version of this page

Azure 사전 조건 - AWS Systems Manager

Azure 사전 조건

Azure 환경에서 다음 단계를 완료합니다. AWS 사전 조건에서 다음 값이 필요합니다.

  • 발급자 URL - 이전 섹션의 AWS OIDC 발급자 URL입니다.

  • 주체 - Systems Manager Azure 페더레이션 역할의 ARN입니다. 예: arn:aws:iam::ACCOUNT_ID:role/service-role/SSM-AzureRole-connector-name-id8

페더레이션의 Azure 측을 설정하려면
  1. Azure Entra ID 애플리케이션 생성

    Microsoft Entra ID(이전 Azure Active Directory)에서 애플리케이션 등록을 생성합니다. 출력의 애플리케이션(클라이언트) ID를 기록해 둡니다.

    az ad app create --display-name "AWSSSMAzureIntegration" --query appId
  2. 애플리케이션에 대한 서비스 보안 주체 생성

    애플리케이션과 연결된 서비스 보안 주체를 생성합니다. 출력의 서비스 보안 주체 ID를 기록해 둡니다.

    az ad sp create --id APPLICATION_ID
  3. 페더레이션 자격 증명 추가

    AWS OIDC 발급자를 신뢰하는 페더레이션 자격 증명을 애플리케이션에 추가합니다. 이렇게 하면 Azure가 Systems Manager Azure 페더레이션 역할을 대신하여 AWS에서 발급한 토큰을 수락할 수 있습니다(Azure 페더레이션 역할 참조).

    az ad app federated-credential create \ --id APPLICATION_ID \ --parameters "{ \"name\": \"aws-ssm-federation\", \"issuer\": \"AWS_OIDC_ISSUER_URL\", \"subject\": \"arn:aws:iam::ACCOUNT_ID:role/service-role/SSM-AzureRole-CONNECTOR_NAME-ID8\", \"audiences\": [\"api://AzureADTokenExchange\"] }"

    다음과 같이 바꿉니다.

    • APPLICATION_ID - 1단계에서 확인한 애플리케이션(클라이언트) ID입니다.

    • AWS_OIDC_ISSUER_URL - AWS OIDC 발급자 URL입니다(예: https://a1667813-695b-5415-b0f7-d473d62bb123.tokens.sts.global.api.aws).

    • ACCOUNT_ID - 사용자의 AWS 계정 ID입니다.

    • CONNECTOR_NAME - Cloud Connector의 정리된 표시 이름입니다.

    • ID8 - Azure 페더레이션 역할에 할당된 UUID의 처음 8자입니다. Cloud Connector를 AWS Management Console에서 생성한 후 역할 이름에서 이 값을 확인하거나, 역할을 수동으로 생성할 때 직접 지정할 수 있습니다(Azure 페더레이션 역할 참조).

  4. VM Run Command 사용자 지정 역할 생성

    Systems Manager가 Azure VM에서 명령을 실행하는 데 필요한 최소 권한을 부여하는 사용자 지정 역할을 생성합니다. SUBSCRIPTION_ID를 관리할 Azure 구독 ID로 바꿉니다.

    az role definition create --role-definition '{ "Name": "AWSSSMVMExtensionRole-SUBSCRIPTION_ID", "Description": "Allows AWS Systems Manager to run commands on Azure VMs", "Actions": [ "Microsoft.Compute/virtualMachines/read", "Microsoft.Compute/virtualMachines/runCommand/action", "Microsoft.Compute/virtualMachines/runCommands/*" ], "AssignableScopes": [ "/subscriptions/SUBSCRIPTION_ID" ] }'

    테넌트 수준 범위(테넌트의 모든 구독)의 경우 대신 관리 그룹 범위를 사용합니다.

    az role definition create --role-definition '{ "Name": "AWSSSMVMExtensionRole-TENANT_ID", "Description": "Allows AWS Systems Manager to run commands on Azure VMs", "Actions": [ "Microsoft.Compute/virtualMachines/read", "Microsoft.Compute/virtualMachines/runCommand/action", "Microsoft.Compute/virtualMachines/runCommands/*" ], "AssignableScopes": [ "/providers/Microsoft.Management/managementGroups/TENANT_ID" ] }'

    역할이 생성되었는지 확인하려면:

    az role definition list --name "AWSSSMVMExtensionRole-SUBSCRIPTION_ID" --output table
  5. 서비스 보안 주체에 VM Run Command 역할 할당

    2단계에서 생성한 서비스 보안 주체에 사용자 지정 역할을 할당합니다. 범위에 따라 Systems Manager에서 관리할 수 있는 Azure 리소스가 결정됩니다.

    구독 수준 범위의 경우(각 구독에 대해 반복):

    az role assignment create \ --assignee SERVICE_PRINCIPAL_ID \ --role "AWSSSMVMExtensionRole-SUBSCRIPTION_ID" \ --scope "/subscriptions/SUBSCRIPTION_ID"

    관리 그룹 수준 범위의 경우:

    az role assignment create \ --assignee SERVICE_PRINCIPAL_ID \ --role "AWSSSMVMExtensionRole-TENANT_ID" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID"
  6. Azure Entra ID 애플리케이션 생성

    Azure 리소스 상태를 기록할 때 사용할 별도의 애플리케이션 등록을 생성합니다. 출력의 애플리케이션(클라이언트) ID를 기록해 둡니다.

    az ad app create \ --display-name "AWSConfigAzureIntegration-ACCOUNT_ID-TENANT_ID_PREFIX" \ --query appId

    애플리케이션에 대한 서비스 보안 주체 생성:

    az ad sp create --id CONFIG_APPLICATION_ID
  7. 다음에 대한 페더레이션 자격 증명 추가

    애플리케이션에 페더레이션 자격 증명을 추가합니다. 주체는 서비스 연결 역할 ARN입니다. 이 ARN은 이후 단계에서 Config Connector를 생성할 때 자동으로 생성됩니다.

    az ad app federated-credential create \ --id CONFIG_APPLICATION_ID \ --parameters "{ \"name\": \"aws-config-federation\", \"issuer\": \"AWS_OIDC_ISSUER_URL\", \"subject\": \"arn:aws:iam::ACCOUNT_ID:role/aws-service-role/thirdparty.config.amazonaws.com/AWSServiceRoleForConfigThirdParty\", \"audiences\": [\"api://AzureADTokenExchange\"] }"
  8. 서비스 보안 주체에 Reader 역할 할당

    테넌트(관리 그룹) 수준에서 서비스 보안 주체에 Azure 기본 제공 Reader 역할을 할당합니다. 이렇게 하면 Azure 리소스를 검색할 수 있습니다.

    az role assignment create \ --assignee CONFIG_SERVICE_PRINCIPAL_ID \ --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID"
  9. Azure Activity Log 스트리밍용 Event Hub 생성

    Azure Event Hub를 사용하여 리소스 변경을 나타내는 활동 로그 이벤트를 수신합니다. Azure 구독 중 하나에 Event Hub 네임스페이스, 허브 및 소비자 그룹을 생성합니다.

    # Create a resource group for the Event Hub az group create \ --subscription "HOSTING_SUBSCRIPTION_ID" \ --name "AWSConfigAzureResources" \ --location eastus # Create an Event Hub namespace with a discovery tag az eventhubs namespace create \ --subscription "HOSTING_SUBSCRIPTION_ID" \ --resource-group "AWSConfigAzureResources" \ --name "EVENT_HUB_NAMESPACE" \ --location eastus \ --sku Standard \ --tags "AWSConfig-ACCOUNT_ID-AWS_REGION=activitylog" # Create the Event Hub az eventhubs eventhub create \ --subscription "HOSTING_SUBSCRIPTION_ID" \ --resource-group "AWSConfigAzureResources" \ --namespace-name "EVENT_HUB_NAMESPACE" \ --name "activitylog" \ --partition-count 4 # Create the consumer group for AWS Config az eventhubs eventhub consumer-group create \ --subscription "HOSTING_SUBSCRIPTION_ID" \ --resource-group "AWSConfigAzureResources" \ --namespace-name "EVENT_HUB_NAMESPACE" \ --eventhub-name "activitylog" \ --name "AWSConfig"

    EVENT_HUB_NAMESPACE를 전역적으로 고유한 이름(예: awsconfig-ACCOUNT_ID-REGION)으로 바꾸고 HOSTING_SUBSCRIPTION_ID를 Event Hub 리소스를 호스팅할 Azure 구독으로 바꿉니다.

  10. 서비스 보안 주체에 Event Hubs Data Receiver 역할 할당

    서비스 보안 주체가 Event Hub에서 데이터를 읽을 수 있도록 허용합니다.

    EVENT_HUB_ID=$(az eventhubs eventhub show \ --subscription "HOSTING_SUBSCRIPTION_ID" \ --resource-group "AWSConfigAzureResources" \ --namespace-name "EVENT_HUB_NAMESPACE" \ --name "activitylog" \ --query id \ -o tsv) az role assignment create \ --assignee CONFIG_SERVICE_PRINCIPAL_ID \ --role "a638d3c7-ab3a-418d-83e6-5f17a39d4fde" \ --scope "$EVENT_HUB_ID"
  11. Event Hub로 활동 로그 내보내기 구성

    모니터링할 각 Azure 구독에 대해 활동 로그 이벤트를 Event Hub로 내보내는 진단 설정을 생성합니다.

    az provider register \ --namespace Microsoft.Insights \ --subscription "SUBSCRIPTION_ID" az rest --method PUT \ --url "https://management.azure.com/subscriptions/SUBSCRIPTION_ID/providers/Microsoft.Insights/diagnosticSettings/EVENT_HUB_NAMESPACE?api-version=2021-05-01-preview" \ --body "{ \"properties\": { \"eventHubAuthorizationRuleId\": \"/subscriptions/HOSTING_SUBSCRIPTION_ID/resourceGroups/AWSConfigAzureResources/providers/Microsoft.EventHub/namespaces/EVENT_HUB_NAMESPACE/authorizationRules/RootManageSharedAccessKey\", \"eventHubName\": \"activitylog\", \"logs\": [{\"category\": \"Administrative\", \"enabled\": true}] } }"

    모니터링할 각 구독에 대해 이 단계를 반복합니다.

Azure 설정을 완료한 후 다음 값을 기록해 둡니다. Cloud Connector를 생성할 때 이 값들이 필요합니다.

  • 테넌트 ID - Azure AD 디렉터리(테넌트) ID입니다.

  • SSM 애플리케이션(클라이언트) ID - Systems Manager Azure AD 앱의 애플리케이션 ID입니다(1단계).

  • Config 애플리케이션(클라이언트) ID - Azure AD 앱의 애플리케이션 ID입니다(6단계).

  • 구독 ID- 관리하려는 Azure 구독입니다.

  • Event Hub 네임스페이스 호스트 이름 - Event Hub 네임스페이스의 정규화된 호스트 이름입니다(예: EVENT_HUB_NAMESPACE.servicebus.windows.net).