本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
启用来自 Amazon 服务的日志记录
虽然许多服务仅向日志发布日 CloudWatch 志,但有些 Amazon 服务可以将日志直接发布到亚马逊简单存储服务或 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(已出售日志) | 支持的 [V1 权限] | |||
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(已出售日志) |
支持 |
|||
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 权限] | |
Custom logs(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
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(自定义日志) |
支持 |
|||
Custom logs(自定义日志) |
支持 |
|||
Vended logs(已出售日志) |
支持 |
|||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Vended logs(已出售日志) | ||||
Amazon Simple Email Service 日志 |
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 权限] | 支持 |
|
Amazon WorkMail 日志 |
Vended logs(已出售日志) | 支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
需要额外权限 [V1] 的日志记录
有些 Amazon 服务使用通用基础设施将其日志发送到日 CloudWatch 志、Amazon S3 或 Firehose。要启用下表中列出的 Amazon 服务,将其日志发送到前述目标,您必须以具有特定权限的用户身份登录。
此外,必须向 Amazon 授予权限才能发送日志。 Amazon 可以在设置日志时自动创建这些权限,也可以在设置日志之前先自己创建这些权限。对于跨账户传输,您必须自己手动创建权限策略。
如果您选择在您或您的组织中的某人首次设置日志发送时 Amazon 自动设置必要的权限和资源策略,则设置发送日志的用户必须具有一定的权限,如本节后面所述。或者,您可以自行创建资源策略,这样设置日志发送的用户就不需要那么多权限。
下表汇总了适用本节中信息的日志类型及日志目标。
以下各部分提供了每个目标的更多详细信息。
发送到日志的 CloudWatch 日志
重要
在将以下列表中的日志类型设置为发送到 Lo CloudWatch gs 时,如果需要,可以 Amazon 创建或更改与接收日志的日志组关联的资源策略。继续阅读本节,查看详细信息。
当将上一节表中列出的日志类型发送到 Log CloudWatch s 时,本节适用:
用户权限
为了能够设置首次向 Logs 发送任何此类 CloudWatch 日志,您必须使用具有以下权限的账户登录。
logs:CreateLogDelivery
logs:PutResourcePolicy
logs:DescribeResourcePolicies
logs:DescribeLogGroups
注意
指定
logs:DescribeLogGroups
logs:DescribeResourcePolicies
、或logs:PutResourcePolicy
权限时,请务必将其ARNResource
行设置为使用*
通配符,而不是仅指定单个日志组名称。例如,"Resource": "arn:aws:logs:us-east-1:111122223333:log-group:*"
如果这些类型的日志中的任何一种已发送到日志中的某个 CloudWatch 日志组,则要设置向同一日志组发送另一类此类日志,您只需要该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
权限,则该语句将附加到日志组的资源策略中。
日志组资源策略大小限制注意事项
这些服务必须在资源策略中列出要向其发送日志的每个日志组,并且 CloudWatch 日志资源策略限制为 5120 个字符。将日志发送到大量日志组的服务可能会遇到此限制。
为了缓解这种情况, CloudWatch 日志会监控发送日志的服务所使用的资源策略的大小,当它检测到策略接近 5120 个字符的大小限制时, CloudWatch 日志会自动在该服务的资源策略/aws/vendedlogs/*
中启用。之后,您可以开始将名称以 /aws/vendedlogs/
开头的日志组作为这些服务所发送的日志的目标。
发送到 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。
用户权限
若要能够设置首次将这些类型日志中的任一种日志发送到 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
,为指定要将日志传输到此存储桶的账户IDS列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-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) 或使用存储在 (-) 中的密钥启用服务器端加密,从而保护 Amazon S3 存储桶中的数据。 Amazon KMS Amazon Key Management Service SSE 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
,请指定要将日志传送到此存储桶的账户IDS列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-region
:source-account-id
:*
日志发送至 Firehose
当前一部分的表中列出的日志类型发送到 Firehose 时,本部分适用:
用户权限
若要能够设置首次将这些类型日志中的任一种日志发送到 Firehose,您必须登录具有以下权限的账户。
logs:CreateLogDelivery
firehose:TagDeliveryStream
iam:CreateServiceLinkedRole
如果其中任何一种日志已被发送到 Firehose,要设置将其中另一种日志也发送到 Firehose,您只需要 logs:CreateLogDelivery
和 firehose:TagDeliveryStream
权限。
IAM用于权限的角色
由于 Firehose 不使用资源策略,因此在设置要发送到 Firehose 的日志时会 Amazon 使用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操作将其删除。
发送到日志的 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: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
:*"] } } } ] }
日志组资源策略大小限制注意事项
这些服务必须在资源策略中列出要向其发送日志的每个日志组,并且 CloudWatch 日志资源策略限制为 5120 个字符。将日志发送到大量日志组的服务可能会遇到此限制。
为了缓解这种情况, CloudWatch 日志会监控发送日志的服务所使用的资源策略的大小,当它检测到策略接近 5120 个字符的大小限制时, CloudWatch 日志会自动在该服务的资源策略/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: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
: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
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-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) 或使用存储在 (-) 中的密钥启用服务器端加密,从而保护 Amazon S3 存储桶中的数据。 Amazon KMS Amazon Key Management Service SSE 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
,请指定要将日志传送到此存储桶的账户IDS列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-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 的日志时会 Amazon 使用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: a ARN ws: 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 想要使用带有 arnARN: 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内容,或者要指定多个资源,请使用带有通配符 (*
) 的aws:SourceArn
全局上下文条件键来表示未知部分。ARN例如,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 托管策略的更新
查看自该服务开始跟踪 CloudWatch 日志 Amazon 托管策略更改以来这些更新的详细信息。要获得有关此页面更改的自动提醒,请订阅 “ CloudWatch 日志文档历史记录” 页面上的订阅RSS源。
更改 | 描述 | 日期 |
---|---|---|
CloudWatch 日志更改了与关联的IAM策略中的权限 AWSServiceRoleForLogDelivery服务相关角色。更改内容如下:
|
2021 年 7 月 15 日 | |
CloudWatch 日志已开始跟踪更改 |
CloudWatch 日志开始跟踪其 Amazon 托管策略的更改。 |
2021 年 6 月 10 日 |