步驟 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。 DeliveryStreamARN 值,因為您將需要在後面的步驟中使用它。此命令的範例輸出:

    { "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 記錄檔將資料放入 Firehose 串流的權限。首先,您需要在〜/TrustPolicyForCW L.json 文件中創建一個信任策略。請使用文字編輯器來建立此政策。如需有關 CloudWatch 日誌端點的詳細資訊,請參閱 Amazon CloudWatch 日誌端點和配額

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

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } }
  3. 使用 aws iam create-role 命令來建立 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": "2021-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } } } }
  4. 建立權限原則,以定義 CloudWatch 記錄檔可對您的帳戶執行哪些動作。首先,使用文本編輯器在文件〜/PermissionsForCW L.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", "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
    3. 這會建立可定義誰擁有對目的地的寫入存取權之政策。此原則必須指定 log: PutSubscriptionFilter 動作才能存取目的地。跨帳戶使用者將使用此PutSubscriptionFilter動作將記錄事件傳送至目的地:

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