

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

# Lambda 轮换函数的执行角色权限 Amazon Secrets Manager
<a name="rotating-secrets-required-permissions-function"></a>

对于 [通过 Lambda 函数进行轮换](rotate-secrets_lambda.md)，当 Secrets Manager 使用 Lambda 函数轮换密钥时，Lambda 将代入 [IAM 执行角色](https://docs.amazonaws.cn/lambda/latest/dg/lambda-intro-execution-role.html)并将这些凭证提供给 Lambda 函数代码。有关如何设置自动轮换的说明，请参阅：
+ [自动轮换数据库密钥（控制台）](rotate-secrets_turn-on-for-db.md)
+ [自动轮换非数据库密钥（控制台）](rotate-secrets_turn-on-for-other.md)
+ [自动轮换（Amazon CLI）](rotate-secrets_turn-on-cli.md)

以下示例显示了适用于 Lambda 轮换函数执行角色的内联策略。要创建执行角色并附加权限策略，请参阅 [Amazon Lambda 执行角色](https://docs.amazonaws.cn/lambda/latest/dg/lambda-intro-execution-role.html)。

**Topics**
+ [适用于 Lambda 轮换函数执行角色的策略](#rotating-secrets-required-permissions-function-example)
+ [适用于客户托管密钥的策略语句](#rotating-secrets-required-permissions-function-cust-key-example)
+ [适用于交替用户策略的策略语句](#rotating-secrets-required-permissions-function-alternating-example)

## 适用于 Lambda 轮换函数执行角色的策略
<a name="rotating-secrets-required-permissions-function-example"></a>

以下示例策略允许轮换函数：
+ 运行 Secrets Manager 的操作*SecretARN*。
+ 创建新密码。
+ 如果数据库或服务在 VPC 中运行，则设置所需的配置。请参阅[配置 Lambda 函数以访问 VPC 中的资源](https://docs.amazonaws.cn/lambda/latest/dg/configuration-vpc.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword"
            ],
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

## 适用于客户托管密钥的策略语句
<a name="rotating-secrets-required-permissions-function-cust-key-example"></a>

如果密钥使用 Amazon 托管式密钥 `aws/secretsmanager` 以外的 KMS 密钥进行加密，则您需要向 Lambda 执行角色授予使用该密钥的权限。您可以使用 [SecretARN 加密上下文](security-encryption.md#security-encryption-encryption-context) 来限制解密函数的使用，从而确保轮换函数角色只能解密其负责轮换的密钥。以下示例演示了要添加到执行角色策略中，以使用 KMS 密钥将密钥解密的语句。

```
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "KMSKeyARN",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:SecretARN": "SecretARN"
                }
            }
        }
```

要对使用客户托管密钥加密的多个密钥使用轮换函数，请添加如下示例所示的语句以允许执行角色解密该密钥。

```
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "KMSKeyARN",
            "Condition": {
                "StringEquals": {
                    "kms:EncryptionContext:SecretARN": [
                        "arn1",
                        "arn2"
                    ]
                }
            }
        }
```

## 适用于交替用户策略的策略语句
<a name="rotating-secrets-required-permissions-function-alternating-example"></a>

有关*交替用户轮换策略*的信息，请参阅 [Lambda 函数轮换策略](rotation-strategy.md)。

对于包含 Amazon RDS 凭证的密钥，如果您使用的是交替用户策略，并且超级用户密钥[由 Amazon RDS 管理](rotate-secrets_managed.md)，则还必须允许轮换函数在 APIs Amazon RDS 上以只读方式调用，这样它才能获取数据库的连接信息。我们建议您附上 Amazon 托管政策 [Amazon RDSRead OnlyAccess](https://docs.amazonaws.cn/aws-managed-policy/latest/reference/AmazonRDSReadOnlyAccess.html)。

以下示例策略允许函数：
+ 运行 Secrets Manager 的操作*SecretARN*。
+ 在超级用户密钥中检索凭证。Secrets Manager 会使用超级用户密钥中的凭证更新轮换密钥中的凭证。
+ 创建新密码。
+ 如果数据库或服务在 VPC 中运行，则设置所需的配置。有关更多信息，请参阅[配置 Lambda 函数以访问 VPC 中的资源](https://docs.amazonaws.cn/lambda/latest/dg/vpc.html)。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:DescribeSecret",
                "secretsmanager:GetSecretValue",
                "secretsmanager:PutSecretValue",
                "secretsmanager:UpdateSecretVersionStage"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetSecretValue"
            ],
            "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:secretName-AbCdEf"
    },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword"
            ],
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DetachNetworkInterface"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------