步驟 2:建立目的地 - Amazon CloudWatch 日誌

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

步驟 2:建立目的地

重要

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

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

若要建立目的地
  1. 等到您在其中建立的 Firehose 串流步驟 1:建立 Firehose 傳送串流變為作用中。您可以使用下面的命令來檢查 StreamDescription. StreamStatus財產。

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"

    此外,請注意的DeliveryStreamDescription。 DeliveryStreamARNvalue,因為您將需要在稍後的步驟中使用它。此命令的範例輸出:

    { "DeliveryStreamDescription": { "DeliveryStreamName": "my-delivery-stream", "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamEncryptionConfiguration": { "Status": "DISABLED" }, "DeliveryStreamType": "DirectPut", "VersionId": "1", "CreateTimestamp": "2021-02-01T23:59:15.567000-08:00", "Destinations": [ { "DestinationId": "destinationId-000000000001", "S3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::firehose-test-bucket1", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false } }, "ExtendedS3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::firehose-test-bucket1", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false }, "S3BackupMode": "Disabled" } } ], "HasMoreDestinations": false } }

    可能需要花費幾分鐘,交付串流才會變成作用中狀態。

  2. 當交付串流處於作用中狀態時,請建立IAM角色,以 CloudWatch 授與 Log 將資料放入 Firehose 串流的權限。首先,您需要在 ~/ TrustPolicyFor CWL .json 文件中創建一個信任策略。請使用文字編輯器來建立此政策。如需有關 CloudWatch 日誌端點的詳細資訊,請參閱 Amazon CloudWatch 日誌端點和配額

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

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } }
  3. 使用 aws iam 創建角色命令來創建角色,並指定您剛剛創建的信任策略文件。IAM

    aws iam create-role \ --role-name CWLtoKinesisFirehoseRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json

    下列為範例輸出。請留意傳回的 Role.Arn 值,因為後續步驟中需要用到。

    { "Role": { "Path": "/", "RoleName": "CWLtoKinesisFirehoseRole", "RoleId": "AROAR3BXASEKYJYWF243H", "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "CreateDate": "2023-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } } } }
  4. 建立權限原則,以定義 CloudWatch 記錄檔可對您的帳戶執行哪些動作。首先,使用文本編輯器在 ~/ PermissionsForCWL. json 文件中創建權限策略:

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
  5. 輸入以下命令,將許可政策與角色建立關聯:

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  6. Firehose 傳遞串流處於使用中狀態且您已建立IAM角色之後,您可以建立 CloudWatch 記錄目的地。

    1. 此步驟不會將存取政策與您的目的地建立關聯,且為完成建立目的地之兩個步驟的僅第一個步驟。記下承載中傳回ARN的新目的地,因為您會在稍後的步驟destination.arn中使用此目的地。

      aws logs put-destination \ --destination-name "testFirehoseDestination" \ --target-arn "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream" \ --role-arn "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole" { "destination": { "destinationName": "testFirehoseDestination", "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "roleArn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "arn": "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"} }
    2. 上一個步驟完成後,請在日誌資料收件人帳戶中 (222222222222),將存取政策與目的地建立關聯。此政策可讓日誌資料寄件者帳戶 (111111111111) 只能在日誌資料收件人帳戶 (222222222222) 中存取目的地。您可以使用文字編輯器將此原則放入~/AccessPolicy.json檔案中:

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
    3. 這會建立可定義誰擁有對目的地的寫入存取權之政策。此原則必須指定logs:PutSubscriptionFilterlogs:PutAccountPolicy動作才能存取目的地。跨帳戶使用者將使用PutSubscriptionFilterPutAccountPolicy動作將記錄事件傳送至目的地。

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