轮换权限 - AWS Secrets Manager

轮换权限

Secrets Manager 使用 Lambda 函数轮换密钥。Lambda 服务假定 IAM 执行角色并在执行 Lambda 函数时将这些凭证提供给 Lambda 函数的代码。如果您使用 Secrets Manager 控制台启用轮换,则会为您创建 Lambda 函数、资源策略、执行角色和执行角色内联策略。

如果您以其他方式创建 Lambda 函数,则必须确保其具有正确权限。您还需要创建执行角色并确保其具有正确权限。

要启用自动轮换,您必须具有创建 IAM 执行角色并向其附加权限策略的权限。您需要拥有 iam:CreateRoleiam:AttachRolePolicy 两个权限。

警告

授予身份 iam:CreateRoleiam:AttachRolePolicy 两个权限允许身份向自己授予任何权限。

我们建议您在 Lambda 函数的资源策略中包括上下文键 aws:SourceAccount,帮助防止 AWS Lambda 被用作混淆代理。对于某些 AWS 服务,为了避免混淆代理情况,AWS 建议您同时使用 aws:SourceArnaws:SourceAccount 全局条件键。但如果 Lambda 轮换函数策略中包括上下文键 aws:SourceArn,则轮换函数只能用于轮换该 ARN 指定的密钥。我们建议您仅在其中包括上下文键 aws:SourceAccount,以便对多个密钥使用轮换函数。

Lambda 函数策略资源

以下策略允许 Secrets Manager 调用 Resource 中指定的 Lambda 函数。要将资源策略附加到 Lambda 函数,请参阅使用 AWS Lambda 的基于资源的策略

{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "LambdaRotationFunctionARN", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } } ] }

或者,您也可以通过运行以下 AWS CLI 命令来添加此权限:

aws lambda add-permission --function-name LambdaRotationFunctionARN --principal secretsmanager.amazonaws.com --action lambda:InvokeFunction --source-account 111122223333 --statement-id SecretsManagerAccess

Lambda 函数执行角色内联策略

以下示例演示了 Lambda 函数执行角色的内联策略。要创建执行角色并附加权限策略,请参阅 AWS Lambda 执行角色

例 针对单个用户轮换策略的 IAM 执行角色内联策略

对于 轮换数据库凭证,Secrets Manager 将创建 IAM 执行角色并为您附上此策略。

以下示例策略允许函数:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }

例 交替用户策略的 IAM 执行角色内联策略声明

对于 轮换数据库凭证,Secrets Manager 将创建 IAM 执行角色并为您附上此策略。

以下示例策略允许函数:

  • 对配置为使用此轮换函数的密钥运行 Secrets Manager 操作。

  • 在单独的密钥中检索凭证。Secrets Manager 使用个别的密钥中的凭证更新轮换密钥的凭证。

  • 创建新密码。

  • 如果数据库或服务在 VPC 中运行,则设置所需的配置。有关更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "SecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "SeparateSecretARN" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DetachNetworkInterface" ], "Resource": "*", "Effect": "Allow" } ] }

例 客户托管密钥的 IAM 执行角色内联策略声明

如果使用的是 AWS 托管式密钥 aws/secretsmanager 以外的 KMS 密钥要加密你的密钥,那么需要授予 Lambda 执行角色使用密钥的权限。

以下示例显示了要添加到执行角色策略中以允许函数检索 KMS 密钥的语句。

{ "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "KMSKeyARN" }