为 CloudTrail 配置 Amazon KMS 密钥策略 - Amazon CloudTrail
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 CloudTrail 配置 Amazon KMS 密钥策略

您可以通过三种方式创建 Amazon KMS key:

  • CloudTrail 控制台

  • IAM 控制台

  • 这些区域有: Amazon CLI

注意

如果您在 CloudTrail 控制台中创建 KMS 密钥,则 CloudTrail 会为您添加必需的 KMS 密钥策略。您无需手动添加策略声明。请参阅 在 CloudTrail 控制台中创建的默认 KMS 密钥策略

如果您在 IAM 控制台或 Amazon CLI 中创建 KMS 密钥,您必须为密钥添加策略部分,以便将它用于 CloudTrail。该策略必须允许 CloudTrail 使用此密钥加密您的日志文件,并允许您指定的用户读取未加密形式的日志文件。

请参阅以下资源:

  • 要使用 Amazon CLI 创建 KMS 密钥,请参阅 create-key

  • 要编辑 CloudTrail 的 KMS 密钥策略,请参阅 Amazon Key Management Service 开发人员指南中的编辑密钥策略

  • 有关 CloudTrail 如何使用 Amazon KMS 的技术细节,请参阅 Amazon Key Management Service开发人员指南中的 Amazon CloudTrail 如何使用 Amazon KMS

用于 CloudTrail 时必需的 KMS 密钥策略部分

如果您使用 IAM 控制台或 Amazon CLI 创建 KMS 密钥,则必须为 KMS 密钥策略添加以下语句,才能使其可用于 CloudTrail。

  1. 启用 CloudTrail 日志加密权限。请参阅 授予加密权限

  2. 启用 CloudTrail 日志解密权限。请参阅 授予解密权限。如果您通过 S3 存储桶密钥使用现有 S3 存储桶,则需要 kms:Decrypt 权限才能创建或更新启用了 SSE-KMS 加密的跟踪。

  3. 启用 CloudTrail 以描述 KMS 密钥属性。请参阅 启用 CloudTrail 以描述 KMS 密钥属性

作为安全最佳实践,请将 aws:SourceArn 条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥 aws:SourceArn 有助于确保 CloudTrail 仅将 KMS 密钥用于特定跟踪记录或多个跟踪记录。aws:SourceArn 的值始终是使用 KMS 密钥的跟踪记录 ARN(或跟踪记录 ARN 数组)。确保将 aws:SourceArn 条件密钥添加到现有跟踪记录的 KMS 密钥策略。

也支持 aws:SourceAccount 条件密钥,但不推荐使用。aws:SourceAccount 的值是跟踪记录拥有者的账户 ID,或用于企业跟踪记录的管理账户 ID。

重要

向 KMS 密钥策略添加新部分时,不要更改策略中任何已存在的部分。

如果对跟踪记录启用了加密但禁用了 KMS 密钥,或未针对 CloudTrail 正确地配置 KMS 密钥策略,则 CloudTrail 无法交付日志。

授予加密权限

例 允许 CloudTrail 代表特定账户加密日志

CloudTrail 需要显式的权限才能代表特定的账户使用 KMS 密钥加密日志。要指定账户,请将下面的必需声明添加到 KMS 密钥策略,并将 myBucketNameaccount-idregiontrailName 替换为与您的配置相应的值。您可以向 EncryptionContext 部分添加额外的账户 ID,以使这些账户能够使用 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": "arn:aws:kms:Region:account_ID:key/key_ID", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:account-id:trail/*" ] }, "StringEquals": { "aws:SourceArn": "arn:aws:cloudtrail:region:account-id:trail/trailName" } } }

下面的示例策略语句演示了其他账户如何使用您的 KMS 密钥加密 CloudTrail 日志。

场景

  • 您的 KMS 密钥位于账户 111111111111 中。

  • 您和账户 222222222222 都将加密日志。

在此策略中,您向 CloudTrail EncryptionContext 添加了一个或多个将使用您的密钥执行加密操作的账户。这会限制 CloudTrail 只能对您指定的账户使用您的密钥来加密日志。如果向账户 222222222222 的根账户授予加密日志的权限,将会委派该账户的管理员通过更改账户 222222222222 中其他用户的 IAM 用户策略,根据需要为这些用户分配加密权限。

作为安全最佳实践,请将 aws:SourceArn 条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥 aws:SourceArn 有助于确保 CloudTrail 仅将 KMS 密钥用于特定跟踪记录或多个跟踪记录。

KMS 密钥策略语句:

{ "Sid": "Enable CloudTrail Encrypt Permissions", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "arn:aws:kms:Region:account_ID:key/key_ID", "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/trailName" } } }

有关编辑 KMS 密钥策略以便与 CloudTrail 一起使用的更多信息,请参阅《Amazon 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": "arn:aws:s3:::myBucketName", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

允许您账户中的用户使用您的 KMS 密钥执行解密操作

示例

此策略声明演示如何允许您账户中的 IAM 用户或角色使用您的密钥读取您账户的 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 解密账户 222222222222 下的日志的权限,且授予 Alice 的 IAM 用户使用您的 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": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222222222222:root" }, "Action": "sts:AssumeRole" } ] }

    有关编辑 KMS 密钥策略以便与 CloudTrail 一起使用的步骤,请参阅 Amazon 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/trailName" } } }

    有关编辑 KMS 密钥策略的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的编辑密钥策略