本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为一个支持多个凭证的用户轮换 AWS Secrets Manager 密钥
您可以将 AWS Secrets Manager 配置为自动轮换受保护资源的密钥。本主题介绍为身份验证系统配置轮换,从而允许您创建具有至少两个凭证集的单个用户。
作为最佳实践,我们建议您设置第二个“主”密钥,以存储有权删除和创建主用户的凭证的其他用户的凭证。这样,您就可以将为主用户授予的权限限制为应用程序所需的权限。通过这样做,您可以将管理任务分流到第二个用户,最终用户无法访问该用户。主密钥的轮换函数访问第二个用户,以删除旧访问密钥并创建新的密钥。
轮换如何使用标签来管理具有多个凭证的单个用户
以下示例将更详细地介绍此方案。它使用一个服务示例,该服务允许用户具有两个单独的“API 密钥”,它们是由该服务生成的,而不是由轮换函数生成的:
-
在该方案中,应用程序先使用具有单个版本“A”的密钥中存储的 API 密钥之一访问受保护资源(数据库)。此 A 版本的密钥已附加暂存标签
AWSCURRENT
。应用程序请求具有AWSCURRENT
暂存标签的版本以检索密钥(步骤 1 和 2)。然后,应用程序使用该版本的密钥中的 API 密钥访问数据库(步骤 3)以检索应用程序所需的数据(步骤 4)。 -
密钥轮换函数删除密钥版本“A”当前未引用的 API 密钥,并为相同用户创建新的 API 密钥。然后,轮换函数创建新的密钥版本“B”(不是新密钥,而是同一密钥的新版本)。轮换函数从“A”版本中克隆详细信息,但该函数使用新创建的 API 密钥中的信息替换 API 密钥详细信息。该密钥版本“B”最初具有轮换过程附加的
暂存标签。由于自定义应用程序始终请求AWSPENDING
AWSCURRENT
标签并且该标签没有移动,因此,应用程序继续检索并使用密钥的原始 A 版本,以使 API 密钥访问受保护资源。 -
在测试密钥的版本“B”以确保密钥正常工作后,轮换过程移动“A”版本中的
AWSCURRENT
标签,并将其附加到密钥的新版本“B”。这还会自动将AWSPREVIOUS
暂存标签移动到具有AWSCURRENT
暂存标签的版本。这样,密钥就可以作为“上次已知良好的”版本,以防需要进行恢复。 -
来自自定义应用程序的下一个请求现在收到密钥的“B”版本,因为“B”现在具有
AWSCURRENT
标签。此时,客户应用程序使用密钥的新版本中的 API 密钥。在下一个轮换周期发生时,密钥的“B”版本将变为“A”版本,并再次开始执行步骤 a。
配置轮换以替换用户的凭证
要为只允许您具有一个用户的身份验证系统配置轮换机制,请按照以下过程中的步骤操作:
为具有两组凭证的用户配置轮换
-
在保护受保护资源的身份验证系统中创建您的用户。记下您设置的用户名和凭证。就本文而言,我们将它们称为 Creds1 和 Creds2。
-
创建一个 Secrets Manager 密钥以存储您在上一步中创建的凭证的详细信息。该密钥最初保存用户的 Creds1:
-
登录到 Secrets Manager 控制台 (https://console.amazonaws.cn/secretsmanager/
)。 -
选择 New secret (新密钥)。
-
对于 Select secret type (选择密钥类型),选择 Other type of secret (其他类型的密钥),包括用户名和第一组凭证。例如,为受保护的密钥文本输入两个密钥/值对。这些对可能类似于以下示例:
密钥 值 UserName <your user name>
APIKey <your API key>
APIKeyId <identifies which of the two API keys is stored in this version>
-
对于 AWS KMS Encryption Key (AWS KMS 加密密钥),选择要用于加密此密钥的密钥,或将账户的默认设置保留为 DefaultMasterKey。要使用默认密钥,访问此密钥的凭证必须来自拥有此密钥的同一账户。如果用户凭证位于不同的账户中,您必须创建并指定自定义客户主密钥 (CMK)。
-
对于 Select rotation period (选择轮换期),选择或键入轮换之间的天数。
注意 默认情况下,在使用 Secrets Manager 控制台配置轮换时,Secrets Manager 自动启用到期日期并设置为轮换间隔的天数 + 7。
-
对于 Select the Lambda rotation function (选择 Lambda 轮换函数),选择 Create function (创建函数)。
-
选择下一步。
-
键入 Secret name (密钥名称) 和可选的 Description (描述)。(可选)您可以添加标签。
-
选择 Store secret (存储密钥)。
-
-
检查新密钥以查找 Lambda 轮换函数的 Amazon 资源名称 (ARN)。
-
在密钥列表页面上,选择您在步骤 2 中创建的密钥的名称。
-
在密钥详细信息/密钥轮换部分中,选择轮换函数的 ARN 以在 Lambda 中打开该函数。
-
使用以下逻辑作为编写轮换函数的基础:
-
createSecret 步骤:
-
使用
GetSecretValue
操作检索AWSCURRENT
版本的密钥。 -
从密钥中提取
SecretString
值,并将其存储在可修改的结构中。 -
确定非活动 API 密钥,这是密钥的
AWSCURRENT
版本中未引用的密钥。 -
向服务发出命令来删除在上一步中确定的非活动 API 密钥。
-
向服务发出命令来为同一用户创建新的访问密钥。
-
使用刚创建的新 API 密钥中的信息覆盖密钥结构副本中的 API 密钥和标识符。使所有其他详细信息保持相同。
-
将受保护密钥文本的已修改副本作为调用中的
SecretString
参数传递给PutSecretValue
以进行存储。Secrets Manager 使用AWSPENDING
标记密钥的新版本。
-
-
setSecret 步骤:
-
此方案中的 setSecret 步骤不执行任何操作。您在
createSecret
步骤中创建了 API 密钥,因为您必须具有 API 密钥和标识符才能存储在密钥中。您不会像大多数其他情况那样生成自己的密钥。
-
-
testSecret 步骤:
-
使用
GetSecretValue
操作检索AWSPENDING
版本的密钥。 -
向受保护资源发出命令,以尝试使用该版本的密钥中的 API 密钥访问该资源。
-
-
finishSecret 步骤:
-
将标签
AWSCURRENT
移动到标记有AWSPENDING
的版本。这还会自动将AWSPREVIOUS
暂存标签移动到刚从中删除AWSCURRENT
的密钥。 -
(可选)从密钥的版本中删除
AWSPENDING
标签。
-
-
-