启用来自 Amazon 服务的日志记录 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启用来自 Amazon 服务的日志记录

虽然许多服务仅向日志发布日志,但有些 Amazon 服务可以将 CloudWatch 日志直接发布到亚马逊简单存储服务或亚马逊 Kinesis Data Firehose。如果您对日志的主要需求是在其中一种服务中存储或处理日志,那么您可以轻松地让生成日志的服务将它们直接发送到 Amazon S3 或 Kinesis Data Firehose,而无需额外设置。

即使日志直接发布到 Amazon S3 或 Kinesis Data Firehose,仍会产生费用。有关更多信息,请参阅 Amazon P ricing 中 “日” 选项卡上的 “销售日志” CloudWatch 。

一些 Amazon 服务使用通用的基础架构来发送日志。要启用从这些服务进行日志记录,您必须以具有特定权限的用户身份登录。此外,您必须 Amazon 向授予权限才能发送日志。

对于需要这些权限的服务,所需的权限有两个版本。表中将需要这些额外权限的服务标为支持的 [V1 权限]支持的 [V2 权限]。有关这些必需权限的信息,请参阅表后的部分。

日志类型 CloudWatch Logs Amazon S3 Kinesis Data Firehose

Amazon API Gateway 访问日志

支持的 [V1 权限]

Amazon AppSync 日志

支持

Amazon Aurora MySQL 日志

支持

Amazon Chime 媒体质量指标日志和 SIP 消息日志

支持的 [V1 权限]

CloudFront: 访问日志

支持的 [V1 权限]

Amazon CloudHSM 审核日志

支持

CloudWatch 显然是评估事件日志

支持的 [V1 权限] 支持的 [V1 权限]

CloudWatch 互联网监视器日志

支持的 [V1 权限]

CloudTrail 日志

支持

Amazon CodeBuild 日志

支持

Amazon Cognito 日志

支持的 [V1 权限]

Amazon Connect 日志

支持

Amazon DataSync 日志

支持

Amazon ElastiCache for Redis 日志

支持的 [V1 权限] 支持的 [V1 权限]

Amazon Elastic Beanstalk 日志

支持

Amazon Elastic Container Service 日志

支持

Amazon Elastic Kubernetes Service 控制面板日志

支持

Amazon Fargate 日志

支持

Amazon Fault Injection Service 实验日志

支持的 [V1 权限]

Amazon FinSpace

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon Global Accelerator 流日志

支持的 [V1 权限]

Amazon Glue 作业日志

支持

Amazon Interactive Video Service 聊天日志

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon IoT 日志

支持

Amazon IoT FleetWise 日志

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon Lambda 日志

支持

Amazon Macie 日志

支持

Amazon Mainframe Modernization

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon Managed Service for Prometheus 日志

支持的 [V1 权限]

Amazon MSK 代理日志

支持的 [V1 权限]

支持的 [V1 权限] 支持的 [V1 权限]

Amazon MSK Connect 日志

支持的 [V1 权限]

支持的 [V1 权限] 支持的 [V1 权限]

Amazon MQ 一般日志和审计日志

支持

Amazon Network 防火墙日志

支持的 [V1 权限]

支持的 [V1 权限] 支持的 [V1 权限]

Network Load Balancer 访问日志

支持的 [V1 权限]

OpenSearch 日志

支持

Amazon OpenSearch 服务摄取日志

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon OpsWorks 日志

支持

亚马逊关系数据库 ServicePostgre SQL 日志

支持

Amazon RoboMaker 日志

支持

Amazon Route 53 公有 DNS 查询日志

支持

Amazon Route 53 Resolver 查询日志

支持的 [V1 权限]

支持的 [V1 权限]

亚马逊 SageMaker 活动

支持的 [V1 权限]

亚马逊 SageMaker 员工活动

支持的 [V1 权限]

Amazon 站点到站点 VPN 日志

支持的 [V1 权限]

支持的 [V1 权限]

支持的 [V1 权限]

Amazon Simple Notification Service 日志

支持

Amazon Simple Notification Service 数据保护策略日志

支持

EC2 Spot 实例数据源文件

支持的 [V1 权限]

Amazon Step Functions 快速工作流程和标准工作流程日志

支持的 [V1 权限]

Storage Gateway 审计日志和运行状况日志

支持的 [V1 权限]

Amazon Transfer Family 日志

支持的 [V1 权限]

支持的 [V1 权限]

支持的 [V1 权限]

Amazon Verified Access 日志

支持的 [V1 权限]

支持的 [V1 权限]

支持的 [V1 权限]

Amazon Virtual Private Cloud 流日志

支持的 [V1 权限] 支持的 [V1 权限]

Amazon VPC Lattice 访问日志

支持的 [V1 权限] 支持的 [V1 权限] 支持的 [V1 权限]

Amazon WAF 日志

支持的 [V1 权限] 支持的 [V1 权限]

支持

Amazon CodeWhisperer

支持的 [V2 权限] 支持的 [V2 权限] 支持的 [V2 权限]

需要额外权限 [V1] 的日志记录

有些 Amazon 服务使用通用基础设施将其日志发送到日 CloudWatch 志、Amazon S3 或 Kinesis Data Firehose。要启用下表中列出的 Amazon 服务,将其日志发送到前述目标,您必须以具有特定权限的用户身份登录。

此外,必须向 Amazon 授予权限才能发送日志。 Amazon 可以在设置日志时自动创建这些权限,也可以在设置日志之前先自己创建这些权限。

如果您选择在您或您的组织中的某人首次设置日志发送时 Amazon 自动设置必要的权限和资源策略,则设置发送日志的用户必须具有一定的权限,如本节后面所述。或者,您可以自行创建资源策略,这样设置日志发送的用户就不需要那么多权限。

下表汇总了适用本节中信息的日志类型及日志目标。

以下各部分提供了每个目标的更多详细信息。

发送到日志的 CloudWatch 日志

重要

在将以下列表中的日志类型设置为发送到 Lo CloudWatch gs 时,如果需要,可以 Amazon 创建或更改与接收日志的日志组关联的资源策略。继续阅读本节,查看详细信息。

当将上一节表中列出的日志类型发送到 Log CloudWatch s 时,本节适用:

用户权限

为了能够设置首次向 Logs 发送任何此类 CloudWatch 日志,您必须使用具有以下权限的账户登录。

  • logs:CreateLogDelivery

  • logs:PutResourcePolicy

  • logs:DescribeResourcePolicies

  • logs:DescribeLogGroups

如果这些类型的日志中的任何一种已发送到日志中的某个 CloudWatch 日志组,则要设置向同一日志组发送另一类此类日志,您只需要该logs:CreateLogDelivery权限即可。

日志组和资源策略

接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略,并且设置日志记录的用户拥有该日志组的logs:PutResourcePolicylogs:DescribeResourcePolicies、和logs:DescribeLogGroups权限,则在您开始将日志发送到 CloudWatch Logs 时, Amazon 会自动为其创建以下策略。

{ "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 日志会监控发送日志的服务所使用的资源策略的大小,当它检测到策略接近 5120 个字符的大小限制时, CloudWatch 日志会自动在该服务的资源策略/aws/vendedlogs/*中启用。之后,您可以开始将名称以 /aws/vendedlogs/ 开头的日志组作为这些服务所发送的日志的目标。

发送到 Amazon S3 的日志

重要

在将以下列表中的日志类型设置为发送到 Amazon S3 时,如果需要,可以 Amazon 创建或更改与接收日志的 S3 存储桶关联的资源策略。继续阅读本节,查看详细信息。

当以下类型的日志发送到 Amazon S3 时,本节适用:

  • CloudFront 访问日志和流式访问日志。 CloudFront 使用的权限模型与此列表中的其他服务不同。有关更多信息,请参阅配置标准日志记录和访问日志文件所需的权限

  • Amazon EC2 Spot 实例数据源

  • Amazon Global Accelerator 流日志

  • Amazon Managed Streaming for Apache Kafka 代理日志

  • Network Load Balancer 访问日志

  • Amazon Network 防火墙日志

  • Amazon Virtual Private Cloud 流日志

直接发布到 Amazon S3 的日志将发布到您指定的现有存储桶。每 5 分钟将在指定的存储桶中创建一个或多个日志文件。

当您首次将日志发送到 Amazon S3 存储桶时,发送日志的服务会记录存储桶的拥有者,以确保日志仅发送到属于该账户的存储桶。因此,要更改 Amazon S3 存储桶拥有者,您必须在原始服务中重新创建或更新日志订阅。

用户权限

若要能够设置首次将这些类型日志中的任一种日志发送到 Amazon S3,您必须登录具有以下权限的账户。

  • logs:CreateLogDelivery

  • S3:GetBucketPolicy

  • S3:PutBucketPolicy

如果其中任何一种类型的日志已被发送到 Amazon S3 存储桶,要设置将其中另一种日志也发送到同一存储桶,您只需要 logs:CreateLogDelivery 权限。

S3 存储桶资源策略

接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicyS3:PutBucketPolicy权限,则在您开始向 Amazon S3 发送日志时 Amazon 会自动为其创建以下策略。

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::my-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:::my-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,请指定将日志传送到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicyS3:PutBucketPolicy 权限,则该语句将附加到存储桶的资源策略中。

注意

在某些情况下, Amazon CloudTrail 如果未授予s3:ListBucket权限,则可能会在中看到AccessDenied错误delivery.logs.amazonaws.com。为避免 CloudTrail 日志中出现这些错误,您必须向授予s3:ListBucket权限,delivery.logs.amazonaws.com并且必须包含在前面的存储桶策略中设置的s3:GetBucketAcl权限中显示的Condition参数。为方便起见,可以直接将 AWSLogDeliveryAclCheck 更新为 “Action”: [“s3:GetBucketAcl”, “s3:ListBucket”],而不是创建一个新的 Statement

Amazon S3 存储桶服务器端加密

您可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用存储在 (SSE-KMS) 中的密钥启用服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息,请参阅使用服务器端加密保护数据

如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。

警告

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 Amazon 托管密钥。如果您使用 Amazon 托管密钥设置加密,则日志将以不可读的格式传送。

当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 Amazon 托管密钥。当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (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,请指定将日志传送到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

发送到 Kinesis Data Firehose 的日志

当前一部分的表中列出的日志类型发送到 Kinesis Data Firehose 时,本部分适用:

用户权限

若要能够设置首次将这些类型日志中的任一种日志发送到 Kinesis Data Firehose,您必须登录具有以下权限的账户。

  • logs:CreateLogDelivery

  • firehose:TagDeliveryStream

  • iam:CreateServiceLinkedRole

如果其中任何一种日志已被发送到 Kinesis Data Firehose,要设置将其中另一种日志也发送到 Kinesis Data Firehose,您只需要 logs:CreateLogDeliveryfirehose:TagDeliveryStream 权限。

用于权限的 IAM 角色

由于 Kinesis Data Firehose 不使用资源 Amazon 策略,因此在设置要发送到 Kinesis Data Firehose 的日志时会使用 IAM 角色。 Amazon 创建名AWSServiceRoleForLogDelivery为的服务相关角色。此服务相关角色包括以下权限。

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

此服务相关角色授予标签设置为的所有 Kinesis Data Firehose 交付流的权限LogDeliveryEnabledtrue Amazon 在设置日志记录时,将此标签提供给目标传送流。

此服务相关角色还具有允许 delivery.logs.amazonaws.com 服务委托人来代入所需服务相关角色的信任策略。该信任策略如下所示:

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

需要额外权限 [V2] 的日志记录

一些 Amazon 服务使用新的方法来发送日志。这是一种灵活的方法,可让您设置从这些服务到以下一个或多个目标的日志传输: CloudWatch 日志、Amazon S3 或 Kinesis Data Firehose。

要在支持的 Amazon 服务和目标之间配置日志传输,必须执行以下操作:

  • 创建传输源,它是一个逻辑对象,代表实际发送日志的资源。有关更多信息,请参阅PutDeliverySource

  • 创建传输目标,这是代表实际传输目标的逻辑对象。有关更多信息,请参阅PutDeliveryDestination

  • 如果您要跨账户传送日志,则必须在目标账户PutDeliveryDestinationPolicy中使用向目标分配 IAM 策略。此策略允许传输到该目标。

  • 使用 CreateDelivery,通过将一个传输源和一个传输目标精确配对来创建传输

以下各节详细介绍了在登录期间使用 V2 流程将日志传输到每种类型目标时需要具备的权限。这些权限可以授予您登录时使用的 IAM 角色。

除了以下各节中列出的权限外,如果您使用控制台而不是 API 设置日志传输,则还需要以下额外权限:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "firehose:ListDeliveryStreams", "firehose:DescribeDeliveryStream", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:*", "arn:aws:firehose:region:account-id:deliverystream/*", "arn:aws:s3:::*" ] } ] }

发送到日志的 CloudWatch 日志

用户权限

要启用向日志发送 CloudWatch 日志,您必须使用以下权限登录。

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

日志组和资源策略

接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略,并且设置日志记录的用户拥有该日志组的logs:PutResourcePolicylogs:DescribeResourcePolicies、和logs:DescribeLogGroups权限,则在您开始将日志发送到 CloudWatch Logs 时, Amazon 会自动为其创建以下策略。

{ "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 日志会监控发送日志的服务所使用的资源策略的大小,当它检测到策略接近 5120 个字符的大小限制时, CloudWatch 日志会自动在该服务的资源策略/aws/vendedlogs/*中启用。之后,您可以开始将名称以 /aws/vendedlogs/ 开头的日志组作为这些服务所发送的日志的目标。

发送到 Amazon S3 的日志

用户权限

要启用向 Amazon S3 发送日志,您必须使用以下权限登录。

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

接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicyS3:PutBucketPolicy权限,则在您开始向 Amazon S3 发送日志时 Amazon 会自动为其创建以下策略。

{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::my-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:::my-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,请指定将日志传送到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicyS3:PutBucketPolicy 权限,则该语句将附加到存储桶的资源策略中。

注意

在某些情况下, Amazon CloudTrail 如果未授予s3:ListBucket权限,则可能会在中看到AccessDenied错误delivery.logs.amazonaws.com。为避免 CloudTrail 日志中出现这些错误,您必须向授予s3:ListBucket权限,delivery.logs.amazonaws.com并且必须包含在前面的存储桶策略中设置的s3:GetBucketAcl权限中显示的Condition参数。为方便起见,可以直接将 AWSLogDeliveryAclCheck 更新为 “Action”: [“s3:GetBucketAcl”, “s3:ListBucket”],而不是创建一个新的 Statement

Amazon S3 存储桶服务器端加密

您可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用存储在 (SSE-KMS) 中的密钥启用服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息,请参阅使用服务器端加密保护数据

如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。

警告

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 Amazon 托管密钥。如果您使用 Amazon 托管密钥设置加密,则日志将以不可读的格式传送。

当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 Amazon 托管密钥。当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (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,请指定将日志传送到此存储桶的账户 ID 列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

发送到 Kinesis Data Firehose 的日志

用户权限

要启用向 Kinesis Data Firehose 发送日志,您必须使用以下权限登录。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:PutDeliverySource", "logs:GetDeliverySource", "logs:DeleteDeliverySource", "logs:DescribeDeliverySources", "logs:PutDeliveryDestination", "logs:GetDeliveryDestination", "logs:DeleteDeliveryDestination", "logs:DescribeDeliveryDestinations", "logs:CreateDelivery", "logs:GetDelivery", "logs:DeleteDelivery", "logs:DescribeDeliveries", "logs:PutDeliveryDestinationPolicy", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliveryDestinationPolicy" ], "Resource": [ "arn:aws:logs:region:account-id:delivery-source:*", "arn:aws:logs:region:account-id:delivery:*", "arn:aws:logs:region:account-id:delivery-destination:*" ] }, { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUpdatesToResourcePolicyFH", "Effect": "Allow", "Action": [ "firehose:TagDeliveryStream", "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:firehose:region:account-id:deliverystream/delivery-stream-name" ] } ] }] }

用于资源权限的 IAM 角色

由于 Kinesis Data Firehose 不使用资源 Amazon 策略,因此在设置要发送到 Kinesis Data Firehose 的日志时会使用 IAM 角色。 Amazon 创建名AWSServiceRoleForLogDelivery为的服务相关角色。此服务相关角色包括以下权限。

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

此服务相关角色授予标签设置为的所有 Kinesis Data Firehose 交付流的权限LogDeliveryEnabledtrue Amazon 在设置日志记录时,将此标签提供给目标传送流。

此服务相关角色还具有允许 delivery.logs.amazonaws.com 服务委托人来代入所需服务相关角色的信任策略。该信任策略如下所示:

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

防止跨服务混淆座席

混淆座席问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 Amazon,跨服务模仿可能会导致混乱的副手问题。一个服务(调用服务)调用另一项服务(被调用服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况, Amazon 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务主体有权限访问账户中的资源。

我们建议在资源策略中使用aws:SourceArnaws:SourceAccount全局条件上下文密钥来限制 CloudWatch 日志和 Amazon S3 向生成日志的服务授予的权限。如果使用两个全局条件上下文键,在同一策略语句中使用时,aws:SourceAccount 值和 aws:SourceArn 值中的账户必须使用相同的账户 ID。

aws:SourceArn 的值必须是生成日志的传输源的 ARN。

防范混淆代理问题最有效的方法是使用 aws:SourceArn 全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN,或者正在指定多个资源,请针对 ARN 未知部分使用带有通配符 (*) 的 aws:SourceArn 全局上下文条件键。

本页前几节中的策略显示了如何使用 aws:SourceArnaws:SourceAccount 全局条件上下文密钥,以避免混淆代理人问题出现。

CloudWatch 记录 Amazon 托管策略的更新

查看自该服务开始跟踪 CloudWatch 日志 Amazon 托管策略更改以来这些更新的详细信息。要获得有关此页面更改的自动提醒,请订阅 “ CloudWatch 日志文档历史记录” 页面上的 RSS feed。

更改 描述 日期

AWSServiceRoleForLogDelivery 服务相关角色策略-更新现有策略

CloudWatch 日志更改了与AWSServiceRoleForLogDelivery服务相关角色关联的 IAM 策略中的权限。更改内容如下:

  • firehose:ResourceTag/LogDeliveryEnabled": "true" 条件键已更改为 aws:ResourceTag/LogDeliveryEnabled": "true"

2021 年 7 月 15 日

CloudWatch 日志已开始跟踪更改

CloudWatch 日志开始跟踪其 Amazon 托管策略的更改。

2021 年 6 月 10 日