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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为以下各项配置 Amazon KMS 密钥策略 CloudTrail

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

  • 控制 CloudTrail 台

  • Amazon 管理控制台

  • 的 Amazon CLI

注意

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

如果您在 Amazon 管理或中创建 KMS 密钥 Amazon CLI,则必须在密钥中添加策略部分,以便可以将其与一起使用 CloudTrail。该策略必须 CloudTrail 允许使用密钥加密您的日志文件和事件数据存储,并允许您指定的用户读取未加密形式的日志文件。

请参阅以下资源:

  • 要使用创建 KMS 密钥 Amazon CLI,请参阅创建密钥。

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

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

与一起使用必填的 KMS 密钥策略部分 CloudTrail

如果您使用 Amazon 管理控制台或创建了 KMS 密钥 Amazon CLI,则必须至少在 KMS 密钥策略中添加以下语句才能使用 CloudTrail。

跟踪所需的 KMS 密钥策略元素

  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 密钥,或者 KMS 密钥策略配置不正确 CloudTrail,则 CloudTrail 无法传送日志。

事件数据存储所需的 KMS 密钥策略元素

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

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

  3. 授予用户和角色使用 KMS 密钥对事件数据存储数据进行加密和解密的权限。

    在您创建事件数据存储并使用 KMS 密钥对其进行加密时,或者针对使用 KMS 密钥加密的事件数据存储运行查询时,您应该拥有对 KMS 密钥的写入权限。KMS 密钥策略必须具有访问权限 CloudTrail,并且 KMS 密钥应可供对事件数据存储进行操作(例如查询)的用户管理。

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

在适用于事件数据存储的 KMS 密钥策略中,不支持 aws:SourceArnaws:SourceAccount 条件密钥。

重要

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

如果在事件数据存储上启用了加密,并且禁用或删除了 KMS 密钥,或者 KMS 密钥策略配置不正确 CloudTrail,则 CloudTrail无法将事件传送到您的事件数据存储。

授予加密权限

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

CloudTrail 需要明确的权限才能代表特定账户使用 KMS 密钥加密日志。要指定账户,请将以下所需语句添加到您的 KMS 密钥策略,并将 account-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/trail-name" } } }

以下示例策略声明说明了另一个账户如何使用您的 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,请参阅 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": "*", "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": "*" }

允许您账户中的用户使用您的 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 授予解密账户下日志的权限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": "Allow CloudTrail access", "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/trail-name" } } }

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