本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
步驟 1:建立目的地
重要
此程序中的所有步驟必須在日誌資料收件人帳戶中完成。
在此範例中,日誌資料收件人帳戶的帳戶 AWS ID 為 999999999999,而日誌資料寄件者 AWS 帳戶 ID 為 111111111111。
此範例使用名為 的 Kinesis Data Streams 串流 RecipientStream,以及可讓 CloudWatch Logs 將資料寫入其中的角色來建立目的地。
建立目的地時, CloudWatch Logs 會代表收件人帳戶傳送測試訊息至目的地。當訂閱篩選條件稍後處於作用中狀態時, CloudWatch Logs 會代表來源帳戶傳送日誌事件至目的地。
若要建立目的地
-
在收件人帳戶中,在 Kinesis Data Streams 中建立目的地串流。在命令提示字元中輸入:
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
-
等到 串流變成作用中。您可以使用 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" } } ] } }
這可能需要花費幾分鐘,讓串流以作用中狀態出現。
-
建立授予 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" } } -
使用 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" } } -
建立許可政策,以定義 CloudWatch Logs 可以在您的帳戶上執行的動作。首先,使用文字編輯器在檔案 ~/PermissionsForCWL.json 中建立許可政策:
{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:999999999999:stream/RecipientStream" } ] } -
使用 aws iam put-role-policy 命令將許可政策與角色建立關聯:
aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
-
在串流處於作用中狀態且您已建立IAM角色之後,您可以建立 CloudWatch 日誌目的地。
-
此步驟不會將存取政策與您的目的地相關聯,且只是完成目的地建立兩步驟中的第一步。記下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" }
-
步驟 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" } ] } -
將您在上一步驟建立的政策連接到目的地。
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:建立訂閱篩選條件。