本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
启用来自 AWS 服务的日志记录
虽然许多服务仅向日志发布日 CloudWatch 志,但有些 AWS 服务可以将日志直接发布到亚马逊简单存储服务或 Amazon Data Firehose。如果您对日志的主要要求是在其中一项服务中进行存储或处理,则可以轻松地让生成日志的服务将它们直接发送到 Amazon S3 或 Firehose,而无需进行额外设置。
即使日志直接发布到 Amazon S3 或 Firehose,也需要付费。有关更多信息,请参阅 Amazon P ricing 中 “日志” 选项卡上的 “销售日志” CloudWatch 。
一些 AWS 服务使用通用的基础架构来发送日志。要启用从这些服务进行日志记录,您必须以具有特定权限的用户身份登录。此外,您必须 AWS 向授予权限才能发送日志。
对于需要这些权限的服务,所需的权限有两个版本。表中将需要这些额外权限的服务标为支持的 [V1 权限]和支持的 [V2 权限]。有关这些必需权限的信息,请参阅表后的部分。
日志类型 | CloudWatch Logs | Amazon S3 | Firehose |
---|---|---|---|
支持 |
|||
支持 |
|||
支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
支持的 [V1 权限] | |||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | ||
支持的 [V1 权限] | |||
支持 |
|||
支持 |
|||
Amazon CodeWhisperer 事件日志 |
支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
支持的 [V1 权限] | |||
支持 |
|||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | ||
支持 |
|||
支持 |
|||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持 |
|||
支持的 [V1 权限] | |||
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持的 [V1 权限] | |||
支持 |
|||
支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] | |
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持 |
|||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持的 [V1 权限] | 支持的 [V1 权限] | ||
支持的 [V1 权限] | 支持的 [V1 权限] | ||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | ||
支持的 [V1 权限] | |||
支持 |
|||
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持 |
|||
支持 |
|||
支持 |
|||
支持 |
|||
支持 |
|||
支持 |
|||
支持的 [V1 权限] | |||
支持 |
支持的 [V1 权限] | 支持的 [V1 权限] | |
支持的 [V1 权限] | 支持的 [V1 权限] | 支持的 [V1 权限] | |
支持的 [V1 权限] | 支持的 [V1 权限] | 支持 |
|
Amazon WorkMail 日志 |
支持的 [V2 权限] | 支持的 [V2 权限] | 支持的 [V2 权限] |
需要额外权限 [V1] 的日志记录
有些 AWS 服务使用通用基础设施将其日志发送到日 CloudWatch 志、Amazon S3 或 Firehose。要启用下表中列出的 AWS 服务,将其日志发送到前述目标,您必须以具有特定权限的用户身份登录。
此外,必须向 AWS 授予权限才能发送日志。 AWS 可以在设置日志时自动创建这些权限,也可以在设置日志之前先自己创建这些权限。对于跨账户交付,您必须自己手动创建权限策略。
如果您选择在您或您的组织中的某人首次设置日志发送时 AWS 自动设置必要的权限和资源策略,则设置发送日志的用户必须具有一定的权限,如本节后面所述。或者,您可以自行创建资源策略,这样设置日志发送的用户就不需要那么多权限。
下表汇总了适用本节中信息的日志类型及日志目标。
以下各部分提供了每个目标的更多详细信息。
发送到日志的 CloudWatch 日志
重要
在将以下列表中的日志类型设置为发送到 Lo CloudWatch gs 时,如果需要,可以 AWS 创建或更改与接收日志的日志组关联的资源策略。继续阅读本节,查看详细信息。
当将上一节表中列出的日志类型发送到 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 时, 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:PutResourcePolicy
、logs:DescribeResourcePolicies
和 logs:DescribeLogGroups
权限,则该语句将附加到日志组的资源策略中。
日志组资源策略大小限制注意事项
这些服务必须在资源策略中列出要向其发送日志的每个日志组,并且 CloudWatch 日志资源策略限制为 5120 个字符。向大量日志组发送日志的服务可能会遇到此限制。
为了缓解这种情况, CloudWatch Logs 会监控发送日志的服务所使用的资源策略的大小,当它检测到策略接近 5120 个字符的大小限制时, CloudWatch 日志会自动在该服务的资源策略/aws/vendedlogs/*
中启用。之后,您可以开始将名称以 /aws/vendedlogs/
开头的日志组作为这些服务所发送的日志的目标。
发送到 Amazon S3 的日志
将日志设置为发送到 Amazon S3 时,如果需要,可以 AWS 创建或更改与接收日志的 S3 存储桶关联的资源策略。
直接发布到 Amazon S3 的日志将发布到您指定的现有存储桶。每 5 分钟将在指定的存储桶中创建一个或多个日志文件。
当您首次将日志发送到 Amazon S3 存储桶时,发送日志的服务会记录存储桶的拥有者,以确保日志仅发送到属于该账户的存储桶。因此,要更改 Amazon S3 存储桶拥有者,您必须在原始服务中重新创建或更新日志订阅。
注意
CloudFront 使用的权限模型与其他向 S3 发送已售日志的服务不同。有关更多信息,请参阅配置标准日志记录和访问日志文件所需的权限。
此外,如果您对 CloudFront 访问日志使用相同的 S3 存储桶和另一个日志源,则在存储桶ACL上启用 CloudFront 也将授予使用此存储桶的所有其他日志源的权限。
用户权限
若要能够设置首次将这些类型日志中的任一种日志发送到 Amazon S3,您必须登录具有以下权限的账户。
logs:CreateLogDelivery
S3:GetBucketPolicy
S3:PutBucketPolicy
如果其中任何一种类型的日志已被发送到 Amazon S3 存储桶,要设置将其中另一种日志也发送到同一存储桶,您只需要 logs:CreateLogDelivery
权限。
S3 存储桶资源策略
接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicy
和S3: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:::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
,为指定要将日志传输到此存储桶的账户IDS列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-region
:source-account-id
:*
如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy
和 S3:PutBucketPolicy
权限,则该语句将附加到存储桶的资源策略中。
注意
在某些情况下, AWS 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 存储桶中的数据。 AWS KMS AWS Key Management Service SSE KMS有关更多信息,请参阅使用服务器端加密保护数据。
如果选择 SSE-S3,则无需进行其他配置。Amazon S3 处理加密密钥。
警告
如果选择 SSE-KMS,则必须使用客户托管密钥,因为此方案不支持使用 AWS 托管密钥。如果您使用 AWS 托管密钥设置加密,则日志将以不可读的格式传送。
当您使用客户托管 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。
如果选择 SSE-KMS,则必须使用客户托管密钥,因为此方案不支持使用 AWS 托管密钥。当您使用客户托管 AWS 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 的日志时会 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" } ] }
此服务相关角色授予标签设置为的所有 Firehose 传送流LogDeliveryEnabled
的权限。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 日志、Amazon S3 或 Firehose。
工作日志交付由三个元素组成:
A
DeliverySource
,它是一个逻辑对象,代表实际发送日志的资源。A
DeliveryDestination
,它是表示实际交付目标的逻辑对象。A
Delivery
,它将传送源与传送目标连接起来
要在支持的 AWS 服务和目标之间配置日志传输,必须执行以下操作:
使用创建交付来源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" ], "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" ], "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 时, 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 日志会自动在该服务的资源策略/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" ], "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" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyS3", "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::bucket-name" } ] }
接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,并且设置日志记录的用户拥有该存储桶的S3:GetBucketPolicy
和S3: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:::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
,为指定要将日志传输到此存储桶的账户IDS列表。对于aws:SourceArn
,在表单中指定生成日志的资源列表arn:aws:logs:
。ARNssource-region
:source-account-id
:*
如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy
和 S3:PutBucketPolicy
权限,则该语句将附加到存储桶的资源策略中。
注意
在某些情况下, AWS 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 存储桶中的数据。 AWS KMS AWS Key Management Service SSE KMS有关更多信息,请参阅使用服务器端加密保护数据。
如果选择 SSE-S3,则无需进行其他配置。Amazon S3 处理加密密钥。
警告
如果选择 SSE-KMS,则必须使用客户托管密钥,因为此方案不支持使用 AWS 托管密钥。如果您使用 AWS 托管密钥设置加密,则日志将以不可读的格式传送。
当您使用客户托管 AWS KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。
如果选择 SSE-KMS,则必须使用客户托管密钥,因为此方案不支持使用 AWS 托管密钥。当您使用客户托管 AWS 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" ], "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" ], "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" } ] }
此服务相关角色授予标签设置为的所有 Firehose 传送流LogDeliveryEnabled
的权限。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": [ "*" ] } ] }
防止跨服务混淆座席
混淆代理问题是一个安全性问题,即不具有操作执行权限的实体可能会迫使具有更高权限的实体执行该操作。在中 AWS,跨服务模仿可能会导致混乱的副手问题。一个服务(呼叫服务)调用另一项服务(所谓的服务)时,可能会发生跨服务模拟。可以操纵调用服务,使用其权限以在其他情况下该服务不应有访问权限的方式对另一个客户的资源进行操作。为防止这种情况, AWS 提供可帮助您保护所有服务的数据的工具,而这些服务中的服务主体有权限访问账户中的资源。
我们建议在资源策略中使用aws:SourceArn
aws:SourceAccount
aws:SourceOrgID
、、和aws:SourceOrgPaths
全局条件上下文密钥来限制 CloudWatch Logs 向该资源提供的其他服务的权限。使用 aws:SourceArn
来仅将一个资源与跨服务访问相关联。使用 aws:SourceAccount
来让该账户中的任何资源与跨服务使用相关联。使用 aws:SourceOrgID
来允许某组织内的任何账户中的任何资源与跨服务使用相关联。使用 aws:SourceOrgPaths
来将 AWS Organizations 路径内账户中的任何资源与跨服务使用相关联。有关使用和理解路径的更多信息,请参阅了解 AWS 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 记录 AWS 托管策略的更新
查看自该服务开始跟踪 CloudWatch 日志 AWS 托管策略更改以来这些更新的详细信息。要获得有关此页面更改的自动提醒,请订阅 “ CloudWatch 日志文档历史记录” 页面上的订阅RSS源。
更改 | 描述 | 日期 |
---|---|---|
CloudWatch 日志更改了与AWSServiceRoleForLogDelivery服务相关角色关联的IAM策略中的权限。更改内容如下:
|
2021 年 7 月 15 日 | |
CloudWatch 日志已开始跟踪更改 |
CloudWatch 日志开始跟踪其 AWS 托管策略的更改。 |
2021 年 6 月 10 日 |