本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为以下各项配置 AWS KMS 密钥策略 CloudTrail
您可以通过三种方式创建: AWS KMS key
-
控制 CloudTrail 台
-
AWS 管理控制台
-
的 AWS CLI
注意
如果您在 CloudTrail 控制台中创建 KMS 密钥,则会为您 CloudTrail 添加所需的 KMS 密钥策略。您无需手动添加策略声明。请参阅 在 CloudTrail 控制台中创建的默认 KMS 密钥策略。
如果您在 AWS 管理或中创建 KMS 密钥 AWS CLI,则必须在密钥中添加策略部分,以便可以将其与一起使用 CloudTrail。该策略必须允许 CloudTrail 使用密钥来加密您的日志文件和事件数据存储,并允许您指定的用户读取未加密形式的日志文件。
请参阅以下资源:
-
要使用创建 KMS 密钥 AWS CLI,请参阅创建密钥。
-
要编辑的 KMS 密钥策略 CloudTrail,请参阅AWS Key Management Service 开发人员指南中的编辑密钥策略。
-
有关 CloudTrail 使用方式的技术细节 AWS KMS,请参阅如何 AWS CloudTrail 使用 AWS KMS。
与一起使用必填的 KMS 密钥策略部分 CloudTrail
如果您使用 AWS 管理控制台或创建了 KMS 密钥 AWS CLI,则必须至少在 KMS 密钥策略中添加以下语句才能使用 CloudTrail。
跟踪所需的 KMS 密钥策略元素
-
启用 CloudTrail 日志加密权限。请参阅 授予加密权限。
-
启用 CloudTrail 日志解密权限。请参阅 授予解密权限。如果您通过 S3 存储桶密钥使用现有 S3 存储桶,则需要
kms:Decrypt
权限才能创建或更新启用了 SSE-KMS 加密的跟踪。 -
启用 CloudTrail 该选项可描述 KMS 密钥属性。请参阅 启用 CloudTrail 以描述 KMS 密钥属性。
作为安全最佳实践,请将 aws:SourceArn
条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥aws:SourceArn
有助于确保仅 CloudTrail 将 KMS 密钥用于特定的一个或多个跟踪。的值始终aws:SourceArn
是使用 KMS 密钥的跟踪 ARN(或跟踪数组 ARNs)。确保将 aws:SourceArn
条件密钥添加到现有跟踪记录的 KMS 密钥策略。
也支持 aws:SourceAccount
条件密钥,但不推荐使用。aws:SourceAccount
的值是跟踪记录拥有者的账户 ID,或用于企业跟踪记录的管理账户 ID。
重要
向 KMS 密钥策略添加新部分时,不要更改策略中任何已存在的部分。
如果在跟踪上启用了加密,并且禁用了 KMS 密钥,或者 KMS 密钥策略配置不正确 CloudTrail,则 CloudTrail 无法传送日志。
事件数据存储所需的 KMS 密钥策略元素
-
启用 CloudTrail 日志加密权限。请参阅 授予加密权限。
-
启用 CloudTrail 日志解密权限。请参阅 授予解密权限。
-
授予用户和角色使用 KMS 密钥对事件数据存储数据进行加密和解密的权限。
在您创建事件数据存储并使用 KMS 密钥对其进行加密时,或者针对使用 KMS 密钥加密的事件数据存储运行查询时,您应该拥有对 KMS 密钥的写入权限。KMS 密钥策略必须具有访问权限 CloudTrail,并且 KMS 密钥应可供对事件数据存储进行操作(例如查询)的用户管理。
-
启用 CloudTrail 该选项可描述 KMS 密钥属性。请参阅 启用 CloudTrail 以描述 KMS 密钥属性。
在适用于事件数据存储的 KMS 密钥策略中,不支持 aws:SourceArn
和 aws:SourceAccount
条件密钥。
重要
向 KMS 密钥策略添加新部分时,不要更改策略中任何已存在的部分。
如果在事件数据存储上启用了加密,并且禁用或删除了 KMS 密钥,或者 KMS 密钥策略配置不正确 CloudTrail,则 CloudTrail无法将事件传送到您的事件数据存储。
授予加密权限
例 CloudTrail 允许代表特定账户加密日志
CloudTrail 需要明确的权限才能使用 KMS 密钥代表特定账户加密日志。要指定账户,请将以下必填语句添加到您的 KMS 密钥策略中 account-id
region
,并trailName
用适合您的配置的值替换、和。您可以 IDs 向该EncryptionContext
部分添加其他账户,使这些账户 CloudTrail 能够使用您的 KMS 密钥加密日志文件。
作为安全最佳实践,请将 aws:SourceArn
条件密钥添加到适用于跟踪的 KMS 密钥策略。IAM 全局条件密钥aws:SourceArn
有助于确保仅 CloudTrail 将 KMS 密钥用于特定的一个或多个跟踪。
{ "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:
region
:account-id
:trail/trail-name
" }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:account-id
:trail/*" } } }
用于加密 CloudTrail Lake 事件数据存储日志的 KMS 密钥的策略不能使用条件密钥aws:SourceArn
或aws:SourceAccount
。以下是适用于事件数据存储的 KMS 密钥策略的示例。
{ "Sid": "Allow CloudTrail to encrypt event data store", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" }
以下示例策略声明说明了另一个账户如何使用您的 KMS 密钥加密 CloudTrail 日志。
场景
-
您的 KMS 密钥位于账户
111111111111
中。 -
您和账户都
222222222222
将对日志进行加密。
在该策略中,您将一个或多个使用您的密钥加密的账户添加到 CloudTrailEncryptionContext。这仅限 CloudTrail 于使用您的密钥加密您指定的账户的日志。当您向账户根用户授予加密日志的222222222222
权限时,它会将加密必要权限的权限委托给该账户中的其他用户。账户管理员只需更改与这些 IAM 用户关联的策略,即可实现此目的。
作为安全最佳实践,请将 aws:SourceArn
条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥aws:SourceArn
有助于确保仅对指定的跟踪 CloudTrail 使用 KMS 密钥。但事件数据存储的 KMS 密钥政策并不支持此条件。
KMS 密钥策略语句:
{ "Sid": "Enable CloudTrail encrypt permissions", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:
111111111111
:trail/*", "arn:aws:cloudtrail:*:222222222222
:trail/*" ] }, "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region
:account-id
:trail/trail-name
" } } }
有关编辑用于的 KMS 密钥策略的更多信息 CloudTrail,请参阅《 AWS Key Management Service 开发人员指南》中的编辑密钥策略。
授予解密权限
在将 KMS 密钥添加到 CloudTrail 配置中之前,请务必向所有需要解密权限的用户授予解密权限。拥有加密权限但没有解密权限的用户无法读取加密日志。如果您通过 S3 存储桶密钥使用现有 S3 存储桶,则需要 kms:Decrypt
权限才能创建或更新启用了 SSE-KMS 加密的跟踪。
启用 CloudTrail 日志解密权限
必须为使用您的密钥的用户授予读取 CloudTrail 已加密的日志文件的显式权限。为使用户能够读取加密日志,请向您的 KMS 密钥政策添加下面的必需语句(修改 Principal
部分,从而为您希望能够利用您的 KMS 密钥执行解密操作的每个主体添加一行)。
{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account-id
:user/username
" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }
以下是允许 CloudTrail 服务主体解密跟踪日志所需的示例策略。
{ "Sid": "Allow CloudTrail to decrypt a trail", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*" }
与 La CloudTrail ke 事件数据存储一起使用的 KMS 密钥的解密策略类似于以下内容。 ARNs 指定为值的用户或角色Principal
需要解密权限才能创建或更新事件数据存储、运行查询或获取查询结果。
{ "Sid": "Enable user key permissions for event data stores" "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
account-id
:user/username
" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
以下是允许 CloudTrail 服务主体解密事件数据存储日志所需的示例策略。
{ "Sid": "Allow CloudTrail to decrypt an event data store", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:Decrypt", "Resource": "*" }
允许您账户中的用户使用您的 KMS 密钥解密跟踪日志
示例
此策略语句演示如何允许您账户中的用户或角色使用您的密钥读取您账户的 S3 存储桶中的加密日志。
例 场景
-
您的 KMS 密钥、S3 存储桶以及 IAM 用户 Bob 均位于账户
中。111111111111
-
您授予 IAM 用户 Bob 解密 S3 存储桶中 CloudTrail 日志的权限。
在密钥策略中,您可以为 IAM 用户 Bob 启用 CloudTrail 日志解密权限。
KMS 密钥策略语句:
{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111111111111
:user/Bob" }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:region
:account-id
:key/key-id
", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }
主题
允许其他账户中的用户使用您的 KMS 密钥解密跟踪日志
您可以允许其他账户中的用户使用您的 KMS 密钥解密跟踪日志,而非事件数据存储日志。需要对密钥策略执行的更改取决于 S3 存储桶位于您的账户还是其他账户中。
允许其他账户中的存储桶用户解密日志
示例
此策略声明演示如何让其他账户中的 IAM 用户或角色使用您的密钥读取其他账户的 S3 存储桶中的加密日志。
场景
-
您的 KMS 密钥位于账户
中。111111111111
-
IAM 用户 Alice 和 S3 存储桶均位于账户
中。222222222222
在这种情况下,您 CloudTrail 授予解密账户下日志的权限
,并授予 Alice 的 IAM 用户策略使用账户中的密钥222222222222
的权限。KeyA
111111111111
KMS 密钥策略语句:
{ "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::
222222222222
:root" ] }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:region
:account-id
:key/key-id
", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }
Alice 的 IAM 用户策略声明:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-west-2:
111111111111
:key/KeyA
" } ] }
允许其他账户中的用户解密您的桶中的跟踪日志
例
此策略演示其他账户如何使用您的密钥读取您的 S3 存储桶中的加密日志。
例 场景
-
您的 KMS 密钥和 S3 存储桶均位于账户
中。111111111111
-
从您的存储桶读取日志的用户位于账户
中。222222222222
要启用此场景,您需要为账户中的 IAM 角色CloudTrailReadRole启用解密权限,然后向其他账户授予代入该角色的权限。
KMS 密钥策略语句:
{ "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::11111111111:role/CloudTrailReadRole" ] }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:
region
:account-id
:key/key-id
", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }
CloudTrailReadRole信托实体政策声明:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Allow CloudTrail access", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
222222222222
:root" }, "Action": "sts:AssumeRole" } ] }
有关编辑用于的 KMS 密钥策略的信息 CloudTrail,请参阅《AWS Key Management Service 开发人员指南》中的编辑密钥策略。
启用 CloudTrail 以描述 KMS 密钥属性
CloudTrail 需要能够描述 KMS 密钥的属性。要启用此功能,请将下面的必需语句原样添加到您的 KMS 密钥策略中。除了您指定的其他权限之外,此语句不授予 CloudTrail 任何权限。
作为安全最佳实践,请将 aws:SourceArn
条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥aws:SourceArn
有助于确保仅 CloudTrail 将 KMS 密钥用于特定的一个或多个跟踪。
{ "Sid": "Allow CloudTrail access", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:DescribeKey", "Resource": "arn:aws:kms:
region
:account-id
:key/key-id
", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region
:account-id
:trail/trail-name
" } } }
有关编辑 KMS 密钥策略的更多信息,请参阅 AWS Key Management Service 开发人员指南中的编辑密钥策略。