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 측을 설정하려면
-
Azure Entra ID 애플리케이션 생성
Microsoft Entra ID(이전 Azure Active Directory)에서 애플리케이션 등록을 생성합니다. 출력의 애플리케이션(클라이언트) ID를 기록해 둡니다.
az ad app create --display-name "AWSSSMAzureIntegration" --query appId -
애플리케이션에 대한 서비스 보안 주체 생성
애플리케이션과 연결된 서비스 보안 주체를 생성합니다. 출력의 서비스 보안 주체 ID를 기록해 둡니다.
az ad sp create --idAPPLICATION_ID -
페더레이션 자격 증명 추가
AWS OIDC 발급자를 신뢰하는 페더레이션 자격 증명을 애플리케이션에 추가합니다. 이렇게 하면 Azure가 Systems Manager Azure 페더레이션 역할을 대신하여 AWS에서 발급한 토큰을 수락할 수 있습니다(Azure 페더레이션 역할 참조).
az ad app federated-credential create \ --idAPPLICATION_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 페더레이션 역할 참조).
-
-
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 -
서비스 보안 주체에 VM Run Command 역할 할당
2단계에서 생성한 서비스 보안 주체에 사용자 지정 역할을 할당합니다. 범위에 따라 Systems Manager에서 관리할 수 있는 Azure 리소스가 결정됩니다.
구독 수준 범위의 경우(각 구독에 대해 반복):
az role assignment create \ --assigneeSERVICE_PRINCIPAL_ID\ --role "AWSSSMVMExtensionRole-SUBSCRIPTION_ID" \ --scope "/subscriptions/SUBSCRIPTION_ID"관리 그룹 수준 범위의 경우:
az role assignment create \ --assigneeSERVICE_PRINCIPAL_ID\ --role "AWSSSMVMExtensionRole-TENANT_ID" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID" -
Azure Entra ID 애플리케이션 생성
Azure 리소스 상태를 기록할 때 사용할 별도의 애플리케이션 등록을 생성합니다. 출력의 애플리케이션(클라이언트) ID를 기록해 둡니다.
az ad app create \ --display-name "AWSConfigAzureIntegration-ACCOUNT_ID-TENANT_ID_PREFIX" \ --query appId애플리케이션에 대한 서비스 보안 주체 생성:
az ad sp create --idCONFIG_APPLICATION_ID -
다음에 대한 페더레이션 자격 증명 추가
애플리케이션에 페더레이션 자격 증명을 추가합니다. 주체는 서비스 연결 역할 ARN입니다. 이 ARN은 이후 단계에서 Config Connector를 생성할 때 자동으로 생성됩니다.
az ad app federated-credential create \ --idCONFIG_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\"] }" -
서비스 보안 주체에 Reader 역할 할당
테넌트(관리 그룹) 수준에서 서비스 보안 주체에 Azure 기본 제공 Reader 역할을 할당합니다. 이렇게 하면 Azure 리소스를 검색할 수 있습니다.
az role assignment create \ --assigneeCONFIG_SERVICE_PRINCIPAL_ID\ --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID" -
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-REGIONHOSTING_SUBSCRIPTION_ID를 Event Hub 리소스를 호스팅할 Azure 구독으로 바꿉니다. -
서비스 보안 주체에 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 \ --assigneeCONFIG_SERVICE_PRINCIPAL_ID\ --role "a638d3c7-ab3a-418d-83e6-5f17a39d4fde" \ --scope "$EVENT_HUB_ID" -
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