啟用來自 AWS 服務的記錄 - Amazon CloudWatch Logs

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

啟用來自 AWS 服務的記錄

雖然許多 服務只會將日誌發佈至 CloudWatch Logs,但某些 AWS 服務可以直接將日誌發佈至 Amazon Simple Storage Service 或 Amazon Data Firehose。如果您的日誌主要需求是儲存或處理這些服務之一,您可以輕鬆地讓生產日誌的服務直接傳送至 Amazon S3 或 Firehose,而無需額外設定。

即使日誌直接發佈至 Amazon S3 或 Firehose,仍需支付費用。如需詳細資訊,請參閱位於 Amazon CloudWatch Pricing 的日誌索引標籤上的已結束日誌

某些 AWS 服務會使用通用基礎設施來傳送其日誌。若要啟用從這些服務記錄日誌,您必須以具有特定許可的使用者身分登入。此外,您必須將許可授予 AWS ,才能傳送日誌。

對於需要這些許可的服務,需要兩種許可版本。在資料表中會將需要這些額外許可的服務標註為支援的 [V1 許可]支援的 [V2 許可] 。如需有關這些必要許可的詳細資訊,請參閱資料表後面的章節。

日誌來源 日誌類型 CloudWatch Logs Amazon S3 Firehose

Amazon API Gateway 存取日誌

付費日誌

支援的 [V1 許可]

AWS AppSync logs

自訂日誌

支援

Amazon Aurora MySQL 日誌

自訂日誌

支援

Amazon Bedrock 知識庫記錄

付費日誌 支援的 [V2 許可] 支援的 [V2 許可] 支援的 [V2 許可]

Amazon Chime 媒體品質指標日誌和SIP訊息日誌

付費日誌

支援的 [V1 許可]

CloudFront:存取日誌

付費日誌 支援的 [V1 許可]

AWS CloudHSM 稽核日誌

自訂日誌

支援

CloudWatch 明確評估事件日誌

付費日誌 支援的 [V1 許可] 支援的 [V1 許可]

CloudWatch 網路監視器日誌

付費日誌 支援的 [V1 許可]

CloudTrail 日誌

自訂日誌

支援

AWS CodeBuild logs

自訂日誌

支援

Amazon CodeWhisperer 事件日誌

付費日誌 支援的 [V2 許可] 支援的 [V2 許可] 支援的 [V2 許可]

Amazon Cognito logs

付費日誌 支援的 [V1 許可]

Amazon Connect 日誌

自訂日誌

支援

AWS DataSync logs

自訂日誌

支援

Amazon ElastiCache (RedisOSS) 日誌

付費日誌 支援的 [V1 許可] 支援的 [V1 許可]

AWS Elastic Beanstalk logs

自訂日誌

支援

Amazon Elastic Container Service 日誌

自訂日誌

支援

Amazon Elastic Kubernetes Service 控制平面日誌

付費日誌

支援

AWS Elemental MediaTailor 日誌

付費日誌

支援

Amazon EventBridge 管道記錄

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS Fargate logs

自訂日誌

支援

AWS Fault Injection Service 實驗日誌

付費日誌 支援的 [V1 許可]

Amazon FinSpace

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS Global Accelerator 流程日誌

付費日誌 支援的 [V1 許可]

AWS Glue 任務日誌

自訂日誌

支援

IAM Identity Center 錯誤日誌

付費日誌 支援的 [V2 許可] 支援的 [V2 許可] 支援的 [V2 許可]

Amazon Interactive Video Service 聊天日誌

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS IoT logs

自訂日誌

支援

AWS IoT FleetWise logs

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS Lambda logs

自訂日誌

支援

Amazon Macie 日誌

自訂日誌

支援

AWS Mainframe Modernization

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

Amazon Managed Service for Prometheus

付費日誌

支援的 [V1 許可]

Amazon MSK代理程式日誌

付費日誌

支援的 [V1 許可]

支援的 [V1 許可] 支援的 [V1 許可]

Amazon MSK Connect 日誌

付費日誌

支援的 [V1 許可]

支援的 [V1 許可] 支援的 [V1 許可]

Amazon MQ 一般和稽核日誌

自訂日誌

支援

AWS 網路防火牆日誌

付費日誌

支援的 [V1 許可]

支援的 [V1 許可] 支援的 [V1 許可]

Network Load Balancer 存取日誌

付費日誌 支援的 [V1 許可]

OpenSearch 日誌

自訂日誌

支援

Amazon OpenSearch Service 擷取日誌

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS OpsWorks logs

自訂日誌

支援

Amazon Relational 資料庫 ServicePostgreSQL日誌

自訂日誌

支援

AWS RoboMaker 日誌

自訂日誌

支援

Amazon Route 53 公有DNS查詢日誌

付費日誌

支援

Amazon Route 53 Resolver 查詢日誌

付費日誌

支援的 [V1 許可]

支援的 [V1 許可]

Amazon SageMaker 事件

付費日誌

支援的 [V1 許可]

Amazon SageMaker 工作者事件

付費日誌

支援的 [V1 許可]

AWS Site-to_Site VPN日誌

付費日誌

支援的 [V1 許可]

支援的 [V1 許可]

支援的 [V1 許可]

Amazon Simple Email Service 日誌

付費日誌 支援的 [V2 許可] 支援的 [V2 許可] 支援的 [V2 許可]

Amazon Simple Notification Service 日誌

自訂日誌

支援

Amazon Simple Notification Service 資料保護政策日誌

自訂日誌

支援

EC2 Spot 執行個體資料摘要檔案

付費日誌

支援的 [V1 許可]

AWS Step Functions Express Workflow 和標準工作流程日誌

付費日誌

支援的 [V1 許可]

Storage Gateway 稽核日誌和運作狀態日誌

付費日誌

支援的 [V1 許可]

AWS Transfer Family logs

付費日誌

支援的 [V1 許可]

支援的 [V1 許可]

支援的 [V1 許可]

AWS Verified Access logs

付費日誌

支援的 [V1 許可]

支援的 [V1 許可]

支援的 [V1 許可]

Amazon Virtual Private Cloud 流程日誌

付費日誌

支援

支援的 [V1 許可] 支援的 [V1 許可]

Amazon VPC Lattice 存取日誌

付費日誌 支援的 [V1 許可] 支援的 [V1 許可] 支援的 [V1 許可]

AWS WAF logs

付費日誌 支援的 [V1 許可] 支援的 [V1 許可]

支援

Amazon WorkMail 日誌

付費日誌 支援的 [V2 許可] 支援的 [V2 許可] 支援的 [V2 許可]

需要額外許可 [V1] 的日誌記錄

某些 AWS 服務會使用通用基礎設施,將日誌傳送至 CloudWatch Logs、Amazon S3 或 Firehose。若要讓下表列出的 AWS 服務將日誌傳送到這些目的地,您必須以具有特定許可的使用者身分登入。

此外,必須授予 許可 AWS ,才能傳送日誌。在設定日誌時, AWS 可以自動建立這些許可,或者您可以在設定日誌之前先自行建立這些許可。若要跨帳戶交付,您必須自行手動建立許可政策。

如果您選擇在您或組織中的某人第一次設定日誌傳送時 AWS 自動設定必要的許可和資源政策,則設定日誌傳送的使用者必須具有特定許可,如本節稍後所述。或者,您可以自行建立資源政策,所以設定傳送日誌的使用者就不需要這麼多許可。

下表摘要說明本節中的資訊適用於哪些日誌類型及哪些日誌目的地。

下列各節提供各個目的地的詳細資訊。

傳送至日誌的 CloudWatch 日誌

重要

當您設定要傳送至 CloudWatch Logs 的下列清單中的日誌類型時, 會視需要 AWS 建立或變更與接收日誌的日誌群組相關聯的資源政策。繼續閱讀本節以查看詳細資訊。

本節適用於將上一節中資料表中列出的日誌類型傳送到 CloudWatch 日誌時:

使用者許可

若要能夠設定第一次將任何這類日誌傳送至 CloudWatch Logs,您必須使用下列許可登入 帳戶。

  • logs:CreateLogDelivery

  • logs:PutResourcePolicy

  • logs:DescribeResourcePolicies

  • logs:DescribeLogGroups

    注意

    當您指定 logs:DescribeLogGroupslogs:DescribeResourcePolicieslogs:PutResourcePolicy許可時,請務必將其Resource行ARN的 設定為使用*萬用字元,而不是只指定單一日誌群組名稱。例如 "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*"

如果這些類型的日誌中有任何一種已經傳送到 CloudWatch 日誌中的日誌群組,則若要設定將其他這些類型的日誌傳送至該相同的日誌群組,您只需要 logs:CreateLogDelivery許可。

日誌群組和資源政策

日誌送往的日誌群組必須具有包含特定許可的資源政策。如果日誌群組目前沒有資源政策,且使用者設定日誌具有日誌群組的 logs:PutResourcePolicylogs:DescribeResourcePolicieslogs:DescribeLogGroups許可,則當您開始將日誌傳送至 CloudWatch 日誌時, AWS 會自動為其建立下列政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*" ], "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } } ] }

如果日誌群組有資源政策,但該政策未包含前一個政策中出現的陳述式,且設定記錄的使用者具有日誌群組的 logs:PutResourcePolicylogs:DescribeResourcePolicieslogs:DescribeLogGroups 許可,則該陳述式會附加至日誌群組的資源政策。

日誌群組資源政策大小限制考量

這些服務必須在資源政策中列出其傳送日誌的每個日誌群組,且 CloudWatch 日誌資源政策限制為 5120 個字元。傳送日誌至大量日誌群組的服務可能會達到此限制。

為了緩解這種情況, CloudWatch Logs 會監控傳送日誌之服務所使用的資源政策大小,並在偵測到政策接近 5120 個字元的大小限制時, CloudWatch Logs 會自動在該服務的資源政策/aws/vendedlogs/*中啟用 。然後,您就可以開始使用名稱開頭為 /aws/vendedlogs/ 的日誌群組,作為這些服務的日誌目的地。

傳送至 Amazon S3 的日誌

當您將日誌設定為傳送至 Amazon S3 時, 會視需要 AWS 建立或變更與接收日誌之 S3 儲存貯體相關聯的資源政策。

直接發佈至 Amazon S3 的日誌會發佈至您指定的現有儲存貯體。在指定的儲存貯體中,每五分鐘會建立一或多個日誌檔案。

當您第一次將日誌傳送到 Amazon S3 儲存貯體時,傳送日誌的服務會記錄儲存貯體的擁有者,以確保日誌僅傳送到屬於此帳戶的儲存貯體。因此,若要變更 Amazon S3 儲存貯體擁有者,您必須在原始服務中重新建立或更新日誌訂閱。

注意

CloudFront 使用的許可模型與其他傳送已終止日誌至 S3 的服務不同。如需詳細資訊,請參閱設定標準記錄和存取日誌檔案所需的許可

此外,如果您使用相同的 S3 儲存貯體 CloudFront 存取日誌和其他日誌來源,在儲存貯體ACL上啟用 CloudFront 也會將許可授予使用此儲存貯體的所有其他日誌來源。

重要

如果您要將日誌傳送至 Amazon S3 儲存貯體,且儲存貯體政策包含 NotActionNotPrincipal元素,則自動將日誌交付許可新增至儲存貯體,並建立日誌訂閱將會失敗。若要成功建立日誌訂閱,您需要手動將日誌交付許可新增至儲存貯體政策,然後建立日誌訂閱。如需詳細資訊,請參閱本節中的說明。

如果儲存貯體使用客戶受管 AWS KMS 金鑰進行伺服器端加密,您還必須為客戶受管金鑰新增金鑰政策。如需詳細資訊,請參閱Amazon S3

使用者許可

您必須以具有下列許可的帳戶登入,才能第一次設定將任何這些類型的日誌傳送到 Amazon S3。

  • logs:CreateLogDelivery

  • S3:GetBucketPolicy

  • S3:PutBucketPolicy

如果任何這些類型的日誌已傳送到某個 Amazon S3 儲存貯體,則若要設定將另一種類型的日誌傳送到同一個儲存貯體,您只需要有 logs:CreateLogDelivery 許可。

S3 儲存貯體資源政策

日誌送往的 S3 儲存貯體必須具有包含特定許可的資源政策。如果儲存貯體目前沒有資源政策,且使用者設定日誌具有儲存貯體的 S3:GetBucketPolicyS3:PutBucketPolicy許可,則當您開始將日誌傳送至 Amazon S3 時, AWS 會自動為其建立下列政策。

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } } ] }

在先前的政策中,針對 aws:SourceAccount,指定要交付至此儲存貯體之IDS日誌的帳戶清單。對於 aws:SourceArn,以 形式指定產生日誌ARNs的資源清單arn:aws:logs:source-region:source-account-id:*

如果儲存貯體具有資源政策,但該政策未包含前一個政策中出現的陳述式,且設定記錄的使用者具有儲存貯體的 S3:GetBucketPolicyS3:PutBucketPolicy 許可,則該陳述式會附加至儲存貯體的資源政策。

注意

在某些情況下, AWS CloudTrail 如果 未授予 s3:ListBucket許可,您可能會在 中看到AccessDenied錯誤delivery.logs.amazonaws.com。若要避免 CloudTrail 日誌中出現這些錯誤,您必須將 s3:ListBucket 許可授予 ,delivery.logs.amazonaws.com而且必須包含上述儲存貯體政策中 s3:GetBucketAcl許可集所顯示的Condition參數。為簡化此操作而不用建立一個新的 Statement,你可以直接將 AWSLogDeliveryAclCheck 更新為 “Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]

Amazon S3 儲存貯體伺服器端加密

您可以透過使用 Amazon S3 S3-managed金鑰 (SSE-S3) 啟用伺服器端加密,或使用存放在 AWS Key Management Service (SSE-) 中的 AWS KMS 金鑰啟用伺服器端加密來保護 Amazon S3 儲存貯體中的資料KMS。如需詳細資訊,請參閱使用伺服器端加密保護資料

如果您選擇 SSE-S3,則不需要額外的組態。Amazon S3 會處理加密金鑰。

警告

如果您選擇 SSE-KMS,則必須使用客戶受管金鑰,因為此案例不支援使用 AWS 受管金鑰。如果您使用 AWS 受管金鑰設定加密,日誌將以無法讀取的格式交付。

當您使用客戶受管 AWS KMS 金鑰時,您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策),以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

如果您選擇 SSE-KMS,則必須使用客戶受管金鑰,因為此案例不支援使用 AWS 受管金鑰。當您使用客戶受管 AWS KMS 金鑰時,您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策),以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

{ "Sid": "Allow Logs Delivery to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } }

針對 aws:SourceAccount,指定要交付至此儲存貯體之IDS日誌的帳戶清單。對於 aws:SourceArn,以 形式指定產生日誌ARNs的資源清單arn:aws:logs:source-region:source-account-id:*

傳送至 Firehose 的日誌

本節適用於將上一節資料表中列出的日誌類型傳送至 Firehose 的情況:

使用者許可

若要能夠設定第一次將任何這類日誌傳送至 Firehose,您必須使用下列許可登入 帳戶。

  • logs:CreateLogDelivery

  • firehose:TagDeliveryStream

  • iam:CreateServiceLinkedRole

如果這些類型的日誌中有任何一種已傳送至 Firehose,則若要設定將其他一種類型的日誌傳送至 Firehose,您只需要擁有 logs:CreateLogDeliveryfirehose:TagDeliveryStream許可。

IAM 用於許可的角色

由於 Firehose 不使用資源政策,因此在設定要傳送至 Firehose 的日誌時, AWS 會使用IAM角色。 AWS 建立名為 的服務連結角色 AWSServiceRoleForLogDelivery。 此服務連結角色包含下列許可。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch", "firehose:ListTagsForDeliveryStream" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/LogDeliveryEnabled": "true" } }, "Effect": "Allow" } ] }

當您設定記錄時,此服務連結角色會針對LogDeliveryEnabled標籤設定為 的所有 Firehose 交付串流授予許可true。將此標籤 AWS 提供給目的地交付串流。

此服務連結角色也有信任政策,以允許 delivery.logs.amazonaws.com 服務委託人擔任所需的服務連結角色。該信任政策如下:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

需要額外許可 [V2] 的日誌記錄

有些 AWS 服務會使用新的方法來傳送其日誌。這是一種靈活的方法,可讓您設定從這些服務到下列一或多個目的地的日誌交付: CloudWatch Logs、Amazon S3 或 Firehose。

工作日誌交付包含三個元素:

  • DeliverySource(一種) 是邏輯物件,代表實際傳送日誌的資源。

  • DeliveryDestination,這是代表實際交付目的地的邏輯物件。

  • 將交付來源連接至交付目的地的 Delivery

若要設定受支援 AWS 的服務與目的地之間的日誌傳遞,您必須執行下列動作:

  • 使用 建立交付來源PutDeliverySource

  • 使用 建立交付目的地PutDeliveryDestination

  • 如果您要跨帳戶交付日誌,則必須 PutDeliveryDestinationPolicy在目的地帳戶中使用 將 IAM 政策指派給目的地。此政策會授權從帳戶 A 中的交付來源建立交付至帳戶 B 中的交付目的地。若要跨帳戶交付,您必須自行手動建立許可政策。

  • 使用 ,透過完全配對一個交付來源和一個交付目的地來建立交付 CreateDelivery

以下各節提供您在登入後使用 V2 處理程序設定每種目的地的日誌傳遞所需之許可的詳細資訊。這些許可可以授予您用來登入IAM的角色。

重要

刪除日誌產生資源後,您有責任移除日誌交付資源。若要這麼做,請依照下列步驟進行。

  1. Delivery 使用 DeleteDelivery操作刪除 。

  2. DeliverySource 使用 DeleteDeliverySource操作刪除 。

  3. 如果與您剛刪除DeliverySourceDeliveryDestination相關聯的 僅用於此特定 DeliverySource,則您可以使用 DeleteDeliveryDestinations操作將其移除。

傳送至日誌的 CloudWatch 日誌

使用者許可

若要啟用將日誌傳送至 CloudWatch 日誌,您必須使用以下許可登入。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery", "logs:UpdateDeliveryConfiguration" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeConfigurationTemplates" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyCWL", "Effect": "Allow", "Action": [ "logs:PutResourcePolicy", "logs:DescribeResourcePolicies", "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:region:account-id:*" ] } ] }

日誌群組和資源政策

日誌送往的日誌群組必須具有包含特定許可的資源政策。如果日誌群組目前沒有資源政策,且使用者設定日誌具有日誌群組的 logs:PutResourcePolicylogs:DescribeResourcePolicieslogs:DescribeLogGroups許可,則當您開始將日誌傳送至 CloudWatch 日誌時, AWS 會自動為其建立下列政策。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite20150319", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*" ], "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } } ] }

日誌群組資源政策大小限制考量

這些服務必須在資源政策中列出其傳送日誌的每個日誌群組,且 CloudWatch 日誌資源政策限制為 5120 個字元。將日誌傳送至大量日誌群組的服務可能會受到此限制。

為了緩解這種情況, CloudWatch Logs 會監控傳送日誌之服務所使用的資源政策大小,並在偵測到政策接近 5120 個字元的大小限制時, CloudWatch Logs 會自動在該服務的資源政策/aws/vendedlogs/*中啟用 。然後,您就可以開始使用名稱開頭為 /aws/vendedlogs/ 的日誌群組,作為這些服務的日誌目的地。

傳送至 Amazon S3 的日誌

使用者許可

若要啟用傳送日誌至 Amazon S3,您登入時必須具有以下許可。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery", "logs:UpdateDeliveryConfiguration" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeConfigurationTemplates" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyS3", "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

日誌送往的 S3 儲存貯體必須具有包含特定許可的資源政策。如果儲存貯體目前沒有資源政策,且使用者設定日誌具有儲存貯體的 S3:GetBucketPolicyS3:PutBucketPolicy許可,則當您開始將日誌傳送至 Amazon S3 時, AWS 會自動為其建立下列政策。

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:delivery-source*"] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:delivery-source:*"] } } } ] }

在先前的政策中,針對 aws:SourceAccount指定要交付至此儲存貯體之IDS日誌的帳戶清單。對於 aws:SourceArn,以 形式指定產生日誌ARNs的資源清單arn:aws:logs:source-region:source-account-id:*

如果儲存貯體具有資源政策,但該政策未包含前一個政策中出現的陳述式,且設定記錄的使用者具有儲存貯體的 S3:GetBucketPolicyS3:PutBucketPolicy 許可,則該陳述式會附加至儲存貯體的資源政策。

注意

在某些情況下, AWS CloudTrail 如果 s3:ListBucket許可尚未授予 ,您可能會在 中看到AccessDenied錯誤delivery.logs.amazonaws.com。若要避免 CloudTrail 日誌中出現這些錯誤,您必須將 s3:ListBucket 許可授予 ,delivery.logs.amazonaws.com而且必須包含上一個儲存貯體政策中許可s3:GetBucketAcl集所顯示的Condition參數。為簡化此操作而不用建立一個新的 Statement,你可以直接將 AWSLogDeliveryAclCheck 更新為 “Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]

Amazon S3 儲存貯體伺服器端加密

您可以啟用伺服器端加密搭配 Amazon S3 S3-managed 儲存貯體中的資料KMS。SSE-S3 AWS KMS AWS Key Management Service SSE 如需詳細資訊,請參閱使用伺服器端加密保護資料

如果您選擇 SSE-S3,則不需要額外的組態。Amazon S3 會處理加密金鑰。

警告

如果您選擇 SSE-KMS,則必須使用客戶受管金鑰,因為此案例不支援使用 AWS 受管金鑰。如果您使用 AWS 受管金鑰設定加密,日誌將以無法讀取的格式交付。

使用客戶受管 AWS KMS 金鑰時,您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策),以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

如果您選擇 SSE-KMS,則必須使用客戶受管金鑰,因為此案例不支援使用 AWS 受管金鑰。使用客戶受管 AWS KMS 金鑰時,您可以在啟用儲存貯體加密時指定客戶受管金鑰的 Amazon Resource Name (ARN)。您必須將以下內容新增至客戶受管金鑰的金鑰政策 (而不是 S3 儲存貯體的儲存貯體政策),以便日誌傳遞帳戶可以寫入您的 S3 儲存貯體。

{ "Sid": "Allow Logs Delivery to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:delivery-source:*"] } } }

針對 aws:SourceAccount,指定要交付至此儲存貯體之IDS日誌的帳戶清單。對於 aws:SourceArn,以 形式指定產生日誌ARNs的資源清單arn:aws:logs:source-region:source-account-id:*

傳送至 Firehose 的日誌

使用者許可

若要啟用傳送日誌至 Firehose,您必須使用以下許可登入。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery", "logs:UpdateDeliveryConfiguration" ], "Resource": [ "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeConfigurationTemplates" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyFH", "Effect": "Allow", "Action": [ "firehose:TagDeliveryStream" ], "Resource": [ "arn:aws:firehose:region:account-id:deliverystream/*" ] }, { "Sid": "CreateServiceLinkedRole", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "arn:aws:iam::account-id:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery" } ] }

IAM 用於資源許可的角色

由於 Firehose 不使用資源政策,因此在設定要傳送至 Firehose 的日誌時, AWS 會使用IAM角色。 AWS 建立名為 的服務連結角色 AWSServiceRoleForLogDelivery。 此服務連結角色包含下列許可。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch", "firehose:ListTagsForDeliveryStream" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/LogDeliveryEnabled": "true" } }, "Effect": "Allow" } ] }

當您設定記錄時,此服務連結角色會針對LogDeliveryEnabled標籤設定為 的所有 Firehose 交付串流授予許可true。將此標籤 AWS 提供給目的地交付串流。

此服務連結角色也有信任政策,以允許 delivery.logs.amazonaws.com 服務委託人擔任所需的服務連結角色。該信任政策如下:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

服務特定許可

除了前面各節中列出的目的地特定許可之外,某些服務需要明確授權,允許客戶從其資源傳送日誌,作為額外的安全層。它會針對在該服務內查詢日誌的資源授權 AllowVendedLogDeliveryForResource動作。對於這些服務,請使用下列政策並取代 service 以及 resource-type 使用適當的值。如需這些欄位的服務特定值,請參閱這些服務的文件頁面以取得已結束的日誌。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ServiceLevelAccessForLogDelivery", "Effect": "Allow", "Action": [ "service:AllowVendedLogDeliveryForResource" ], "Resource": "arn:aws:service:region:account-id:resource-type/*" } ] }

主控台特定許可

除了前面各節中列出的許可之外,如果您使用主控台而不是 設定日誌交付APIs,您也需要下列其他許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLogDeliveryActionsConsoleCWL", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:*" ] }, { "Sid": "AllowLogDeliveryActionsConsoleS3", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowLogDeliveryActionsConsoleFH", "Effect": "Allow", "Action": [ "firehose:ListDeliveryStreams", "firehose:DescribeDeliveryStream" ], "Resource": [ "*" ] } ] }

跨帳戶交付範例

在此範例中,涉及兩個帳戶。具有日誌產生資源的帳戶為帳戶 A、ID:AAAAAAAAAAAA,且具有日誌消耗資源的帳戶為帳戶 B、ID:BBBBBBBBBBBB.

帳戶 A 想要使用 ARN arn:aws:bedrock 從帳戶中 Amazon Bedrock 的知識庫傳遞日誌:region:AAAAAAAAAAAA:知識基礎/XXXXXXXXXX.

在此範例中,帳戶 A 需要下列許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowVendedLogDeliveryForKnowledgeBase", "Effect": "Allow", "Action": [ "bedrock:AllowVendedLogDeliveryForResource" ], "Resource": "arn:aws:bedrock:region:AAAAAAAAAAAA:knowledge-base/XXXXXXXXXX" }, { "Sid": "CreateLogDeliveryPermissions", "Effect": "Allow", "Action": [ "logs:PutDeliverySource", "logs:CreateDelivery" ], "Resource": [ "arn:aws:logs:region:AAAAAAAAAAAA:delivery-source:*", "arn:aws:logs:region:AAAAAAAAAAAA:delivery:*", "arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:*" ] } ] }

建立交付來源

首先,帳戶 A 會建立交付來源及其基礎知識庫:

aws logs put-delivery-source --name my-delivery-source --log-type APPLICATION_LOGS --resource-arn arn:aws:bedrock:region:AAAAAAAAAAAA:knowledge-base/XXXXXXXXXX

接下來,帳戶 B 必須使用下列其中一個流程建立交付目的地:

設定交付至 Amazon S3 儲存貯體

帳戶 B 想要使用 ARN arn:aws:s3::amzn-s3-demo-bucket 接收 S3 S3儲存貯體的日誌。在此範例中,帳戶 B 需要下列許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PutLogDestinationPermissions", "Effect": "Allow", "Action": [ "logs:PutDeliveryDestination", "logs:PutDeliveryDestinationPolicy" ], "Resource": "arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:*" } ] }

儲存貯體在其儲存貯體政策中需要下列許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogsDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/AAAAAAAAAAAA/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["AAAAAAAAAAAA"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:region:AAAAAAAAAAAA:delivery-source:my-delivery-source"] } } } ] }

如果儲存貯體使用 SSE- 加密KMS,請確保 AWS KMS 金鑰政策具有適當的許可。例如,如果KMS金鑰為 arn:aws:kms:region:BBBBBBBBBBBB:key/X,請使用下列各項:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLogsGenerateDataKey", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" } "Action": [ "kms:GenerateDataKey" ], "Resource": "arn:aws:kms:region:BBBBBBBBBBBB:key/X", "Condition": { "StringEquals": { "aws:SourceAccount": ["AAAAAAAAAAAA"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:region:AAAAAAAAAAAA:delivery-source:my-delivery-source"] } } } ] }

然後,帳戶 B 可以使用 S3 儲存貯體作為目的地資源來建立交付目的地:

aws logs put-delivery-destination --name my-s3-delivery-destination --delivery-destination-configuration "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket"

接下來,B 帳戶會在其新建立的交付目的地上建立交付目的地政策,這會授予帳戶 A 建立日誌交付的許可。將新增至新建立的交付目的地的政策如下:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateDelivery", "Effect": "Allow", "Principal": { "AWS": "AAAAAAAAAAAA" }, "Action": [ "logs:CreateDelivery" ], "Resource": "arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:my-s3-delivery-destination" } ] }

此政策將儲存在帳戶 B 的電腦中,作為destination-policy-s3.json連接此資源,帳戶 B 將執行下列命令:

aws logs put-delivery-destination-policy --delivery-destination-name my-s3-delivery-destination --delivery-destination-policy file://destination-policy-s3.json

最後,帳戶 A 會建立交付,將帳戶 A 中的交付來源連結至帳戶 B 中的交付目的地。

aws logs create-delivery --delivery-source-name my-delivery-source --delivery-destination-arn arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:my-s3-delivery-destination

設定交付至 Firehose 串流

在此範例中,帳戶 B 想要接收日誌到其 Firehose 串流。Firehose 串流具有下列項目,ARN並設定為使用 DirectPut 交付串流類型:

arn:aws:firehose:region:BBBBBBBBBBBB:deliverystream/X

在此範例中,帳戶 B 需要下列許可:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowFirehoseCreateSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": "arn:aws:iam::BBBBBBBBBBBB:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery", }, { "Sid": "AllowFirehoseTagging", "Effect": "Allow", "Action": [ "firehose:TagDeliveryStream" ], "Resource": "arn:aws:firehose:region:BBBBBBBBBBBB:deliverystream/X" }, { "Sid": "AllowFirehoseDeliveryDestination", "Effect": "Allow", "Action": [ "logs:PutDeliveryDestination", "logs:PutDeliveryDestinationPolicy" ], "Resource": "arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:*" } ] }

Firehose 串流必須將標籤LogDeliveryEnabled設定為 true

然後,帳戶 B 會使用 Firehose 串流作為目的地資源來建立交付目的地:

aws logs put-delivery-destination --name my-fh-delivery-destination --delivery-destination-configuration "destinationResourceArn=arn:aws:firehose:region:BBBBBBBBBBBB:deliverystream/X"

接下來,B 帳戶會在其新建立的交付目的地上建立交付目的地政策,這會授予帳戶 A 建立日誌交付的許可。要新增至新建立的交付目的地的政策如下:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateDelivery", "Effect": "Allow", "Principal": { "AWS": "AAAAAAAAAAAA" }, "Action": [ "logs:CreateDelivery" ], "Resource": "arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:my-fh-delivery-destination" } ] }

此政策將儲存在帳戶 B 的電腦中,作為destination-policy-fh.json連接此資源,帳戶 B 會執行下列命令:

aws logs put-delivery-destination-policy --delivery-destination-name my-fh-delivery-destination --delivery-destination-policy file://destination-policy-fh.json

最後,帳戶 A 會建立交付,將帳戶 A 中的交付來源連結至帳戶 B 中的交付目的地。

aws logs create-delivery --delivery-source-name my-delivery-source --delivery-destination-arn arn:aws:logs:region:BBBBBBBBBBBB:delivery-destination:my-fh-delivery-destination

預防跨服務混淆代理人

混淆代理人問題屬於安全性問題,其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS,跨服務模擬可能會導致混淆代理問題。在某個服務 (呼叫服務) 呼叫另一個服務 (被呼叫服務) 時,可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可,以其不應有存取許可的方式對其他客戶的資源採取動作。為了預防這種情況, AWS 提供的工具可協助您保護所有服務的資料,而這些服務主體已獲得您帳戶中資源的存取權。

我們建議在資源政策中使用 aws:SourceArnaws:SourceOrgIDaws:SourceAccountaws:SourceOrgPaths全域條件內容索引鍵,以限制 CloudWatch Logs 為資源提供另一項服務的許可。使用 僅aws:SourceArn將一個資源與跨服務存取建立關聯。使用 aws:SourceAccount 讓該帳戶中的任何資源與跨服務使用相關聯。使用 aws:SourceOrgID 允許組織中任何帳戶的任何資源與跨服務使用相關聯。使用 aws:SourceOrgPaths 將 AWS Organizations 路徑中來自 帳戶的任何資源與跨服務使用建立關聯。如需使用和了解路徑的詳細資訊,請參閱了解 AWS Organizations 實體路徑

防止混淆代理問題的最有效方法是使用包含完整資源ARN的aws:SourceArn全域條件內容索引鍵。如果您不知道資源ARN的完整內容,或要指定多個資源,請將aws:SourceArn全域內容條件索引鍵與萬用字元 (*) 搭配使用,以處理 的未知部分ARN。例如:arn:aws:servicename:*:123456789012:*

如果該aws:SourceArn值不包含帳戶 ID,例如 Amazon S3 儲存貯體ARN,您必須同時使用 aws:SourceAccountaws:SourceArn來限制許可。

若要大規模防範混淆代理人問題,請在資源型政策中使用 aws:SourceOrgIDaws:SourceOrgPaths 全域條件內容鍵和資源的組織 ID 或組織路徑。當您新增、移除或移動組織中的帳戶時,包含 aws:SourceOrgIDaws:SourceOrgPaths 鍵的政策將會自動包含正確的帳戶,您無需手動更新政策。

本頁先前章節中的政策說明如何使用 aws:SourceArnaws:SourceAccount 全域條件內容金鑰來預防混淆代理人問題。

CloudWatch 記錄 AWS 受管政策的更新

檢視自此服務開始追蹤這些變更以來 CloudWatch ,日誌受 AWS 管政策更新的詳細資訊。如需此頁面變更的自動提醒,請在 CloudWatch 日誌文件歷史記錄頁面上訂閱RSS摘要。

變更 描述 日期

AWSServiceRoleForLogDelivery 服務連結角色政策 – 更新至現有政策

CloudWatch 日誌變更了與 相關聯的IAM政策中的許可 AWSServiceRoleForLogDelivery 服務連結角色。變更如下:

  • firehose:ResourceTag/LogDeliveryEnabled": "true" 條件金鑰已變更為 aws:ResourceTag/LogDeliveryEnabled": "true"

2021 年 7 月 15 日

CloudWatch 日誌已開始追蹤變更

CloudWatch 日誌開始追蹤其 AWS 受管政策的變更。

2021 年 6 月 10 日