

• AWS Systems Manager CloudWatch 대시보드는 2026년 4월 30일 이후에는 더 이상 사용할 수 없습니다. 고객은 Amazon CloudWatch 콘솔을 계속 사용하여 현재와 마찬가지로 Amazon CloudWatch 대시보드를 보고, 생성하고, 관리할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 대시보드 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

# Azure 사전 조건
<a name="cloud-connector-prereqs-azure"></a>

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
   ```

1. 

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

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

   ```
   az ad sp create --id {{APPLICATION_ID}}
   ```

1. 

**페더레이션 자격 증명 추가**

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

   ```
   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 페더레이션 역할](cloud-connector-azure-federation-role.md) 참조).

1. 

**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
   ```

1. 

**서비스 보안 주체에 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}}"
   ```

1. 

**AWS Config에 대한 Azure Entra ID 애플리케이션 생성**

   Azure 리소스 상태를 기록할 때 사용할 AWS Config에 대한 별도의 애플리케이션 등록을 생성하세요. 출력의 *애플리케이션(클라이언트) ID*를 기록해 둡니다.

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

   AWS Config 애플리케이션에 대한 서비스 위탁자 생성:

   ```
   az ad sp create --id {{CONFIG_APPLICATION_ID}}
   ```

1. 

**AWS Config에 대한 페더레이션 자격 증명 추가**

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

   ```
   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\"]
       }"
   ```

1. 

**AWS Config 서비스 위탁자에게 Reader 역할 할당**

   테넌트(관리 그룹) 수준에서 AWS Config 서비스 위탁자에게 Azure 기본 제공 Reader 역할을 할당하세요. 이렇게 하면 AWS Config에서 Azure 리소스를 검색할 수 있습니다.

   ```
   az role assignment create \
       --assignee {{CONFIG_SERVICE_PRINCIPAL_ID}} \
       --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" \
       --scope "/providers/Microsoft.Management/managementGroups/{{TENANT_ID}}"
   ```

1. 

**Azure Activity Log 스트리밍용 Event Hub 생성**

   AWS Config는 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 구독으로 바꿉니다.

1. 

**AWS Config 서비스 위탁자에게 Event Hubs Data Receiver 역할 할당**

   AWS Config 서비스 위탁자가 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"
   ```

1. 

**Event Hub로 활동 로그 내보내기 구성**

   AWS Config에서 모니터링할 각 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** - AWS Config Azure AD 앱의 애플리케이션 ID입니다(6단계).
+ **구독 ID**- 관리하려는 Azure 구독입니다.
+ **Event Hub 네임스페이스 호스트 이름** - Event Hub 네임스페이스의 정규화된 호스트 이름입니다(예: `{{EVENT_HUB_NAMESPACE}}.servicebus.windows.net`).