旋转您的Amazon Secrets Manager密钥 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

旋转您的Amazon Secrets Manager密钥

为了帮助保护您的秘密安全,Secrets Manager 可以按计划自动旋转它们。当它轮换密钥时,Secret Manager 会同时更新密钥和数据库或服务中的凭据,以便您不必手动更改凭据。Secrets Manager 使用 Lambda 旋转函数与 Secrets Manager 和数据库或服务进行通信。旋转功能:

  • 调用 Secrets Manager API 来检索和更新密码。

  • 向数据库或服务发送请求以更新用户密码。

对于亚马逊 RDS、Amazon DocumentDB 和 Amazon Redshift 机密,您可以打开自动旋转。有关更多信息,请参阅具有内置旋转支持的数据库旋转密码

对于其他类型的密钥,由于每个服务或数据库可能有独特的密钥配置方式,您可以编写一个 Lambda 函数来实施轮换密钥的特定于服务的详细信息。有关更多信息,请参阅为其他数据库或服务启用密钥轮换

VPC

如果您的服务在 VPC 中运行并且可以公开访问,则 Lambda 轮换函数将通过可公开访问的连接点与其通信。

如果服务无法公开访问,则可以将 Lambda 轮换函数配置为在同一 VPC 中运行。以便轮换函数与服务通信。有关更多信息,请参阅 。配置 VPC 访问.

如果您的 Lambda 函数在 VPC 中运行,那么要允许它与 Secrets Manager 进行通信,您有两个选项:

  • 您可以启用 Lambda 函数访问公有 Secrets Manager 终端节点,方法是将NAT 网关添加您的 VPC,这使得您 VPC 中的通信可以访问公共终端节点。这会使 VPC 面临一定的风险,因为网关的 IP 地址可能会受到来自公有 Internet 的攻击。

  • 您可以在 VPC 中配置 Secrets Manager 服务终端节点。这样,您的 VPC 就可以拦截发送到公有区域终端节点的任何请求,并将 VPC 重定向到在 VPC 中运行的私有服务终端节点。有关更多信息,请参阅VPC 终端节点

自动轮换机密所需的权限

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

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

Secrets Manager 需要两组单独的权限,以执行user使用秘密轮换的操作:

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

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

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

与 Lambda 旋转函数关联的权限

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

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

  • 指定谁可以担任该角色的信任策略您必须将该策略配置为允许 Secrets Manager 代入由服务委托人确定的角色:secretsmanager.amazonaws.com. 您可以在 Lambda 控制台中查看此策略,方法是从列表中选择一个密钥 Lambda 函数,然后选择Permissions (权限)选项卡。在基于资源的策略部分中,您会看到类似于以下示例的代码:

    { "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 有两种不同的策略可用,具体取决于要实施的轮换策略。

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

      { "Version": "2012-10-17", "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 中时可以设置所需的配置。有关更多信息,请参阅 。配置 Lambda 函数以访问 Amazon VPC 中的资源中的Amazon Lambda开发人员指南.

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

      { "Version": "2012-10-17", "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 使用主密钥中的凭证登录到受保护的数据库,并更新轮换的密钥中的凭证。