本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
启用从 Amazon 服务进行日志记录
虽然许多服务仅将日志发布到 Logs,但有些 Amazon 服务可以将 CloudWatch 日志直接发布到 Amazon Simple Storage Service 或 Amazon Data Firehose。如果您对日志的主要需求是在其中一种服务中存储或处理日志,那么您可以轻松地让生成日志的服务将它们直接发送到 Amazon S3 或 Firehose,而无需额外设置。
即使日志直接发布到 Amazon S3 或 Firehose,仍会产生费用。有关更多信息,请参阅 Amazon P ricing 中 “日志” 选项卡上的 “销售日志” CloudWatch 。
一些 Amazon 服务使用通用基础设施来发送日志。要启用从这些服务进行日志记录,您必须以具有特定权限的用户身份登录。此外,您必须向授予权限 Amazon 才能发送日志。
对于需要这些权限的服务,所需的权限有两个版本。表中将需要这些额外权限的服务标为支持的 [V1 权限]和支持的 [V2 权限]。有关这些必需权限的信息,请参阅表后的部分。
日志源 | 日志类型 | CloudWatch Logs | Amazon S3 | Firehose |
---|---|---|---|---|
Vended logs(已出售日志) | ||||
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | ||
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Amazon CodeWhisperer 事件日志 |
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | ||
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Amazon Entity Resolution 数据匹配服务 日志 | Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Vended logs(已出售日志) |
支持 |
支持 |
支持 |
|
Custom logs(自定义日志) |
支持 |
|||
亚马逊 SES 日志 | Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | ||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | ||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | ||
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) |
支持 |
|||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) | 支持的 [V1 权限] | |||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) |
支持 |
支持的 [V1 权限] | 支持的 [V1 权限] | |
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
Vended logs(已出售日志) | 支持的 [V1 权限] | 支持的 [V1 权限] |
支持 |
|
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
需要额外权限 [V1] 的日志记录
一些 Amazon 服务使用通用基础设施将其日志发送到 Logs、Amazon S3 或 Firehose。 CloudWatch 要启用下表中列出的 Amazon 服务,将其日志发送到前述目标,您必须以具有特定权限的用户身份登录。
此外,必须向授予权限才能发送日志。 Amazon Amazon 可以在设置日志时自动创建这些权限,您也可以在设置日志记录之前自行创建这些权限。对于跨账户传输,您必须自己手动创建权限策略。
如果您或您企业中的某个人在首次设置日志发送时选择让 Amazon 自动设置必要的权限和资源策略,那么设置日志发送的用户必须具有一定的权限,如本节后面所述。或者,您可以自行创建资源策略,这样设置日志发送的用户就不需要那么多权限。
下表汇总了适用本节中信息的日志类型及日志目标。
以下各部分提供了每个目标的更多详细信息。
发送到 Log CloudWatch s 的日志
重要
当您将以下列表中的日志类型设置为发送到 Lo CloudWatch gs 时, Amazon 会创建或更改与接收日志的日志组关联的资源策略(如需要)。继续阅读本节,查看详细信息。
当前一部分的表中列出的日志类型发送到 Log CloudWatch s 时,本部分适用:
用户权限
若要能够设置首次将这些类型日志中的任一种 CloudWatch 日志发送到 Logs,您必须登录具有以下权限的账户。
-
logs:CreateLogDelivery
-
logs:PutResourcePolicy
-
logs:DescribeResourcePolicies
-
logs:DescribeLogGroups
注意
当您指定
logs:DescribeLogGroups
、logs:DescribeResourcePolicies
或logs:PutResourcePolicy
权限时,请确保将其Resource
行的 ARN 设置为使用*
通配符,而不是仅指定单个日志组名称。例如,"Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*"
如果其中任何一种类型的日志已被发送到 Log CloudWatch s 中的日志组,要设置将其中另一种日志也发送到同一日志组,您只需要logs:CreateLogDelivery
权限。
日志组和资源策略
接收日志的日志组必须具有包含特定权限的资源策略。如果日志组当前没有资源策略,而且设置日志组的用户对日志组具有logs:PutResourcePolicy
logs: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:PutResourcePolicy
、logs:DescribeResourcePolicies
和 logs:DescribeLogGroups
权限,则该语句将附加到日志组的资源策略中。
发送到 Amazon S3 的日志
当您将日志设置为发送到 Amazon S3 时, Amazon 会创建或更改与接收日志的 S3 存储桶关联的资源策略(如需要)。
直接发布到 Amazon S3 的日志将发布到您指定的现有存储桶。每 5 分钟将在指定的存储桶中创建一个或多个日志文件。
当您首次将日志发送到 Amazon S3 存储桶时,发送日志的服务会记录存储桶的拥有者,以确保日志仅发送到属于该账户的存储桶。因此,要更改 Amazon S3 存储桶拥有者,您必须在原始服务中重新创建或更新日志订阅。
注意
CloudFront 使用与将公开发布的日志发送到 S3 的其他服务不同的权限模型。有关更多信息,请参阅配置标准日志记录和访问日志文件所需的权限。
此外,如果您对 CloudFront 访问日志和另一个日志源使用相同的 S3 存储桶,则对存储桶启用 ACL CloudFront 也会向使用此存储桶的所有其他日志源授予权限。
重要
如果您要将日志发送到 Amazon S3 存储桶,并且存储桶策略包含 NotAction
或 NotPrincipal
元素,则自动向存储桶添加日志传输权限和创建日志订阅将会失败。为了成功创建日志订阅,您需要手动将日志传输权限添加到存储桶策略,然后创建日志订阅。有关更多信息,请参阅本节中的说明。
如果存储桶使用客户托管式密 Amazon KMS 钥进行服务器端加密,则您还必须为客户托管式密钥添加密钥政策。有关更多信息,请参阅 Amazon S3。
如果目标存储桶启用了 SSE-KMS 并启用了存储桶密钥,则附加的客户托管 KMS 密钥策略将不再按预期适用于所有请求。有关更多信息,请参阅使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本。
如果您使用的是带有客户托管 Amazon KMS 密钥的销售日志和 S3 加密,则在配置存储桶时必须使用完全限定的密 Amazon KMS 钥 ARN 而不是密钥 ID。有关更多信息,请参阅 put-bucket-encryption。
用户权限
若要能够设置首次将这些类型日志中的任一种日志发送到 Amazon S3,您必须登录具有以下权限的账户。
logs:CreateLogDelivery
S3:GetBucketPolicy
S3:PutBucketPolicy
如果其中任何一种类型的日志已被发送到 Amazon S3 存储桶,要设置将其中另一种日志也发送到同一存储桶,您只需要 logs:CreateLogDelivery
权限。
S3 存储桶资源策略
接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,而且设置日志记录的用户对存储桶具有S3:GetBucketPolicy
和S3: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:::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
,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。 ARNs source-region
:source-account-id
:*
如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy
和 S3: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) 的服务器端加密来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息,请参阅使用服务器端加密保护数据。
如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。
警告
如果选择 SSE-KMS,则必须使用客户托管式密钥,因为此场景不支持使用 Amazon 托管式密钥。如果您使用 Amazon 托管密钥设置加密,则会以不可读取的格式提供日志。
当您使用客户托管式 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管式密钥的Amazon Resource Name (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。
如果选择 SSE-KMS,则必须使用客户托管式密钥,因为此场景不支持使用 Amazon 托管式密钥。当您使用客户托管式 Amazon 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
,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。 ARNs source-region
:source-account-id
:*
日志发送至 Firehose
当前一部分的表中列出的日志类型发送到 Firehose 时,本部分适用:
用户权限
若要能够设置首次将这些类型日志中的任一种日志发送到 Firehose,您必须登录具有以下权限的账户。
logs:CreateLogDelivery
firehose:TagDeliveryStream
iam:CreateServiceLinkedRole
如果其中任何一种日志已被发送到 Firehose,要设置将其中另一种日志也发送到 Firehose,您只需要 logs:CreateLogDelivery
和 firehose:TagDeliveryStream
权限。
用于权限的 IAM 角色
由于 Firehose 不使用资源策略, Amazon 将这些日志设置为发送到 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" } ] }
此服务相关角色会为标签设置为的所有 Firehose 传输流授予权限。LogDeliveryEnabled
true
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 或 Firehose。
工作日志传输由三个元素组成:
DeliverySource
,这是代表实际发送日志的资源的逻辑对象。DeliveryDestination
,这是代表实际传输目标的逻辑对象。Delivery
,这连接传输源与传输目标
要在支持的 Amazon 服务和目标之间配置日志传输,您必须执行以下操作:
使用创建交付来源PutDeliverySource。
使用创建配送目的地PutDeliveryDestination。
如果要跨账户传输日志,则必须在目标账户 PutDeliveryDestinationPolicy中使用为目标分配 IAM 策略。此策略授权创建从账户 A 中的传输源到账户 B 中的传输目标的传输。对于跨账户传输,您必须手动创建权限策略。
通过使用将一个传输源和一个传输目标精确配对来创建传输 CreateDelivery。
以下各节详细介绍了在登录期间使用 V2 流程将日志传输到每种类型目标时需要具备的权限。这些权限可以授予您登录时使用的 IAM 角色。
重要
删除日志生成资源后,您有责任删除日志传输资源。为此,请按照以下步骤操作。
Delivery
使用DeleteDelivery操作删除。DeliverySource
使用DeleteDeliverySource操作删除。如果与您刚刚删除的
DeliveryDestination
DeliverySource
关联仅用于此特定用途DeliverySource
,则可以使用DeleteDeliveryDestinations操作将其删除。
发送到 Log CloudWatch s 的日志
用户权限
要启用将日志发送到 CloudWatch Logs,您必须使用以下权限登录。
{ "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:PutResourcePolicy
logs: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
:*"] } } } ] }
发送到 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:GetBucketPolicy
和S3:PutBucketPolicy
权限,那么当您开始将日志发送到 Amazon S3 时, Amazon 会自动为其创建以下策略。
{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "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
,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。 ARNs source-region
:source-account-id
:*
如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy
和 S3: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) 的服务器端加密来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息,请参阅使用服务器端加密保护数据。
如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。
警告
如果选择 SSE-KMS,则必须使用客户托管式密钥,因为此场景不支持使用 Amazon 托管式密钥。如果您使用 Amazon 托管密钥设置加密,则会以不可读取的格式提供日志。
当您使用客户托管式 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管式密钥的Amazon Resource Name (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。
如果选择 SSE-KMS,则必须使用客户托管式密钥,因为此场景不支持使用 Amazon 托管式密钥。当您使用客户托管式 Amazon 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
,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。 ARNs 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 不使用资源策略, Amazon 将这些日志设置为发送到 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" } ] }
此服务相关角色会为标签设置为的所有 Firehose 传输流授予权限。LogDeliveryEnabled
true
Amazon 在设置日志记录时,将此标签提供给目标传送流。
此服务相关角色还具有允许 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::: knowledge-base/ 从其账户中的 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 使用其 bedrock 知识库创建传输源:
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 存储桶中。对于此示例,账户 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 进行加密,请确保 Amazon 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" } ] }
此策略将以 destination-policy-s3.json
形式保存在账户 B 的计算机中。要附加此资源,账户 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" } ] }
此策略将以 destination-policy-fh.json
形式保存在账户 B 的计算机中。要附加此资源,账户 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
防止跨服务混淆座席
混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 Amazon,跨服务模拟可能会导致混淆代理问题。一个服务(呼叫服务)调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况, Amazon 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务主体有权限访问账户中的资源。
我们建议在资源策略中使用aws:SourceArn
aws:SourceAccount
aws:SourceOrgID
、、和aws:SourceOrgPaths
全局条件上下文密钥来限制 CloudWatch Logs 向该资源提供的其他服务的权限。使用 aws:SourceArn
来仅将一个资源与跨服务访问相关联。使用 aws:SourceAccount
来让该账户中的任何资源与跨服务使用相关联。使用 aws:SourceOrgID
来允许某组织内的任何账户中的任何资源与跨服务使用相关联。使用 aws:SourceOrgPaths
来将 Amazon Organizations 路径内账户中的任何资源与跨服务使用相关联。有关使用和了解路径的更多信息,请参阅了解 Amazon Organizations 实体路径。
防范混淆代理问题最有效的方法是使用 aws:SourceArn
全局条件上下文键和资源的完整 ARN。如果不知道资源的完整 ARN,或者正在指定多个资源,请针对 ARN 未知部分使用带有通配符字符 (*
) 的 aws:SourceArn
全局上下文条件键。例如 arn:aws:
。servicename
:*:123456789012
:*
如果 aws:SourceArn
值不包含账户 ID,例如 Amazon S3 桶 ARN,您必须使用 aws:SourceAccount
和 aws:SourceArn
来限制权限。
要防范大规模混淆代理问题,请在基于资源的策略中将 aws:SourceOrgID
或 aws:SourceOrgPaths
全局条件上下文键与资源的组织 ID 或组织路径一起使用。包含 aws:SourceOrgID
或 aws:SourceOrgPaths
键的策略将自动包含正确的账户,并且当您在组织中添加、删除或移动账户时,无需手动更新策略。
本页前几节中的策略显示了如何使用 aws:SourceArn
和 aws:SourceAccount
全局条件上下文密钥,以避免混淆代理人问题出现。
CloudWatch 记录 Amazon 托管策略的更新
查看有关 L CloudWatch ogs 的 Amazon 托管策略更新的详细信息(从该服务开始跟踪这些更改开始)。有关此页面更改的自动提示,请订阅 Logs 文档历史 CloudWatch 记录页面上的 RSS 源。
更改 | 描述 | 日期 |
---|---|---|
AWSServiceRoleForLogDelivery 服务相关角色策略 — 对现有策略的更新 |
CloudWatch Logs 更改了与AWSServiceRoleForLogDelivery服务相关角色关联的 IAM 策略中的权限。更改内容如下:
|
2021 年 7 月 15 日 |
CloudWatch 开启了跟踪更改 |
CloudWatch Logs 开始跟踪其 Amazon 托管策略的更改。 |
2021 年 6 月 10 日 |