步驟 1:更新訂閱篩選條件 - Amazon CloudWatch Logs

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 1:更新訂閱篩選條件

注意

只有跨帳戶訂閱由 從 AWS 服務啟用記錄 所列服務建立的日誌才需要此步驟。如果您不使用這些日誌群組之一建立的日誌,則可以跳至 步驟 2:更新現有的目的地存取政策

在某些情況下,您必須更新所有傳送日誌至目的地帳戶的寄件者帳戶中的訂閱篩選條件。此更新會新增 IAM 角色,CloudWatch 可以代入該角色並驗證寄件者帳戶是否具有將日誌傳送至收件人帳戶的許可。

針對您想要更新的每個寄件者帳戶,按照本節中的步驟進行,以將組織 ID 用於跨帳戶訂閱許可。

在本節的範例中,111111111111222222222222 兩個帳戶已經建立訂閱篩選條件,以將日誌傳送至帳戶 999999999999。現有的訂閱篩選條件值如下:

## Existing Subscription Filter parameter values { "DestinationArn": "arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "{$.userIdentity.type = Root}", "Distribution": "Random" }

如果需要尋找目前的訂閱篩選條件參數值,請輸入下列命令。

aws logs describe-account-policies \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-name "CrossAccountStreamsExamplePolicy"
更新訂閱篩選條件以開始將組織 ID 用於跨帳戶日誌許可
  1. 在檔案 ~/TrustPolicyForCWL.json 中建立下列信任政策。使用文字編輯器來建立此政策檔案,請勿使用 IAM 主控台。

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  2. 建立使用此政策的 IAM 角色。記下命令傳回的 Arn 值的 Arn 值,之後在此程序中會用到。在此範例中,我們使用 CWLtoSubscriptionFilterRole 作為要建立的角色的名稱。

    aws iam create-role \ --role-name CWLtoSubscriptionFilterRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json
  3. 建立許可政策以定義 CloudWatch Logs 可在您的帳戶上執行的動作。

    1. 首先,使用文字編輯器在名為 /PermissionsForCWLSubscriptionFilter.json 的檔案中建立下列許可政策。

      { "Statement": [ { "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:region:111111111111:log-group:LogGroupOnWhichSubscriptionFilterIsCreated:*" } ] }
    2. 輸入下列命令,將您剛建立的許可政策與您在步驟 2 中建立的角色相關聯。

      aws iam put-role-policy --role-name CWLtoSubscriptionFilterRole --policy-name Permissions-Policy-For-CWL-Subscription-filter --policy-document file://~/PermissionsForCWLSubscriptionFilter.json
  4. 輸入下列命令來更新訂閱篩選條件政策。

    aws logs put-account-policy \ --policy-name "CrossAccountStreamsExamplePolicy" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"DestinationArn":"arn:aws:logs:region:999999999999:destination:testDestination", "FilterPattern": "{$.userIdentity.type = Root}", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL"