自动轮换密钥所需的权限 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

自动轮换密钥所需的权限

在您使用 AWS Secrets Manager 控制台为完全支持的数据库之一配置密钥轮换时,控制台将为您配置几乎所有的参数。但是,如果您创建函数或者由于其他原因选择手动完成所有过程,您还可能还需要为轮换的这一部分手动配置权限。

用户配置轮换与用户触发轮换的权限

Secrets Manager 需要使用两组不同的权限,以执行使用密钥轮换的用户操作:

  • 配置轮换所需的权限 – Secrets Manager 将权限分配给受信任的用户以配置密钥轮换。有关更多信息,请参阅向用户授予完整 Secrets Manager 管理员权限

  • 轮换密钥所需的权限 – IAM 用户在配置后,仅需要权限 secretsmanager:RotateSecret 来触发轮换。在轮换开始后,Lambda 轮换函数接管并使用附加的 IAM 角色和权限以授权在轮换期间执行的操作,包括所需的任何 AWS KMS 操作。

本主题的其余部分讨论 Lambda 轮换函数成功轮换密钥的权限。

与 Lambda 轮换函数关联的权限

AWS Secrets Manager 使用 Lambda 函数实施代码以轮换密钥中的凭证。

Secrets Manager 服务调用 Lambda 函数。该服务调用附加到 Lambda 函数的 IAM 角色以执行该操作。Secrets Manager 执行两个操作以实现该目的:

  • 指定谁可以担任该角色的信任策略您必须配置该策略以允许 Secrets Manager 担任该角色,如服务委托人所指定的一样:secretsmanager.amazonaws.com。通过单击设计器部分中的钥匙图标,您可以在 Lambda 控制台上的函数详细信息页面中查看该策略。详细信息显示在函数策略部分中。此策略应该类似于以下示例:

    { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE", "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "<arn of the Lambda function that this trust policy is attached to - must match exactly>" } ] }

    出于安全原因,Secrets Manager 创建的信任策略包括一个 Resource 元素并包含 Lambda 函数的 Amazon 资源名称 (ARN)。担任角色的任何人只能 调用与角色关联的 Lambda 函数。

  • 指定担任者角色的角色权限策略 您必须配置该策略,以指定在调用函数以担任该角色时 Secrets Manager 可以使用的权限。Secrets Manager 具有两种不同的策略,具体取决于要实施的轮换策略。

    • 单用户轮换:以下示例描述了一个函数,它使用密钥中存储的凭证登录并更改密码以轮换密钥。

      { "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:resource/AllowRotationLambdaArn": "<lambda_arn>" } } }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Effect": "Allow" } ] }

      单用户示例中的第一个语句向函数授予权限以运行 Secrets Manager 操作。不过,Condition 元素将其限制为仅配置了该 Lambda 函数 ARN 以作为密钥 Lambda 轮换函数的密钥。

      第二个语句允许执行一个不需要该条件的额外 Secrets Manager 操作。

      第三个语句使得 Lambda 在您指定数据库或服务运行在 VPC 中时可以设置所需的配置。有关更多信息,请参阅 AWS Lambda Developer Guide 中的配置 Lambda 函数以访问 Amazon VPC 中的资源

    • 主用户轮换:以下示例描述了一个函数,它使用凭证包含提升的权限的单独主密钥登录以轮换密钥。如果您使用在两个用户之间切换的轮换策略之一,则 Secrets Manager 需要使用该函数。

      { "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "*", "Condition": { "StringEquals": { "secretsmanager:resource/AllowRotationLambdaArn": "<lambda_arn>" } } }, { "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword" ], "Resource": "*" }, { "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": "*", "Effect": "Allow" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": "<master_arn>" } ] }

      除了与之前单用户策略相同的三个语句之外,此策略增加了第四个语句。第四个语句允许函数检索主密钥中的凭证。Secrets Manager 使用主密钥中的凭证登录到受保护的数据库,并更新轮换的密钥中的凭证。