步驟 1:建立目的地 - Amazon CloudWatch Logs

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

步驟 1:建立目的地

重要

此程序中的所有步驟必須在日誌資料收件人帳戶中完成。

在此範例中,日誌資料收件人帳戶的帳戶 AWS ID 為 999999999999,而日誌資料寄件者 AWS 帳戶 ID 為 111111111111。

此範例使用名為 的 Kinesis Data Streams 串流 RecipientStream,以及可讓 CloudWatch Logs 將資料寫入其中的角色來建立目的地。

建立目的地時, CloudWatch Logs 會代表收件人帳戶傳送測試訊息至目的地。當訂閱篩選條件稍後處於作用中狀態時, CloudWatch Logs 會代表來源帳戶傳送日誌事件至目的地。

若要建立目的地
  1. 在收件人帳戶中,在 Kinesis Data Streams 中建立目的地串流。在命令提示字元中輸入:

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. 等到 串流變成作用中。您可以使用 aws kinesis describe-stream 命令來檢查 StreamDescription.StreamStatus 屬性。此外,記下 StreamDescription.StreamARN 值,因為您稍後會將其傳遞給 CloudWatch Logs:

    aws kinesis describe-stream --stream-name "RecipientStream" { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RecipientStream", "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "34028236692093846346337460743176EXAMPLE", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE" } } ] } }

    這可能需要花費幾分鐘,讓串流以作用中狀態出現。

  3. 建立授予 CloudWatch Logs 將資料放入串流的許可IAM的角色。首先,您需要在檔案 ~/TrustPolicyForCWL.json 中建立信任政策。使用文字編輯器建立此政策檔案,請勿使用IAM主控台。

    此政策包含 aws:SourceArn 全域條件內容金鑰,可指定 sourceAccountId 以協助預防混淆代理人安全問題。如果您尚未在第一次通話中知道來源帳戶 ID,建議您將目的地放在ARN來源ARN欄位中。在後續呼叫中,您應該將來源設定為ARN從第一次呼叫收集ARN的實際來源。如需詳細資訊,請參閱預防混淆代理人

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Action": "sts:AssumeRole" } }
  4. 使用 aws iam create-role 命令來建立IAM角色,指定信任政策檔案。記下傳回的 Role.Arn 值,因為此值稍後也會傳遞給 CloudWatch Logs:

    aws iam create-role \ --role-name CWLtoKinesisRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Principal": { "Service": "logs.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } }
  5. 建立許可政策,以定義 CloudWatch Logs 可以在您的帳戶上執行的動作。首先,使用文字編輯器在檔案 ~/PermissionsForCWL.json 中建立許可政策:

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] }
  6. 使用 aws iam put-role-policy 命令將許可政策與角色建立關聯:

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. 在串流處於作用中狀態且您已建立IAM角色之後,您可以建立 CloudWatch 日誌目的地。

    1. 此步驟不會將存取政策與您的目的地相關聯,且只是完成目的地建立兩步驟中的第一步。記下DestinationArn在承載中傳回的 :

      aws logs put-destination \ --destination-name "testDestination" \ --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \ --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole" { "DestinationName" : "testDestination", "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole", "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination", "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream" }
    2. 步驟 7a 完成後,即可在日誌資料收件人帳戶中,將存取政策與目的地建立關聯。此政策必須指定日誌:PutSubscriptionFilter動作,並授予寄件者帳戶存取目的地的許可。

      此政策會將許可授予傳送日誌 AWS 的帳戶。您可以在政策中僅指定這一個帳戶,或者如果寄件者帳戶是組織的成員,則政策可以指定組織的組織 ID。如此一來,您可以僅建立一個政策,就能允許一個組織中的多個帳戶將日誌傳送至此目的地帳戶。

      使用文字編輯器建立名為 ~/AccessPolicy.json 的檔案,並隨附下列其中一個政策陳述。

      此第一個範例政策允許組織中具有 ID 為 o-1234567890 的所有帳戶將日誌傳送至收件人帳戶。

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination", "Condition": { "StringEquals" : { "aws:PrincipalOrgID" : ["o-1234567890"] } } } ] }

      此下一個範例只允許日誌資料寄件者帳戶 (111111111111) 將日誌傳送至日誌資料收件人帳戶。

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination" } ] }
    3. 將您在上一步驟建立的政策連接到目的地。

      aws logs put-destination-policy \ --destination-name "testDestination" \ --access-policy file://~/AccessPolicy.json

      此存取政策可讓 ID 為 111111111111 AWS 的帳戶中的使用者使用 ARN arn:aws:logs PutSubscriptionFilter 呼叫目的地:region:999999999999:目的地:testDestination。任何其他使用者 PutSubscriptionFilter 對此目的地的呼叫嘗試都會遭到拒絕。

      若要根據存取政策驗證使用者的權限,請參閱 IAM 使用者指南 中的使用政策驗證器

完成後,如果您使用 AWS Organizations 取得跨帳戶許可,請遵循 中的步驟步驟 2:(僅限使用組織時) 建立IAM角色。如果您要將許可直接授予給其他帳戶,而不是使用 Organizations,則可以略過該步驟並繼續進行 步驟 4:建立訂閱篩選條件