

• Amazon Systems Manager CloudWatch 控制面板在 2026 年 4 月 30 日之后将不再可用。客户可以像现在一样继续使用 Amazon CloudWatch 控制台来查看、创建和管理其 Amazon CloudWatch 控制面板。有关更多信息，请参阅 [Amazon CloudWatch 控制面板文档](https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

# Azure 先决条件
<a name="cloud-connector-prereqs-azure"></a>

在 Azure 环境中完成以下步骤。您需要从 Amazon 先决条件中获取以下值：
+ **发布者 URL**：上一节中所述的 Amazon 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. 

**添加联合身份验证凭证**

   向信任 Amazon OIDC 发布者的应用程序添加联合身份验证凭证。这样 Azure 就可以接受 Amazon 代表 Systems Manager Azure 联合身份验证角色发布的令牌（参见[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}}：Amazon OIDC 发布者 URL（例如 `https://a1667813-695b-5415-b0f7-d473d62bb123.tokens.sts.global.api.aws`）。
   + {{ACCOUNT\_ID}}：您的 Amazon Web Services 账户 ID。
   + {{CONNECTOR\_NAME}}：云连接器经清理后的显示名称。
   + {{ID8}}：分配给 Azure 联合身份验证角色的 UUID 的前八个字符。在Amazon Web Services 管理控制台中创建云连接器之后，可以在角色名称中找到此信息，也可以在手动创建角色时进行指定（参阅[Azure 联合身份验证角色](cloud-connector-azure-federation-role.md)）。

1. 

**创建虚拟机 Run Command 自定义角色**

   创建自定义角色，授予 Systems Manager 在 Azure 虚拟机上运行命令所需的最低权限。将 {{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. 

**将虚拟机 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. 

**创建适用于 Amazon Config 的 Azure Entra ID 应用程序**

   创建适用于 Amazon Config 的单独应用程序注册，以便在记录 Azure 资源状态时使用。记下输出中的*应用程序（客户端）ID*。

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

   为 Amazon Config 应用程序创建服务主体：

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

1. 

**为 Amazon Config 添加联合身份验证凭证**

   为 Amazon Config 应用程序添加联合身份验证凭证。使用者为 Amazon Config 服务相关角色 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. 

**为 Amazon Config 服务主体分配读者角色**

   在租户（管理组）级别将 Azure 内置读者角色分配给 Amazon Config 服务主体。这样可让 Amazon 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 活动日志流式传输创建事件中心**

   Amazon Config 使用 Azure 事件中心接收指示资源更改的活动日志事件。在其中一个 Azure 订阅中，创建事件中心命名空间、中心和使用者组。

   ```
   # 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}} 替换为将托管事件中心资源的 Azure 订阅。

1. 

**将事件中心数据接收器角色分配给 Amazon Config 服务主体**

   允许 Amazon Config 服务主体从事件中心读取：

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

**配置活动日志导出至事件中心**

   为需要 Amazon Config 监控的每个 Azure 订阅创建一个诊断设置，以将活动日志事件导出至事件中心：

   ```
   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 设置后，请记下以下值。创建云连接器时将需要这些值：
+ **租户 ID**：您的 Azure AD 目录（租户）ID。
+ **SSM 应用程序（客户端）ID**：Systems Manager Azure AD 应用程序的应用程序 ID（步骤 1）。
+ **Config 应用程序（客户端）ID**：Amazon Config Azure AD 应用程序的应用程序 ID（第 6 步）。
+ **订阅 ID**：要管理的 Azure 订阅。
+ **事件中心命名空间主机名**：事件中心命名空间的完全限定主机名（例如 `{{EVENT_HUB_NAMESPACE}}.servicebus.windows.net`）。