Amazon Secrets Manager 轮换问题排查 - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon Secrets Manager 轮换问题排查

Secrets Manager 使用 Lambda 函数轮换密钥。有关更多信息,请参阅轮换的工作原理。Lambda 轮换函数与拥有密钥的数据库或服务以及 Secrets Manager 交互。如果轮换没有按预期方式运行,应先检查 CloudWatch 日志。

检查您的 Lambda 函数的 CloudWatch 日志

  1. https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台

  2. 选择您的密钥,然后在详细信息页面上的 Rotation configuration(轮换配置)下,选择 Lambda 轮换函数。Lambda 控制台将打开。

  3. 监控选项卡上,选择日志,然后选择查看 CloudWatch 中的日志

    将打开 CloudWatch 控制台并显示您的函数的日志。

“在环境变量中找到凭证”之后没有活动

如果“在环境变量中找到凭证”之后没有活动,并且任务持续时间很长,例如默认 Lambda 超时为 30000 毫秒,则 Lambda 函数可能会在尝试访问 Secrets Manager 端点时超时。

Lambda 轮换功能必须能够访问 Secrets Manager 端点。如果您的 Lambda 函数可以访问互联网,则可以使用公共终端节点。要查找端点,请参阅 Amazon Secrets Manager 端点和配额

如果您的 Lambda 函数在不具备互联网访问权限的 VPC 中运行,我们建议您在 VPC 内配置 Secrets Manager 服务私有终端节点。然后,您的 VPC 可以拦截发往公共区域终端节点的请求并将其重定向到私有终端节点。有关更多信息,请参阅VPC 终端节点

或者,您可以通过向 VPC 添加 NAT 网关互联网网关(这将允许来自您 VPC 的流量访问公有端点),允许 Lambda 函数访问 Secrets Manager 公有端点。这会使 VPC 面临一定的风险,因为网关的 IP 地址可能会受到来自公有 Internet 的攻击。

“createSecret”之后没有活动

以下问题可能会在 createSecret 之后导致轮换停止:

VPC 网络 ACL 不允许 HTTPS 流量进出。

有关更多信息,请参阅《Amazon VPC 用户指南》中的使用网络 ACL 控制指向子网的流量

Lambda 函数超时配置过短,无法执行任务。

有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的配置 Lambda 函数选项

Secrets Manager VPC 端点不允许在分配的安全组入口处使用 VPC CIDR。

有关更多信息,请参阅《Amazon VPC 用户指南》中的使用安全组控制到资源的流量

Secrets Manager VPC 端点策略不允许 Lambda 使用 VPC 端点。

有关更多信息,请参阅为 Secrets Manager 创建 VPC 终端节点策略

错误:“Key is missing from secret JSON(密钥 JSON 中缺少密钥)”

Lambda 轮换函数要求密钥值采用特定的 JSON 结构。如果显示此错误,则 JSON 可能缺少轮换函数尝试访问的密钥。有关每种密钥类型的 JSON 结构的信息,请参阅 Amazon Secrets Manager 数据库凭证密钥的 JSON 结构

错误:“setSecret: Unable to log into database(setSecret:无法登录数据库)”

以下问题可能导致此错误:

轮换函数无法访问数据库。

如果任务持续时间过长,例如超过 5000 毫秒,则 Lambda 轮换函数可能无法通过网络访问数据库。

如果数据库或服务在 VPC 中的 Amazon EC2 实例上运行,建议将 Lambda 函数配置为在同一 VPC 中运行。然后轮换功能可以直接与您的服务通信。有关更多信息,请参阅配置 VPC 访问

要允许 Lambda 函数访问数据库或服务,您必须确保附加到 Lambda 轮换函数的安全组允许与数据库或服务的出站连接。您还必须确保附加到数据库或服务的安全组允许来自 Lambda 轮换函数进行入站连接。

密钥中的凭证有误。

如果任务持续时间过短,则 Lambda 轮换函数可能无法使用密钥中的凭证进行身份验证。借助 Amazon CLI 命令 get-secret-value 使用密钥的 AWSCURRENTAWSPREVIOUS 版本中的信息手动登录,以检查凭证。

数据库需要 SSL/TLS 访问权限。

如果您的数据库需要 SSL/TLS 连接,但轮换函数使用了未加密的连接,则轮换函数无法连接到数据库。适用于 Amazon RDS(Oracle 除外)和 Amazon DocumentDB 的轮换函数将自动使用安全套接字层 (SSL) 或传输层安全性 (TLS) 来连接到数据库(如果可用)。否则,他们将使用未加密的连接。

注意

如果您在 2021 年 12 月 20 日之前设置了自动密钥轮换,则您的轮换函数可能基于不支持 SSL/TLS 的较旧模板。为了支持使用 SSL/TLS 的连接,您需要重新创建您的轮换函数

确定您的轮换函数的创建时间

  1. 在 Secrets Manager 控制台 https://console.aws.amazon.com/secretsmanager/ 中,打开您的密钥。在 Rotation configuration(轮换配置)中的 Lambda rotation function(Lambda 轮换函数)下,您将看到 Lambda function ARN(Lambda 函数 ARN),例如,arn:aws:lambda:aws-region:123456789012:function:SecretsManagerMyRotationFunction 。在此示例 SecretsManagerMyRotationFunction 中,从 ARN 末尾复制函数名称。

  2. 在 Amazon Lambda 控制台 https://console.aws.amazon.com/lambda/ 中的 Functions(函数)下,将您的 Lambda 函数名称粘贴到搜索框中,按 Enter 键,然后选择相应的 Lambda 函数。

  3. 在函数详细信息页面中,在 Configuration(配置)选项卡上的 Tags(标签)下,复制键 aws:cloudformation:stack-name 旁边的值。

  4. 在 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation 中的 Stacks(堆栈)下,将键值粘贴在搜索框中,然后按 Enter 键。

  5. 堆栈列表将进行筛选,以便只显示创建 Lambda 轮换函数的堆栈。在 Created date(创建日期)列中,查看堆栈的创建日期。这是 Lambda 轮换函数的创建日期。