

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

# 中的秘密加密和解密 AWS Secrets Manager
<a name="security-encryption"></a>

Secrets Manager 使用信封加密以及 AWS KMS [密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)和[数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)来保护每个密钥值。每当密钥中的密钥值更改时，Secrets Manager 都会从 AWS KMS 请求新数据密钥以为其提供保护。然后，用 KMS 密钥加密数据密钥，存储在密钥元数据中。要解密密密钥，Secrets Manager 首先使用中的 KMS 密钥对加密的数据密钥进行解密。 AWS KMS

Secrets Manager 不使用 KMS 直接对密钥值加密。相反，它使用 KMS 密钥来生成和加密 256 位高级加密标准 (AES) 对称[数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)，并使用数据密钥对密钥值加密。Secrets Manager 使用纯文本数据密钥对外部的密钥值进行加密 AWS KMS，然后将其从内存中删除。它将数据密钥的加密副本存储在密钥的元数据中。

**Topics**
+ [选择一把 AWS KMS 钥匙](#security-encryption-choose-key)
+ [什么是加密？](#secret-value-encrypted)
+ [加密和解密流程](#security-encryption-encrypt)
+ [KMS 密钥的权限](#security-encryption-authz)
+ [Secrets Manager 如何使用您的 KMS 密钥](#security-encryption-using-cmk)
+ [AWS 托管式密钥 (`aws/secretsmanager`) 的关键政策](#security-encryption-policies)
+ [Secrets Manager 加密上下文](#security-encryption-encryption-context)
+ [监控 Secrets Manager 的互动 AWS KMS](#security-encryption-logs)

## 选择一把 AWS KMS 钥匙
<a name="security-encryption-choose-key"></a>

创建密钥时，您可以选择 AWS 账户 和区域中的任何对称加密客户托管密钥，也可以使用 for Secrets Manager (`aws/secretsmanager`)。 AWS 托管式密钥 如果你选择但它还不存在 AWS 托管式密钥 `aws/secretsmanager`，则 Secrets Manager 会创建它并将其与密钥关联。可对您账户中的每个密钥使用相同的 KMS 密钥或不同的 KMS 密钥。您可能希望使用不同的 KMS 密钥为一组密钥设置密钥的自定义权限，或者如果您希望审计这些密钥的特定操作。Secrets Manager 仅支持[对称加密 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks)。如果您在[外部密钥存储](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html)中使用 KMS 密钥，则对 KMS 密钥的加密操作可能需要更长时间，而且可靠性和持久性会降低，因为请求必须在 AWS外部传输。

有关更改秘密的加密密钥的信息，请参阅 [更改密钥的加密 AWS Secrets Manager 密钥](manage_update-encryption-key.md)。

当您更改加密密钥时，Secrets Manager 会使用新密钥重新加密 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 版本。为了避免将您锁定在密钥之外，Secrets Manager 会使用以前的密钥加密所有现有版本。这意味着您可以使用以前的密钥或新密钥解密 `AWSCURRENT`、`AWSPENDING` 和 `AWSPREVIOUS` 版本。如果没有先前密钥的 `kms:Decrypt` 权限，则当您更改加密密钥时，Secrets Manager 无法解密密钥版本来重新加密它们。在这种情况下，现有版本不会被重新加密。

为了使只能通过新加密密钥解密 `AWSCURRENT`，请使用新密钥创建新版本的密钥。然后，为了能够解密 `AWSCURRENT` 密钥版本，您必须拥有新密钥的权限。

您可以拒绝访问权限， AWS 托管式密钥 `aws/secretsmanager`并要求使用客户托管密钥对机密进行加密。有关更多信息，请参阅 [示例：拒绝使用特定 AWS KMS 密钥来加密机密](auth-and-access_iam-policies.md#auth-and-access_examples_kmskey)。

要查找与密钥关联的 KMS 密钥，请在控制台中查看密钥或致电[ListSecrets](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ListSecrets.html)或[DescribeSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_DescribeSecret.html)。当密钥与 for Secrets Manager (`aws/secretsmanager`) 关联时，这些操作不会返回 KMS 密钥标识符。 AWS 托管式密钥 

## 什么是加密？
<a name="secret-value-encrypted"></a>

Secrets Manager 会加密密钥值，但不对以下项进行加密：
+ 密钥名称和描述
+ 轮换设置
+ 与密钥关联的 KMS 密钥 ARN
+ 任何附带的 AWS 标签 

## 加密和解密流程
<a name="security-encryption-encrypt"></a>

为了对密钥中的密钥值加密，Secrets Manager 使用以下过程。

1. Secrets Manager 使用密钥的 KMS 密钥的 ID 调用该 AWS KMS [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)操作，并请求提供 256 位 AES 对称密钥。 AWS KMS 返回一个纯文本数据密钥和使用 KMS 密钥加密的该数据密钥的副本。

1. Secrets Manager 使用纯文本数据密钥和高级加密标准 (AES) 算法对外部的密钥值进行加密。 AWS KMS然后，它将尽快从内存中删除明文密钥。

1. Secrets Manager 将加密的数据密钥存储在密钥的元数据中，使其可用于解密密钥值。但是，任何一个 Secrets Manager API 均不会返回加密的密钥或加密的数据密钥。

对已加密的密钥值解密：

1.  Secrets Manager 调用 AWS KMS [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)操作并传入加密的数据密钥。

1. AWS KMS 使用密钥的 KMS 密钥来解密数据密钥。它将返回明文数据密钥。

1. Secrets Manager 使用该明文数据密钥来解密密钥值。然后，它会尽快从内存中删除数据密钥。

## KMS 密钥的权限
<a name="security-encryption-authz"></a>

当 Secrets Manager 在加密操作中使用 KMS 密钥时，它会代表创建或更新密钥值的用户执行操作。您可以在 IAM policy 或密钥政策中提供这些权限。以下 Secrets Manager 操作需要 AWS KMS 权限。
+ [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html)
+ [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html)
+ [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)
+ [ReplicateSecretToRegions](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ReplicateSecretToRegions.html)

要允许 KMS 密钥仅用于源自 Secrets Manager 的请求，可以在权限策略中使用带有`secretsmanager.{{<Region>}}.amazonaws.com`值的 k [m ViaService s: 条件密钥](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service)。

您还可以在[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/services-secrets-manager.html#asm-encryption-context)中将密钥或值用作将 KMS 密钥用于加密操作的条件。例如，可在 IAM 或密钥策略文档中使用[字符串条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)，或在授权中使用[授权约束](https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html)。KMS 密钥授权传播可能需要长达五分钟的时间。有关更多信息，请参阅 [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)。

## Secrets Manager 如何使用您的 KMS 密钥
<a name="security-encryption-using-cmk"></a>

Secrets Manager 使用你的 KMS 密钥调用以下 AWS KMS 操作。

**GenerateDataKey**  
Secrets Manager 调用该 AWS KMS [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)操作是为了响应以下 Secrets Manager 操作。  
+ [CreateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_CreateSecret.html)— 如果新密钥包含密钥值，则 Secrets Manager 会请求新的数据密钥对其进行加密。
+ [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html)— Secrets Manager 请求新的数据密钥来加密指定的密钥值。
+ [ReplicateSecretToRegions](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ReplicateSecretToRegions.html)— 要加密复制的密钥，Secrets Manager 在副本区域中请求一个 KMS 密钥的数据密钥。
+ [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)— 如果您更改了密钥值或 KMS 密钥，Secrets Manager 会请求新的数据密钥来加密新的密钥值。
该[RotateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_RotateSecret.html)操作不会调用`GenerateDataKey`，因为它不会更改密钥值。但是，如果 `RotateSecret` 调用更改了秘密值的 Lambda 轮换函数，则其调用 `PutSecretValue` 操作时将触发 `GenerateDataKey` 请求。

**Decrypt**  
Secrets Manager 调用 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作来响应以下 Secrets Manager 操作。  
+ [GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)和 [BatchGetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_BatchGetSecretValue.html)— Secrets Manager 在将密钥值返回给调用者之前对其进行解密。要解密加密的密钥值，Secrets Manager 会调用 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作来解密密密钥中的加密数据密钥。然后，它使用明文数据密钥来对已加密密钥值解密。对于批处理命令，Secrets Manager 可以重复使用解密后的密钥，因此并非所有调用都会产生 `Decrypt` 请求。
+ [PutSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_PutSecretValue.html)和 [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)— 大多数 `PutSecretValue` `UpdateSecret` and 请求不会触发`Decrypt`操作。但是，当 `PutSecretValue` 或 `UpdateSecret` 请求尝试更改现有密钥版本中的密钥值时，Secrets Manager 将对现有密钥值解密并将其与请求中的密钥值比较，以确认两者是否相同。此操作可确保 Secrets Manager 操作为幂等操作。要解密加密的密钥值，Secrets Manager 会调用 AWS KMS [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作来解密密密钥中的加密数据密钥。然后，它使用明文数据密钥来对已加密密钥值解密。
+ [ReplicateSecretToRegions](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_ReplicateSecretToRegions.html)— Secrets Manager 首先解密主区域中的密钥值，然后在副本区域中使用 KMS 密钥重新加密密钥值。

**Encrypt**  
Secrets Manager 调用 [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 操作来响应以下 Secrets Manager 操作：  
+ [UpdateSecret](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_UpdateSecret.html)— 如果您更改 KMS 密钥，Secrets Manager 会使用新密钥重新加密保护`AWSCURRENT``AWSPREVIOUS`、和`AWSPENDING`机密版本的数据密钥。

**DescribeKey**  
当你在 Secrets Manager 控制台中创建或编辑密钥时，Secrets Manager 调用该[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作来确定是列出 KMS 密钥。

**验证对 KMS 密钥的访问**  
当您建立或更改与密钥关联的 KMS 密钥时，Secrets Manager 将用指定的 KMS 调用 `GenerateDataKey` 和 `Decrypt` 操作。这些调用确认调用方是否有权将该 KMS 密钥用于这些操作。Secrets Manager 将放弃这些操作的结果；它不在任何加密操作中使用这些结果。  
您可以识别这些验证调用，因为这些请求中 `SecretVersionId` 密钥[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/services-secrets-manager.html#asm-encryption-context)的值为 `RequestToValidateKeyAccess`。  
过去，Secrets Manager 验证调用不包含加密上下文。您可能会在较早的 AWS CloudTrail 日志中发现没有加密上下文的呼叫。

## AWS 托管式密钥 (`aws/secretsmanager`) 的关键政策
<a name="security-encryption-policies"></a>

仅当 Secrets Manager 代表用户发出请求时，for Secrets Manager (`aws/secretsmanager`) 的密钥策略才允许用户使用 KMS 密钥进行指定操作。 AWS 托管式密钥 密钥策略不允许任何用户直接使用 KMS 密钥。

此密钥策略与所有 [AWS 托管式密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) 策略类似，均由该服务来建立。您无法更改密钥策略，但可以随时查看。有关详细信息，请参阅[查看密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html)。

密钥策略中的策略语句具有以下影响：
+ 仅当 Secrets Manager 代表账户中的用户发出请求时，才允许这些用户使用 KMS 密钥执行加密操作。`kms:ViaService` 条件密钥可强制实施此限制。
+ 允许该 AWS 账户创建 IAM 策略，允许用户查看 KMS 密钥属性和撤消授权。
+ 尽管 Secrets Manager 不使用授权来获取 KMS 密钥的访问权限，但该策略还允许 Secrets Manager 代表用户[创建 KMS 密钥授权](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html)，并允许帐户[撤销任何允许 Secrets Manager 使用 KMS 密钥的授权](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html)。这些是政策文件的标准要素 AWS 托管式密钥.

以下是 Secrets Manager 示例 AWS 托管式密钥 的关键策略。

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

****  

```
{
  "Id": "auto-secretsmanager-2",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "*"
        ]
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:CreateGrant",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "111122223333",
          "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com"
        }
      }
    },
    {
      "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "*"
        ]
      },
      "Action": "kms:GenerateDataKey*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:CallerAccount": "111122223333"
        },
        "StringLike": {
          "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com"
        }
      }
    },
    {
      "Sid": "Allow direct access to key metadata to the account",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::{{111122223333}}:root"
        ]
      },
      "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:RevokeGrant"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Secrets Manager 加密上下文
<a name="security-encryption-encryption-context"></a>

[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)是一组包含任意非机密数据的键值对。当您在加密数据的请求中包含加密上下文时，会以加密 AWS KMS 方式将加密上下文绑定到加密数据。要解密数据，您必须传入相同的加密上下文。

在对的请求[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)和[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求中 AWS KMS，Secrets Manager 使用具有两个名称-值对的加密上下文，用于标识密钥及其版本，如以下示例所示。名称不会变化，但与其组合的加密上下文会因每个密钥值而异。

```
"encryptionContext": {
    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3",
    "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
}
```

您可以使用加密上下文在审计记录和日志（例如和 Amazon CloudWatch Logs）中识别这些加密操作，并作为策略和授权中的授权条件。[AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)

Secrets Manager 加密上下文包含两个名称–值对。
+ **SecretARN** – 第一个名称–值对标识密钥。键是 `SecretARN`。该值是密钥的 Amazon Resource Name (ARN)。

  ```
  "SecretARN": "{{ARN of an Secrets Manager secret}}"
  ```

  例如，如果密钥的 ARN 是 `arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3`，加密上下文将包括以下对。

  ```
  "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  ```
+ **SecretVersionId**— 第二个名称-值对标识密钥的版本。键是 `SecretVersionId`。该值为版本 ID。

  ```
  "SecretVersionId": "{{<version-id>}}"
  ```

  例如，如果密钥的版本 ID 是 `EXAMPLE1-90ab-cdef-fedc-ba987SECRET1`，加密上下文将包括以下对。

  ```
  "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
  ```

当您建立或更改密钥的 KMS 密钥时，Secrets Manager 会向发送[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)和[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求， AWS KMS 以验证调用者是否有权使用 KMS 密钥进行这些操作。它将放弃响应，并且不对密钥值使用这些响应。

在这些验证请求中，`SecretARN` 的值是密钥的实际 ARN，但 `SecretVersionId` 值为 `RequestToValidateKeyAccess`，如以下加密上下文示例中所示。此特殊值可帮助您在日志和审核跟踪中标识验证请求。

```
"encryptionContext": {
    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3",
    "SecretVersionId": "RequestToValidateKeyAccess"
}
```

**注意**  
在过去，Secrets Manager 验证请求不包含加密上下文。您可能会在较早的 AWS CloudTrail 日志中发现没有加密上下文的呼叫。

## 监控 Secrets Manager 的互动 AWS KMS
<a name="security-encryption-logs"></a>

您可以使用 AWS CloudTrail 和 Amazon CloudWatch Logs 来跟踪 Secrets Manager AWS KMS 代表您发送的请求。有关监测密钥使用的更多信息，请参阅 [监控 AWS Secrets Manager 机密](monitoring.md)。

**GenerateDataKey**  
当您在密钥中创建或更改密钥值时，Secrets Manager 会向发送一个*[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)*请求 AWS KMS ，为该密钥指定 KMS 密钥。  
记录 `GenerateDataKey` 操作的事件与以下示例事件类似。该请求由 `secretsmanager.amazonaws.com` 调用。参数包括密钥的 KMS 密钥的 Amazon Resource Name (ARN)、需要 256 位密钥的密钥说明符以及标识密钥和版本的[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。  

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2018-05-31T23:23:41Z"
            }
        },
        "invokedBy": "secretsmanager.amazonaws.com"
    },
    "eventTime": "2018-05-31T23:23:41Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "secretsmanager.amazonaws.com",
    "userAgent": "secretsmanager.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "keySpec": "AES_256",
        "encryptionContext": {
            "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3",
            "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
        }
    },
    "responseElements": null,
    "requestID": "a7d4dd6f-6529-11e8-9881-67744a270888",
    "eventID": "af7476b6-62d7-42c2-bc02-5ce86c21ed36",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333",
            "type": "AWS::KMS::Key"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

**Decrypt**  
当您获取或更改密钥的密钥值时，Secrets Manager 会向发送[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)请求 AWS KMS 以解密加密的数据密钥。对于批处理命令，Secrets Manager 可以重复使用解密后的密钥，因此并非所有调用都会产生 `Decrypt` 请求。  
记录 `Decrypt` 操作的事件与以下示例事件类似。用户是您 AWS 账户中访问表格的委托人。这些参数包括加密的表密钥（作为密文 blob）以及标识表和账户的[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)。 AWS AWS KMS 从密文中获取 KMS 密钥的 ID。  

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2018-05-31T23:36:09Z"
            }
        },
        "invokedBy": "secretsmanager.amazonaws.com"
    },
    "eventTime": "2018-05-31T23:36:09Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "secretsmanager.amazonaws.com",
    "userAgent": "secretsmanager.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3",
            "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"
        }
    },
    "responseElements": null,
    "requestID": "658c6a08-652b-11e8-a6d4-ffee2046048a",
    "eventID": "f333ec5c-7fc1-46b1-b985-cbda13719611",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333",
            "type": "AWS::KMS::Key"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

**Encrypt**  
当您更改与密钥关联的 KMS 密钥时，Secrets Manager 会向发送[加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)请求，要求使用新密钥重新加`AWSPENDING`密`AWSCURRENT``AWSPREVIOUS`、和密钥版本。 AWS KMS 当您将密钥复制到另一个区域时，Secrets Manager 还会向  AWS KMS 发送 [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 请求。  
记录 `Encrypt` 操作的事件与以下示例事件类似。用户是您 AWS 账户中访问表格的委托人。  

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "creationDate": "2023-06-09T18:11:34Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "secretsmanager.amazonaws.com"
    },
    "eventTime": "2023-06-09T18:11:34Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Encrypt",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "secretsmanager.amazonaws.com",
    "userAgent": "secretsmanager.amazonaws.com",
    "requestParameters": {
        "keyId": "arn:aws:kms:us-east-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc",
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT",
        "encryptionContext": {
            "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:ChangeKeyTest-5yKnKS",
            "SecretVersionId": "EXAMPLE1-5c55-4d7c-9277-1b79a5e8bc50"
        }
    },
    "responseElements": null,
    "requestID": "129bd54c-1975-4c00-9b03-f79f90e61d60",
    "eventID": "f7d9ff39-15ab-47d8-b94c-56586de4ab68",
    "readOnly": true,
    "resources": [
        {
            "accountId": "AWS Internal",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```