

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

# 为以下各项配置 AWS KMS 密钥策略 CloudTrail
<a name="create-kms-key-policy-for-cloudtrail"></a>

您可以通过三种方式创建： AWS KMS key 
+ 控制 CloudTrail 台
+  AWS 管理控制台
+ 的 AWS CLI

**注意**  
如果您在 CloudTrail 控制台中创建 KMS 密钥，则会为您 CloudTrail 添加所需的 KMS 密钥策略。您无需手动添加策略声明。请参阅[在 CloudTrail 控制台中创建的默认 KMS 密钥策略](default-kms-key-policy.md)。

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

请参阅以下资源：
+ 要使用创建 KMS 密钥 AWS CLI，请参阅[创建密](https://docs.aws.amazon.com/cli/latest/reference/kms/create-key.html)钥。
+ 要编辑的 KMS 密钥策略 CloudTrail，请参阅*AWS Key Management Service 开发人员指南*中的[编辑密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。
+ 有关 CloudTrail 使用方式的技术细节 AWS KMS，请参阅[如何 AWS CloudTrail 使用 AWS KMS](how-kms-works-with-cloudtrail.md)。

**Topics**
+ [

## 与一起使用必填的 KMS 密钥策略部分 CloudTrail
](#create-kms-key-policy-for-cloudtrail-policy-sections)
+ [

## 授予跟踪的加密权限
](#create-kms-key-policy-for-cloudtrail-encrypt)
+ [

## 授予事件数据存储的加密权限
](#create-kms-key-policy-for-cloudtrail-encrypt-eds)
+ [

## 授予跟踪的解密权限
](#create-kms-key-policy-for-cloudtrail-decrypt)
+ [

## 授予事件数据存储的解密权限
](#create-kms-key-policy-for-cloudtrail-decrypt-eds)
+ [

## 启用 CloudTrail 以描述 KMS 密钥属性
](#create-kms-key-policy-for-cloudtrail-describe)
+ [

# 在 CloudTrail 控制台中创建的默认 KMS 密钥策略
](default-kms-key-policy.md)

## 与一起使用必填的 KMS 密钥策略部分 CloudTrail
<a name="create-kms-key-policy-for-cloudtrail-policy-sections"></a>

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

**Topics**
+ [

### 跟踪所需的 KMS 密钥策略元素
](#required-kms-key-policy-trails)
+ [

### 事件数据存储所需的 KMS 密钥策略元素
](#required-kms-key-policy-eventdatastores)

### 跟踪所需的 KMS 密钥策略元素
<a name="required-kms-key-policy-trails"></a>

1. 授予加密 CloudTrail 日志和摘要文件的权限。有关更多信息，请参阅 [授予跟踪的加密权限](#create-kms-key-policy-for-cloudtrail-encrypt)。

1. 授予解密 CloudTrail 日志和摘要文件的权限。有关更多信息，请参阅 [授予跟踪的解密权限](#create-kms-key-policy-for-cloudtrail-decrypt)。如果您通过 [S3 存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)使用现有 S3 存储桶，则需要 `kms:Decrypt` 权限才能创建或更新启用了 SSE-KMS 加密的跟踪。

1. 启用 CloudTrail 该选项可描述 KMS 密钥属性。有关更多信息，请参阅 [启用 CloudTrail 以描述 KMS 密钥属性](#create-kms-key-policy-for-cloudtrail-describe)。

作为安全最佳实践，请将 `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 密钥策略元素
<a name="required-kms-key-policy-eventdatastores"></a>

1. 授予加密 CloudTrail Lake 事件数据存储的权限。有关更多信息，请参阅 [授予事件数据存储的加密权限](#create-kms-key-policy-for-cloudtrail-encrypt-eds)。

1. 授予解密 CloudTrail Lake 事件数据存储的权限。有关更多信息，请参阅 [授予事件数据存储的解密权限](#create-kms-key-policy-for-cloudtrail-decrypt-eds)。

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

1. 启用 CloudTrail 该选项可描述 KMS 密钥属性。有关更多信息，请参阅 [启用 CloudTrail 以描述 KMS 密钥属性](#create-kms-key-policy-for-cloudtrail-describe)。

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

**重要**  
向 KMS 密钥策略添加新部分时，不要更改策略中任何已存在的部分。  
如果在事件数据存储上启用了加密，并且禁用或删除了 KMS 密钥，或者 KMS 密钥策略配置不正确 CloudTrail，则 CloudTrail无法将事件传送到您的事件数据存储。

## 授予跟踪的加密权限
<a name="create-kms-key-policy-for-cloudtrail-encrypt"></a>

**Example CloudTrail 允许代表特定账户加密日志文件和摘要文件**  
CloudTrail 需要明确的权限才能代表特定账户使用 KMS 密钥加密日志文件和摘要文件。要指定账户，请将以下必填语句添加到您的 KMS 密钥策略中 *account-id**region*，并*trailName*用适合您的配置的值替换、和。您可以 IDs 向该`EncryptionContext`部分添加其他账户，使这些账户 CloudTrail 能够使用您的 KMS 密钥加密日志文件和摘要文件。  
作为安全最佳实践，请将 `aws:SourceArn` 条件密钥添加到适用于跟踪的 KMS 密钥策略。IAM 全局条件密钥`aws:SourceArn`有助于确保仅 CloudTrail 将 KMS 密钥用于特定的一个或多个跟踪。

```
{
   "Sid": "AllowCloudTrailEncryptLogs",
   "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/*"
         }
    }
}
```

**Example**  
以下示例策略声明说明了另一个账户如何使用您的 KMS 密钥加密 CloudTrail 日志文件和摘要文件。

**场景**
+ 您的 KMS 密钥位于账户 *111111111111* 中。
+ 您和账户都*222222222222*将对日志进行加密。

在该策略中，您将一个或多个使用您的密钥加密的账户添加到 CloudTrail**EncryptionContext**。这仅限 CloudTrail 于使用您的密钥加密您指定的账户的日志文件和摘要文件。当您向账户根用户*222222222222*授予加密日志文件和摘要文件的权限时，它会将加密必要权限的权限委托给该账户中的其他用户。账户管理员只需更改与这些 IAM 用户关联的策略，即可实现此目的。

作为安全最佳实践，请将 `aws:SourceArn` 条件密钥添加到 KMS 密钥策略。IAM 全局条件密钥`aws:SourceArn`有助于确保仅对指定的跟踪 CloudTrail 使用 KMS 密钥。但事件数据存储的 KMS 密钥政策并不支持此条件。

KMS 密钥策略语句：

```
{
  "Sid": "EnableCloudTrailEncryptPermissions",
  "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 开发人员指南》中的[编辑密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

## 授予事件数据存储的加密权限
<a name="create-kms-key-policy-for-cloudtrail-encrypt-eds"></a>

用于加密 La CloudTrail ke 事件数据存储的 KMS 密钥的策略不能使用条件密钥`aws:SourceArn`或`aws:SourceAccount`。以下是适用于事件数据存储的 KMS 密钥策略的示例。

```
{
    "Sid": "AllowCloudTrailEncryptEds",
    "Effect": "Allow",
    "Principal": {
        "Service": "cloudtrail.amazonaws.com"
     },
     "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
      ],
      "Resource": "*"
}
```

## 授予跟踪的解密权限
<a name="create-kms-key-policy-for-cloudtrail-decrypt"></a>

在将 KMS 密钥添加到 CloudTrail 配置中之前，请务必向所有需要解密权限的用户授予解密权限。拥有加密权限但没有解密权限的用户无法读取加密日志。如果您通过 [S3 存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)使用现有 S3 存储桶，则需要 `kms:Decrypt` 权限才能创建或更新启用了 SSE-KMS 加密的跟踪。

**启用 CloudTrail 日志解密权限**  
必须为使用您的密钥的用户授予读取 CloudTrail 已加密的日志文件的显式权限。为使用户能够读取加密日志，请向您的 KMS 密钥政策添加下面的必需语句（修改 `Principal` 部分，从而为您希望能够利用您的 KMS 密钥执行解密操作的每个主体添加一行）。

```
{
  "Sid": "EnableCloudTrailLogDecryptPermissions",
  "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": "AllowCloudTrailDecryptTrail",
      "Effect": "Allow",
      "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
      "Action": "kms:Decrypt",
      "Resource": "*"
}
```

### 允许您账户中的用户使用您的 KMS 密钥解密跟踪日志
<a name="create-kms-key-policy-for-cloudtrail-decrypt-your-account"></a>

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

**Example 场景**  
+ 您的 KMS 密钥、S3 存储桶以及 IAM 用户 Bob 均位于账户 `111111111111` 中。
+ 您授予 IAM 用户 Bob 解密 S3 存储桶中 CloudTrail 日志的权限。

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

KMS 密钥策略语句：

```
{
  "Sid": "EnableCloudTrailLogDecryptPermissions",
  "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"
    }
  }
}
```

**Topics**

### 允许其他账户中的用户使用您的 KMS 密钥解密跟踪日志
<a name="create-kms-key-policy-for-cloudtrail-decrypt-other-accounts"></a>

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

#### 允许其他账户中的存储桶用户解密日志
<a name="create-kms-key-policy-for-cloudtrail-decrypt-different-bucket"></a>

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

**场景**
+ 您的 KMS 密钥位于账户 `111111111111` 中。
+ IAM 用户 Alice 和 S3 存储桶均位于账户 `222222222222` 中。

在这种情况下，您 CloudTrail 授予解密账户下日志的权限`222222222222`，并授予 Alice 的 IAM 用户策略使用账户中的密钥`KeyA`的权限。`111111111111`

KMS 密钥策略语句：

```
{
  "Sid": "EnableEncryptedCloudTrailLogReadAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::222222222222:root"
    ]
  },
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:region:111111111111:key/key-id",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

Alice 的 IAM 用户策略声明：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:us-west-2:111111111111:key/KeyA"
    }
  ]
}
```

------

#### 允许其他账户中的用户解密您的桶中的跟踪日志
<a name="create-kms-key-policy-for-cloudtrail-decrypt-same-bucket"></a>

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

**Example 场景**  
+ 您的 KMS 密钥和 S3 存储桶均位于账户 `111111111111` 中。
+ 从您的存储桶读取日志的用户位于账户 `222222222222` 中。

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

KMS 密钥策略语句：

```
{
  "Sid": "EnableEncryptedCloudTrailLogReadAccess",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::111111111111:role/CloudTrailReadRole"
    ]
  },
  "Action": "kms:Decrypt",
  "Resource": "arn:aws:kms:region:account-id:key/key-id",
  "Condition": {
    "Null": {
      "kms:EncryptionContext:aws:cloudtrail:arn": "false"
    }
  }
}
```

**CloudTrailReadRole**信托实体政策声明：

------
#### [ JSON ]

****  

```
{
 "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 开发人员指南*》中的[编辑密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

## 授予事件数据存储的解密权限
<a name="create-kms-key-policy-for-cloudtrail-decrypt-eds"></a>

与 La CloudTrail ke 事件数据存储一起使用的 KMS 密钥的解密策略类似于以下内容。 ARNs 指定为值的用户或角色`Principal`需要解密权限才能创建或更新事件数据存储、运行查询或获取查询结果。

```
{
      "Sid": "EnableUserKeyPermissionsEds"
      "Effect": "Allow",
      "Principal": {
          "AWS": "arn:aws:iam::account-id:user/username"
      },
      "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "*"
  }
```

以下是允许 CloudTrail服务主体解密事件数据存储所需的示例策略。

```
{
      "Sid": "AllowCloudTrailDecryptEds",
      "Effect": "Allow",
      "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
      "Action": "kms:Decrypt",
      "Resource": "*"
}
```

## 启用 CloudTrail 以描述 KMS 密钥属性
<a name="create-kms-key-policy-for-cloudtrail-describe"></a>

CloudTrail 需要能够描述 KMS 密钥的属性。要启用此功能，请将下面的必需语句原样添加到您的 KMS 密钥策略中。除了您指定的其他权限之外，此语句不授予 CloudTrail 任何权限。

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

```
{
  "Sid": "AllowCloudTrailAccess",
  "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 开发人员指南*中的[编辑密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-editing)。

# 在 CloudTrail 控制台中创建的默认 KMS 密钥策略
<a name="default-kms-key-policy"></a>

如果您在 CloudTrail 控制台 AWS KMS key 中创建，则会自动为您创建以下策略。该策略允许以下权限：
+ 允许 KMS 密钥的 AWS 账户 （根）权限。
+  CloudTrail 允许对 KMS 密钥下的日志文件和摘要文件进行加密，并描述 KMS 密钥。
+ 允许指定账户中的所有用户解密日志文件和摘要文件。
+ 允许指定账户中的所有用户为 KMS 密钥创建 KMS 别名。
+ 为创建跟踪的账户的账户 ID 启用跨账户日志解密。

**Topics**
+ [

## 用于跟踪的默认 KMS 密钥策略
](#default-kms-key-policy-trail)
+ [

## CloudTrail Lake 事件数据存储的默认 KMS 密钥策略
](#default-kms-key-policy-eds)

## 用于跟踪的默认 KMS 密钥策略
<a name="default-kms-key-policy-trail"></a>

以下是为您在跟踪中使用的创建的默认策略。 AWS KMS key 

**注意**  
该策略包含一条语句，允许使用 KMS 密钥跨账户解密日志文件和摘要文件。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Key policy created by CloudTrail",
    "Statement": [
        {
            "Sid": "Enable IAM user permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::111111111111:user/username"
                ]
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow CloudTrail to encrypt logs",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
             },
            "Action": "kms:GenerateDataKey*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceArn": "arn:aws:cloudtrail:us-east-1:111111111111:trail/trail-name"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        },
        {
            "Sid": "Allow CloudTrail to describe key",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
             },
            "Action": "kms:DescribeKey",
            "Resource": "*"
        },
        {
            "Sid": "Allow principals in the account to decrypt log files",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
             },
            "Action": [
                "kms:Decrypt",
                "kms:ReEncryptFrom"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:CallerAccount": "111111111111"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        },
        {
            "Sid": "Enable cross account log decryption",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "kms:Decrypt",
                "kms:ReEncryptFrom"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "kms:CallerAccount": "111111111111"
                },
                "StringLike": {
                    "kms:EncryptionContext:aws:cloudtrail:arn": "arn:aws:cloudtrail:*:111111111111:trail/*"
                }
            }
        }
    ]
}
```

------

## CloudTrail Lake 事件数据存储的默认 KMS 密钥策略
<a name="default-kms-key-policy-eds"></a>

以下是为您在 La CloudTrail k AWS KMS key e 中的事件数据存储中使用的默认策略。

------
#### [ JSON ]

****  

```
{
      "Version":"2012-10-17",		 	 	 
      "Id": "Key policy created by CloudTrail",
      "Statement": [
        {
          "Sid": "The key created by CloudTrail to encrypt event data stores. Created ${new Date().toUTCString()}",
          "Effect": "Allow",
          "Principal": {
            "Service": "cloudtrail.amazonaws.com"
          },
          "Action": [
            "kms:GenerateDataKey",
            "kms:Decrypt"
          ],
          "Resource": "*"
        },
        {
          "Sid": "Enable IAM user permissions",
          "Effect": "Allow",
          "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
          },
          "Action": "kms:*",
          "Resource": "*"
        },
        {
          "Sid": "Enable user to have permissions",
          "Effect": "Allow",
          "Principal": {
               "AWS" : "arn:aws:sts::111111111111:assumed-role/example-role-name"
        },
          "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
           ],
          "Resource": "*"
        }
      ]
    }
```

------