Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何將 CloudWatch Logs 跨帳戶推送到 Amazon Data Firehose?
我想將 Amazon Data Firehose 的 Amazon CloudWatch Logs 串流到不同 AWS 地區的另一個 AWS 帳戶。
解決方法
若要將 CloudWatch Logs 傳送到不同區域的 Firehose 串流,該區域必須支援 Firehose。
在解決方法的命令中,將下列值取代為您的值:
- 以您目的地帳戶的 ID 取代 111111111111
- 以 Firehose 區域取代 us-east-1
- 以您的 Amazon Simple Storage Service (Amazon S3) 區域取代 us-west-2
- 以您目的地帳戶 ID 的區域取代 us-east-2
- 以您來源帳戶的 ID 取代 222222222222
- 以您 CloudWatch Log 群組的區域取代 us-east2
- 以您 Amazon Virtual Private Cloud (Amazon VPC) 流量日誌的區域取代 us-east-2
- 以資源的 ARN 取代 -arn
注意: 如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,則請參閱對 AWS CLI 進行錯誤疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
設定目的地帳戶
請完成下列步驟:
-
建立 Amazon S3 儲存貯體:
aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2
注意: 請記下輸出中儲存貯體的 ARN,以便後續步驟中使用。
-
建立擁有所需 Firehose 權限的信任政策,以將資料推送到 Amazon S3:
{ "Statement": { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "111111111111" } } } }
-
若要建立 IAM 角色並指定信任政策,請執行 create-role 命令:
aws iam create-role \ --role-name FirehosetoS3Role \ --assume-role-policy-document file://~/TrustPolicyForFirehose.json
注意: 請記下輸出中角色的 ARN,以便後續步驟中使用。
-
若要定義 Firehose 可在目的地帳戶中執行的動作,請使用 JSON 編輯器來建立權限政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } ] }
-
執行 put-role-policy 命令,將權限政策與 IAM 角色關聯:
aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
-
為 Firehose 建立目的地交付串流:
aws firehose create-delivery-stream --delivery-stream-name my-delivery-stream --s3-destination-configuration RoleARN='arn:aws:iam::111111111111:role/FirehosetoS3Role',BucketARN='arn:aws:s3:::my-bucket' --region us-east-1
注意: 以您的角色和儲存貯體 ARN 取代 RoleARN 和 BucketARN。
當您將 S3 物件交付到 Firehose,自訂前綴即會用於 timestamp 命名空間運算式。您可以在時間格式的開頭指定額外的前綴 (YYY/mm/dd/HH/)。如果前綴結尾是正斜線 (/),即會在 S3 儲存貯體中顯示為資料夾。 -
若要檢查 DeliveryStreamDescription.DeliveryStreamStatus 屬性,請執行 describe-delivery-stream 命令:
aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1
若要確認串流作用中,請檢查命令輸出:
{ "DeliveryStreamDescription": { "DeliveryStreamType": "DirectPut", "HasMoreDestinations": false, "DeliveryStreamEncryptionConfiguration": { "Status": "DISABLED" }, "VersionId": "1", "CreateTimestamp": 1604484348.804, "DeliveryStreamARN": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamName": "my-delivery-stream", "Destinations": [ { "DestinationId": "destinationId-000000000001", "ExtendedS3DestinationDescription": { "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test", "BufferingHints": { "IntervalInSeconds": 300, "SizeInMBs": 5 }, "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CompressionFormat": "UNCOMPRESSED", "S3BackupMode": "Disabled", "CloudWatchLoggingOptions": { "Enabled": false }, "BucketARN": "arn:aws:s3:::my-bucket" }, "S3DestinationDescription": { "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test", "BufferingHints": { "IntervalInSeconds": 300, "SizeInMBs": 5 }, "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CompressionFormat": "UNCOMPRESSED", "CloudWatchLoggingOptions": { "Enabled": false }, "BucketARN": "arn:aws:s3:::my-bucket" } } ] } }
注意: 請記下串流的 ARN,以在後續步驟中使用。
-
建立額外的信任政策,以授予 CloudWatch Logs 將資料放入 Firehose 串流的權限。新增推送日誌的地區:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.us-east-2.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-2:sourceAccountId:*", "arn:aws:logs:us-east-2:recipientAccountId:*" ] } } } }
-
若要建立一個額外的 IAM 角色以將資料放入 Firehose 串流中,並指定信任政策檔案,請執行 create-role 命令:
aws iam create-role \ --role-name CWLtoKinesisFirehoseRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json
注意: 請記下角色的 ARN,以在後續步驟中使用。
-
建立權限政策,以定義 CloudWatch Logs 可以在目的地帳戶中執行的動作。包括串流的 ARN 和角色的 ARN:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "firehose:ListDeliveryStreams", "Resource": "*" }, { "Effect": "Allow", "Action": [ "firehose:DescribeDeliveryStream", "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream" } ] }
- 執行 put-role-policy 命令將權限政策與角色建立關聯:
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
- 若要在目的地帳戶中建立用於傳送日誌的來源帳戶目的地,請執行 put-destination 命令:
aws logs put-destination --destination-name "myDestination" --target-arn "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream" --role-arn "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole" --region us-east-2
注意: 您可以在任何支援 Firehose 的地區中,建立交付串流的目的地。您建立目的地的地區必須與日誌來源地區相同。 為 CloudWatch 目的地建立存取政策:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "222222222222" }, "Action": "logs:PutSubscriptionFilter", "Resource": "arn:aws:logs:us-east-2:111111111111:destination:myDestination" } ] }
- 將存取政策與 CloudWatch 目的地建立關聯:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
- 若要驗證目的地,請執行 describe-destinations 命令:
aws logs describe-destinations --region us-east-2
設定來源帳戶
注意: 若要設定來源帳戶,您必須是該帳戶的 IAM 管理員使用者或根使用者。
請完成下列步驟:
-
建立信任政策,以授予 Amazon VPC 流程日誌傳送資料至 CloudWatch Log 群組的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "vpc-flow-logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
執行 create-role 命令並指定信任政策:
aws iam create-role \ --role-name PublishFlowLogs \ --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json
注意: 請記下輸出中角色的 ARN,以便後續步驟中使用。
-
若要定義 VPC 流程日誌可以在來源帳戶中執行的動作,請建立權限政策:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": "*" } ] }
-
若要將權限政策與 IAM 角色建立關聯,請執行 put-role-policy 命令:
aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
-
若要設定流程日誌的目的地,請執行 create-log-group 命令以建立 CloudWatch Log 群組:
aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
-
若要開啟 VPC 流程日誌,請執行 create-flow-logs 命令:
aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-12345678 --traffic-type ALL --log-group-name vpc-flow-logs --deliver-logs-permission-arn arn:aws:iam::222222222222:role/PublishFlowLogs --region us-east-2
-
若要在目的地帳戶中將 CloudWatch Log 群組訂閱到 Firehose,請執行 put-subscription-filter 命令:
aws logs put-subscription-filter --log-group-name "vpc-flow-logs" --filter-name "AllTraffic" --filter-pattern "" --destination-arn "arn:aws:logs:us-east-2:111111111111:destination:myDestination" --region us-east-2
若要確認已發佈日誌,請檢查 S3 儲存貯體中的新日誌。
相關資訊

相關內容
- 已提問 8 個月前lg...
- 已提問 2 年前lg...
- 已提問 1 年前lg...
- 已提問 5 個月前lg...