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 就可以接受 AWS 代表 Systems Manager Azure 联合身份验证角色发布的令牌(参见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:云连接器经清理后的显示名称。 -
ID8:分配给 Azure 联合身份验证角色的 UUID 的前八个字符。在AWS 管理控制台中创建云连接器之后,可以在角色名称中找到此信息,也可以在手动创建角色时进行指定(参阅Azure 联合身份验证角色)。
-
-
创建虚拟机 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 -
将虚拟机 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(在后续步骤中创建 Config 连接器时自动创建)。
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\"] }" -
为服务主体分配读者角色
将 Azure 内置读者角色分配给租户(管理组)级的服务主体。这样就可以发现 Azure 资源。
az role assignment create \ --assigneeCONFIG_SERVICE_PRINCIPAL_ID\ --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID" -
为 Azure 活动日志流式传输创建事件中心
使用 Azure Event Hub 接收指示资源变化的活动日志事件。在其中一个 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-REGIONHOSTING_SUBSCRIPTION_ID替换为将托管事件中心资源的 Azure 订阅。 -
将事件中心数据接收器角色分配给服务主体
允许服务主体从事件中心读取:
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" -
配置活动日志导出至事件中心
对于每个要监控的 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:Azure AD 应用程序的应用程序 ID(步骤 6)。
-
订阅 ID:要管理的 Azure 订阅。
-
事件中心命名空间主机名:事件中心命名空间的完全限定主机名(例如
)。EVENT_HUB_NAMESPACE.servicebus.windows.net