AWS CloudTrail
用户指南 (版本 1.0)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 CloudTrail 配置 AWS KMS 密钥策略

您可以通过三种方式创建客户主密钥 (CMK):

  • CloudTrail 控制台

  • IAM 控制台

  • 这些区域有: AWS CLI

注意

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

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

请参阅以下资源:

  • 要使用 AWS CLI 创建 CMK,请参阅 create-key

  • 要编辑 CloudTrail 的 CMK 策略,请参阅 AWS Key Management Service Developer Guide 中的编辑密钥策略

  • 有关 CloudTrail 如何使用 AWS KMS 的技术详情,请参阅 AWS Key Management Service Developer Guide 中的 AWS CloudTrail 如何使用 AWS KMS

用于 CloudTrail 时所必需的 CMK 策略部分

如果您使用 IAM 控制台或 AWS CLI 创建 CMK,则必须为 CMK 策略添加至少三条语句以使其可用于 CloudTrail。您不需要手动为使用 CloudTrail 控制台创建的 CMK 添加语句。

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

  2. 启用 CloudTrail 日志解密权限。请参阅授予解密权限

  3. 使 CloudTrail 能够描述 CMK 属性。请参阅使 CloudTrail 能够描述 CMK 属性

注意

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

警告

如果对跟踪启用了加密但禁用了 CMK 或未针对 CloudTrail 正确地配置 CMK 策略,则在纠正 CMK 问题前,CloudTrail 不会交付日志。

授予加密权限

例 让 CloudTrail 能够代表特定的账户加密日志

CloudTrail 需要显式的权限才能代表特定的账户使用 CMK 加密日志。要指定账户,请向 CMK 策略添加下面的必要声明,根据需要修改 aws-account-id。您可以向 EncryptionContext 部分添加额外的账户 ID,以使这些账户能够使用 CloudTrail 借助您的 CMK 加密日志文件。

{ "Sid": "Allow CloudTrail to encrypt logs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com.cn" }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws-cn:cloudtrail:*:aws-account-id:trail/*" ] } } }

下面的示例策略声明演示了其他账户如何使用您的 CMK 加密 CloudTrail 日志。

场景

  • 您的 CMK 位于账户 111111111111 中。

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

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

CMK 策略声明:

{ "Sid": "Enable CloudTrail Encrypt Permissions", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com.cn" }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws-cn:cloudtrail:*:111111111111:trail/*", "arn:aws-cn:cloudtrail:*:222222222222:trail/*" ] } } }

有关编辑 CMK 策略以用于 CloudTrail 的步骤,请参阅 AWS Key Management Service Developer Guide 中的编辑密钥策略

授予解密权限

在将 CMK 添加到您的 CloudTrail 配置之前,应向所有需要的用户提供解密权限。拥有加密权限但没有解密权限的用户将无法读取加密日志。

启用 CloudTrail 日志解密权限

必须为使用您的密钥的用户授予读取 CloudTrail 已加密的日志文件的显式权限。为使用户能够读取加密日志,请向您的 CMK 策略添加下面的必需声明(修改 Principal 部分,从而为您需要其能够利用您的 CMK 执行解密操作的每个委托人(角色或用户)添加一行)。

{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::aws-account-id:user/username" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

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

示例

此策略声明演示如何允许您账户中的 IAM 用户或角色使用您的密钥读取您账户的 S3 存储桶中的加密日志。

例 场景

  • 您的 CMK、S3 存储桶及 IAM 用户 Bob 均位于账户 111111111111 中。

  • 您授予 IAM 用户 Bob 解密此 S3 存储桶中的 CloudTrail 日志的权限。

在密钥策略中,您为 IAM 用户 Bob 启用了 CloudTrail 日志解密权限。

CMK 策略声明:

{ "Sid": "Enable CloudTrail log decrypt permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::111111111111:user/Bob" }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

主题

    允许其他账户中的用户使用您的 CMK 执行解密操作

    您可以允许其他账户中的用户使用您的 CMK 解密日志。需要对密钥策略执行的更改取决于 S3 存储桶位于您的账户还是其他账户中。

    允许其他账户中的存储桶用户解密日志

    示例

    此策略声明演示如何让其他账户中的 IAM 用户或角色使用您的密钥读取其他账户的 S3 存储桶中的加密日志。

    场景

    • 您的 CMK 位于账户 111111111111 中。

    • IAM 用户 Alice 和 S3 存储桶均位于账户 222222222222 中。

    在这种情况下,您需要赋予 CloudTrail 解密账户 222222222222 下的日志的权限,且赋予 Alice 的 IAM 用户使用您的密钥 KeyA(位于账户 111111111111 中)的策略权限。

    CMK 策略声明:

    { "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws-cn:iam::222222222222:root" ] }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

    Alice 的 IAM 用户策略声明:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws-cn:kms:us-east-1:111111111111:key/keyA" } ] }

    允许其他账户中的用户解密您的存储桶中的日志

    此策略演示其他账户如何使用您的密钥读取您的 S3 存储桶中的加密日志。

    例 场景

    • 您的 CMK 和 S3 存储桶均位于账户 111111111111 中。

    • 将从您的存储桶读取日志的用户位于账户 222222222222 中。

    要实现这一场景,您需要为您账户中的 IAM 角色 CloudTrailReadRole 启用解密权限,然后赋予对方账户担任此角色的权限。

    CMK 策略声明:

    { "Sid": "Enable encrypted CloudTrail log read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws-cn:iam::11111111111:role/CloudTrailReadRole" ] }, "Action": "kms:Decrypt", "Resource": "*", "Condition": { "Null": { "kms:EncryptionContext:aws:cloudtrail:arn": "false" } } }

    CloudTrailReadRole 信任实体策略声明:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws-cn:iam::222222222222:root" }, "Action": "sts:AssumeRole" } ] }

    有关编辑 CMK 策略以用于 CloudTrail 的步骤,请参阅 AWS Key Management Service Developer Guide 中的编辑密钥策略

    使 CloudTrail 能够描述 CMK 属性

    CloudTrail 需要描述 CMK 属性的能力。要启用此功能,请将下面的必需声明原样添加到您的 CMK 策略中。此声明不会授予 CloudTrail 任何超出您指定的其他权限的权限。

    { "Sid": "Allow CloudTrail access", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com.cn" }, "Action": "kms:DescribeKey", "Resource": "*" }

    有关编辑 CMK 策略的更多信息,请参阅 AWS Key Management Service Developer Guide 中的编辑密钥策略