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 -
フェデレーティッド ID 認証情報を追加する
AWS OIDC 発行者を信頼するアプリケーションにフェデレーティッド ID 認証情報を追加します。これにより、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 文字。これは、AWS マネジメントコンソール で Cloud Connector を作成した後、ロール名で確認できます。または、ロールを手動で作成するときに指定します (「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" -
AWS Config 用の Azure Entra ID アプリケーションを作成する
Azure リソースの状態を記録するときに使用するために、AWS Config 用のアプリケーション登録を別途作成します。出力のアプリケーション (クライアント) ID を書き留めます。
az ad app create \ --display-name "AWSConfigAzureIntegration-ACCOUNT_ID-TENANT_ID_PREFIX" \ --query appIdAWS Config アプリケーション用にサービスプリンシパルを作成する:
az ad sp create --idCONFIG_APPLICATION_ID -
AWS Config 用のフェデレーティッド ID 認証情報を追加する
AWS Config アプリケーションにフェデレーティッド ID 認証情報を追加します。サブジェクトは、AWS Config サービスリンクロール 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\"] }" -
リーダーロールを AWS Config サービスプリンシパルに割り当てる
Azure 組み込みリーダーロールをテナント (管理グループ) レベルで AWS Config サービスプリンシパルに割り当てます。これにより AWS Config が Azure リソースを検出できるようになります。
az role assignment create \ --assigneeCONFIG_SERVICE_PRINCIPAL_ID\ --role "acdd72a7-3385-48ef-bd42-f606fba81ae7" \ --scope "/providers/Microsoft.Management/managementGroups/TENANT_ID" -
Azure アクティビティログストリーミング用の 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-REGIONHOSTING_SUBSCRIPTION_IDを Event Hub リソースをホストする Azure サブスクリプションに置き換えます。 -
Event Hub データレシーバーロールを AWS Config サービスプリンシパルに割り当てる
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 \ --assigneeCONFIG_SERVICE_PRINCIPAL_ID\ --role "a638d3c7-ab3a-418d-83e6-5f17a39d4fde" \ --scope "$EVENT_HUB_ID" -
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