使用 AWS Secrets Manager 管理 APM 身份验证密钥

编辑

使用 AWS Secrets Manager 管理 APM 身份验证密钥

编辑

当使用配置选项 ELASTIC_APM_SECRET_TOKENELASTIC_APM_API_KEY 对 Elastic APM AWS Lambda 扩展进行身份验证时,相应的密钥以纯文本形式指定在 Lambda 函数的环境变量中。如果您希望安全地存储身份验证密钥,可以使用 AWS Secrets Manager,并让扩展程序从 AWS Secrets Manager 中检索实际密钥。请按照以下说明设置带有扩展程序的 AWS Secrets Manager。

步骤 1:在 AWS Secrets Manager 中创建密钥。

编辑

在 AWS Secrets Manager 中为 APM 密钥令牌APM API 密钥创建一个密钥,具体取决于您希望使用哪个密钥。请确保将密钥创建为 纯文本 类型的密钥,并确保它创建在与将使用该密钥的目标 Lambda 函数 相同的 AWS 区域 中。

我们建议使用 AWS 管理的加密密钥 aws/secretsmanager。但是,您可以选择创建并选择自定义 KMS 密钥进行加密。请注意,使用自定义加密密钥时,您需要在 Lambda 函数上设置额外的密钥权限(请参阅 步骤 2)。

在 AWS Secrets Manager 的 Web 控制台中,导航至 存储新密钥,选择 其他类型的密钥作为密钥类型,然后选择 纯文本选项卡输入密钥值。输入您的 APM 密钥令牌或 APM API 密钥值作为纯字符串(不是 JSON 键值对)。

image showing the creation of a plaintext secret in Secrets Manager

单击 下一步,选择密钥名称,然后完成密钥的创建。

请记住您选择的密钥名称。在配置 Elastic APM AWS Lambda 扩展时,您将使用此密钥名称作为配置选项 ELASTIC_APM_SECRETS_MANAGER_SECRET_TOKEN_IDELASTIC_APM_SECRETS_MANAGER_API_KEY_ID 的值。

步骤 2:为您的 AWS Lambda 函数添加权限

编辑

为了使您的 Lambda 函数能够从 AWS Secrets Manager 检索身份验证密钥,您需要向您的 Lambda 函数提供以下权限。

  • 在 AWS Lambda 函数的 Web 控制台中,导航至 配置权限,然后单击 执行角色部分中的链接。这将引导您进入相应 IAM 角色的 Web 控制台。
  • 添加权限下拉按钮中选择 创建内联策略,然后选择 JSON 选项卡,以定义以下基于 JSON 的策略

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:GetSecretValue"
                ],
                "Resource": [
                    "THE_ARN_OF_YOUR_SECRET"
                ]
            },
            { 
                "Effect": "Allow",
                "Action": [
                    "kms:Decrypt"
                ],
                "Resource": [
                    "THE_ARN_OF_YOUR_CUSTOM_KMS_KEY"
                ]
            }
        ]
    }

    仅当您为密钥使用自定义 KMS 加密密钥时才需要此权限

  • 检查并保存该策略。

步骤 3:配置 Elastic APM AWS Lambda 扩展

编辑

最后,您需要配置 Elastic APM AWS Lambda 扩展,以使用来自 Secrets Manager 的密钥,而不是通过 ELASTIC_APM_SECRET_TOKENELASTIC_APM_API_KEY 提供的密钥值。

步骤 1 中创建的密钥的名称作为配置选项 ELASTIC_APM_SECRETS_MANAGER_SECRET_TOKEN_IDELASTIC_APM_SECRETS_MANAGER_API_KEY_ID 的值提供,具体取决于您是要使用 APM 密钥令牌还是 APM API 密钥

特定于语言的说明描述了如何设置环境变量来配置 AWS Lambda 以用于 Elastic APM

就是这样。在首次调用(冷启动)Lambda 函数时,您应该会看到来自 Elastic APM AWS Lambda 扩展的日志消息,指示使用了来自 Secrets Manager 的密钥

"Using the APM secret token retrieved from Secrets Manager."