

这是新的《Amazon CloudFormation 模板参考指南》**。请更新您的书签和链接。有关开始使用 CloudFormation 的帮助，请参阅《Amazon CloudFormation 用户指南》[https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/Welcome.html)。

# `AWS::SecretsManager` 转换
<a name="transform-aws-secretsmanager"></a>

本主题介绍如何使用 `AWS::SecretsManager` 转换和 [AWS::SecretsManager::RotationSchedule](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 资源类型来指定用于执行密钥轮换的 Lambda 函数。

`AWS::SecretsManager` 转换是一个 CloudFormation 宏，如果您在堆栈模板中引用了该宏，则会在您使用更改集创建或更新堆栈时自动生成一个执行密钥轮换的 Lambda 函数。Lambda 函数放置在处理后模板的嵌套堆栈中。该函数使用一个来自 [Amazon Secrets Manager 轮换 Lambda 函数](https://github.com/aws-samples/aws-secrets-manager-rotation-lambdas)存储库的函数模板，该模板基于 [AWS::SecretsManager::RotationSchedule](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 资源的 [RotationType](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html#cfn-secretsmanager-rotationschedule-hostedrotationlambda-rotationtype) 属性的值。

## 用法
<a name="aws-secretsmanager-usage"></a>

要使用 `AWS::SecretsManager` 转换，您必须在 CloudFormation 模板的顶层对其进行声明。`AWS::SecretsManager` 不能用作嵌入在任何其他模板部分中的转换。

该声明的值必须为文本字符串 `AWS::SecretsManager-2020-07-23` 或 `AWS::SecretsManager-2024-09-16`。您无法使用参数或函数来指定转换值。

### 语法
<a name="aws-secretsmanager-syntax"></a>

要在 CloudFormation 模板中声明该转换，请使用以下语法：

#### JSON
<a name="aws-secretsmanager-syntax.json"></a>

```
{
  "Transform":"AWS::SecretsManager-2020-07-23",
  "Resources":{
    ...
  }
}
```

#### YAML
<a name="aws-secretsmanager-syntax.yaml"></a>

```
Transform: AWS::SecretsManager-2020-07-23
Resources:
  ...
```

`AWS::SecretsManager` 转换是一个独立的声明，没有其他参数。相反，您可以在堆栈模板中配置 [AWS::SecretsManager::RotationSchedule](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 资源的 [HostedRotationLambda](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) 属性。[HostedRotationLambda](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-properties-secretsmanager-rotationschedule-hostedrotationlambda.html) 属性用于指定执行密钥轮换的 Lambda 函数。

## `AWS::SecretsManager-2024-09-16` 中的新增功能
<a name="aws-secretsmanager-new-version"></a>

最新版本的 `AWS::SecretsManager` 转换 (`AWS::SecretsManager-2024-09-16`) 引入了以下增强功能：
+ **自动 Lambda 升级** – 当您更新 CloudFormation 堆栈时，Lambda 函数现在会自动更新其运行时配置和内部依赖项，从而确保您使用最安全、最可靠的代码版本来管理 Secrets Manager 中的密钥轮换。
+ **对其他属性的支持** – 与 `HostedRotationLambda` 属性一起使用时，此新转换支持 `AWS::SecretsManager::RotationSchedule` 资源类型的额外资源属性，包括 `DependsOn` 属性。
**注意**  
这两个版本都支持 `DeletionPolicy` 和 `UpdateReplacePolicy` 属性。

要详细了解 `AWS::SecretsManager` 转换的此新版本，请参阅 Amazon 安全博客中的 [Introducing an enhanced version of the Amazon Secrets Manager transform: AWS::SecretsManager-2024-09-16](https://www.amazonaws.cn/blogs/security/introducing-an-enhanced-version-of-the-aws-secrets-manager-transform-awssecretsmanager-2024-09-16/)。

## 示例
<a name="aws-secretsmanager-examples"></a>

以下示例展示了如何在模板中使用 `AWS::SecretsManager` 转换（`AWS::SecretsManager-2024-09-16`）和 [AWS::SecretsManager::RotationSchedule](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html) 资源。在此示例中，CloudFormation 将自动生成一个执行 MySQL 单用户密钥轮换的 Lambda 函数。

该密钥设置为在每天午夜（UTC）自动轮换。完成轮换过程最长需要 2 个小时。更新轮换计划不会立即开始轮换。

### JSON
<a name="aws-secretsmanager-example.json"></a>

```
{
  "AWSTemplateFormatVersion":"2010-09-09",
  "Transform":"AWS::SecretsManager-2024-09-16",
  "Resources":{

  ...

    "MySecretRotationSchedule":{
      "Type":"AWS::SecretsManager::RotationSchedule",
      "DependsOn":"logical name of AWS::SecretsManager::SecretTargetAttachment resource",
      "Properties":{
        "SecretId":{
          "Ref":"logical name of AWS::SecretsManager::Secret resource"
        },
        "HostedRotationLambda":{
          "RotationType":"MySQLSingleUser",
          "RotationLambdaName":"name of Lambda function to be created",
          "VpcSecurityGroupIds":{
            "Fn::GetAtt":[
              "logical name of AWS::EC2::SecurityGroup resource",
              "GroupId"
            ]
          },
          "VpcSubnetIds":{
            "Fn::Join":[
              ",",
              [
                {
                  "Ref":"logical name of primary subnet"
                },
                {
                  "Ref":"logical name of secondary subnet"
                }
              ]
            ]
          }
        },
        "RotationRules":{
          "ScheduleExpression":"cron(0 0 * * ? *)",
          "Duration":"2h"
        },
        "RotateImmediatelyOnUpdate":false
      }
    }
  }
}
```

### YAML
<a name="aws-secretsmanager-example.yaml"></a>

```
AWSTemplateFormatVersion: 2010-09-09
Transform: AWS::SecretsManager-2024-09-16
Resources:

  ...

  MySecretRotationSchedule:
    Type: AWS::SecretsManager::RotationSchedule
    DependsOn: logical name of AWS::SecretsManager::SecretTargetAttachment resource
    Properties:
      SecretId: !Ref logical name of AWS::SecretsManager::Secret resource
      HostedRotationLambda:
        RotationType: MySQLSingleUser
        RotationLambdaName: name of Lambda function to be created
        VpcSecurityGroupIds: !GetAtt logical name of AWS::EC2::SecurityGroup resource.GroupId
        VpcSubnetIds:
          Fn::Join:
          - ","
          - - Ref: logical name of primary subnet
            - Ref: logical name of secondary subnet
      RotationRules:
        ScheduleExpression: cron(0 0 * * ? *)
        Duration: 2h
      RotateImmediatelyOnUpdate: false
```

## 相关资源
<a name="aws-secretsmanager-related-resources"></a>

有关可用于设置密钥轮换的完整 CloudFormation 模板示例，请参阅 `AWS::SecretsManager::RotationSchedule` 资源的[示例](https://docs.amazonaws.cn/AWSCloudFormation/latest/TemplateReference/aws-resource-secretsmanager-rotationschedule.html#aws-resource-secretsmanager-rotationschedule--examples)部分。

有关使用宏的一般信息，请参阅《Amazon CloudFormation 用户指南》**中的 [使用模板宏对 CloudFormation 模板执行自定义处理](https://docs.amazonaws.cn/AWSCloudFormation/latest/UserGuide/template-macros.html)。