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

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

为以下各项配置 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 Key Management Service 开发人员指南》 AWS KMS中的 “AWS CloudTrail 使用方式”。

与一起使用的必填KMS关键策略部分 CloudTrail

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

跟踪必需的KMS关键策略要素

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

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

  3. 启用 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关键策略元素

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

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

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

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

  4. 启用 CloudTrail 该选项可描述KMS关键属性。请参阅 启用 CloudTrail 此选项可描述KMS关键属性

事件数据存储的密KMS钥策略不支持aws:SourceArnaws:SourceAccount条件键。

重要

在向KMS密钥策略中添加新部分时,请勿更改策略中的任何现有部分。

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

授予加密权限

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

CloudTrail 需要明确的权限才能代表特定账户使用KMS密钥加密日志。要指定账户,请在KMS密钥策略中添加以下必填语句并替换 account-id, region,以及 trailName 使用适合您的配置的值。您可以IDs向该EncryptionContext部分添加其他帐户,以允许这些帐户使用 CloudTrail 您的KMS密钥加密日志文件。

作为安全最佳实践,请在跟踪的密KMS钥策略中添加aws:SourceArn条件密钥。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:SourceArnaws: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权限才能创建或更新启用KMS加密的SSE跟踪。

启用 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 权限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 中。

    要启用此场景,您需要为账户CloudTrailReadRole中的IAM角色启用解密权限,然后向其他账户授予代入该角色的权限。

    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 开发人员指南》中的编辑密钥策略