View a markdown version of this page

使用 AWS 工作负载凭证提供商 - AWS Secrets Manager

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

使用 AWS 工作负载凭证提供商

怎么样 AWS 工作负载凭证提供商有效

AWS 工作负载凭证提供商(前身为 AWS Secrets Manager 代理)提供客户端 HTTP 服务,可帮助您标准化在计算环境中使用 Secrets Manager 密钥的方式。您可以将以下服务与该密钥一起使用:

  • AWS Lambda

  • Amazon Elastic Container Service

  • Amazon Elastic Kubernetes Service

  • Amazon Elastic Compute Cloud

AWS 工作负载凭证提供程序检索密钥并将其缓存在内存中,从而允许您的应用程序从本地主机获取密钥,而不是直接调用密钥管理器。 AWS 工作负载凭证提供者只能读取密钥——它无法修改密钥。

AWS 工作负载凭证提供商是开源的。源代码、安装说明和最新版本信息可在上找到GitHub。

重要

AWS 工作负载凭证提供者使用您的环境中的 AWS 证书来调用密钥管理器。它包括针对服务器端请求伪造(SSRF)的保护,以协助改进密钥安全性。默认情况下, AWS 工作负载凭证提供者使用后量子 ML-KEM 密钥交换作为最高优先级的密钥交换。

了解 AWS 工作负载凭证提供商缓存

AWS 工作负载凭据提供程序使用内存缓存,该缓存会在 AWS 工作负载凭据提供程序重新启动时重置。它会根据以下条件定期刷新缓存的密钥值:

  • 默认刷新频率(TTL)为 300 秒

  • 您可以使用配置文件修改 TTL

  • 在 TTL 过期后请求密钥时,就会发生刷新

注意

工作 AWS 负载凭证提供程序不包括缓存失效。如果密钥在缓存条目到期之前轮换,则 AWS 工作负载凭证提供程序可能会返回过时的密钥值。

工作 AWS 负载凭证提供程序以与的响应相同的格式返回机密值GetSecretValue。密钥值在缓存中未进行加密。

下载 AWS 工作负载凭证提供商

要下载 AWS 工作负载凭证提供程序的预建二进制文件,请使用以下链接。Windows 版本已签署。

平台 架构 下载 URL 校验和 () SHA-256

Linux

x86-64

下载适用于 Linux 的 x86-64 (3.1.1)

471c1978f8bf63a0a0aeefb425e974ac3c816c7e04feb302236512eea37516c7e04feb302236512eea375160de4

Linux

aarch64

下载适用于 Linux 的 Aarch64 (3.1.1)

8b09dc4e58b84379f580a9a9ae179940bcb3de0338421f638a421f638a43376bf73376bf73376bf73380ffb6

Windows

x86-64

下载适用于 Windows 的 x86-64 (3.1.1)

5fbdac4017e630556b94b90e5ed9ed9ed11be69ac7a47e67a47e67e20181ce990dbe12

构建 AWS 来自来源的工作负载凭证提供商

或者,您可以从源代码构建 AWS 工作负载凭证提供程序。在开始之前,请确保为您的平台安装了标准的开发Rust工具和工具。

注意

当前,在 macOS 上启用该fips功能来构建提供商需要以下解决方法:

  • 创建名为 SDKROOT 的环境变量,该变量设置为运行 xcrun --show-sdk-path 的结果

RPM-based systems
在 RPM-based 系统上构建
  1. 使用存储库中提供的 install 脚本。

    该脚本在启动时生成一个随机的 SSRF 令牌并将其存储在文件 /var/run/awssmatoken 中。安装脚本创建的 aws-wcp-token 组可以读取该令牌。

  2. 要允许您的应用程序读取令牌文件,您需要将应用程序在其下运行的用户账户添加到 aws-wcp-token 组。例如,您可以使用以下 usermod 命令授予应用程序读取令牌文件的权限,其中<APP_USER>是应用程序运行时使用的用户 ID。

    sudo usermod -aG aws-wcp-token <APP_USER>
    安装开发工具

    在 AL2023 等 RPM-based 系统上,安装开发工具组:

    sudo yum -y groupinstall "Development Tools"
  3. 安装 Rust

    按照 Rust 文档中安装 Rust 的说明进行操作:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions . "$HOME/.cargo/env"
  4. 建立提供商

    使用 cargo build 命令构建 AWS 工作负载凭证提供程序:

    cargo build --release

    您将在 target/release/aws-workload-credentials-provider 下找到可执行文件。

Debian-based systems
在 Debian-based 系统上构建
  1. 安装开发工具

    在 Ubuntu 等 Debian-based 系统上,安装基本编译包:

    sudo apt install build-essential
  2. 安装 Rust

    按照 Rust 文档中安装 Rust 的说明进行操作:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Follow the on-screen instructions . "$HOME/.cargo/env"
  3. 建立提供商

    使用 cargo build 命令构建 AWS 工作负载凭证提供程序:

    cargo build --release

    您将在 target/release/aws-workload-credentials-provider 下找到可执行文件。

Windows
在 Windows 上构建
  1. 设置开发环境

    按照 Microsoft Windows 文档中的 在 Windows 上针对 Rust 设置开发环境中的说明进行操作。

  2. 建立提供商

    使用 cargo build 命令构建 AWS 工作负载凭证提供程序:

    cargo build --release

    您将在 target/release/aws-workload-credentials-provider.exe 下找到可执行文件。

Cross-compile natively
本机交叉编译
  1. 安装交叉编译工具

    安装 cargo-xwin:

    cargo install cargo-xwin
  2. 添加 Rust 构建目标

    安装 Windows MSVC 编译目标:

    rustup target add x86_64-pc-windows-msvc
  3. 针对 Windows 构建

    Cross-compile Windows 的提供商:

    cargo xwin build --release --target x86_64-pc-windows-msvc

    您将在 target/x86_64-pc-windows-msvc/release/aws-workload-credentials-provider.exe 处找到可执行文件。

安装   AWS 工作负载凭证提供商

从以下安装选项中选择您的计算环境。

Amazon EC2

在 Amazon EC2 Linux 实例上,您可以使用 RPM 包(适用于 AL2023)或手动安装脚本安装 AWS 工作负载凭证提供商。

选项 A:安装 RPM 软件包 (AL2023)
  1. 安装软件包

    安装 RPM 软件包。包管理器会为您找到最新版本:

    sudo dnf install aws-workload-credentials-provider

    RPM 包会自动设置以下内容:

    • aws-wcp服务用户,以及awscreds和群aws-wcp-token组。

    • 中的二进制脚本和辅助脚本/opt/aws/workload-credentials-provider/。

    • AWS Secrets Manager 和令牌systemd服务,它会自动启动。

    • 一个随机的 SSRF 代币。/var/run/awssmatoken

    密钥管理器功能在安装后立即可用。当您使用 RPM 包进行安装时, AWS 工作负载凭证提供程序会从默认路径读取配置选项/etc/aws-workload-credentials-provider/config.toml。要自定义配置,请创建或编辑该文件。

  2. (可选)启用证书管理功能

    要从中检索和刷新证书 AWS Certificate Manager,请参阅《AWS Certificate Manager 用户指南》中的证书自动化。

  3. 配置应用程序权限

    要允许您的应用程序读取 SSRF 令牌文件,请将应用程序的用户帐户添加到群组中aws-wcp-token:

    sudo usermod -aG aws-wcp-token APP_USER

    APP_USER替换为应用程序运行时使用的用户 ID。

  4. (可选)授予访问提供商日志的权限

    要读取提供商日志,请将您的用户添加到awscreds群组,然后注销并重新登录(或运行newgrp awscreds)以使更改生效:

    sudo usermod -aG awscreds APP_USER
卸载 AWS 工作负载凭证提供商

要卸载 AWS 工作负载凭证提供程序,请运行sudo dnf remove aws-workload-credentials-provider。卸载会停止所有服务并删除二进制文件和服务单元。卸载过程会保留aws-wcp用户、群组和日志目录。

选项 B:运行安装脚本(任意 Linux)
  1. 导航到配置目录

    更改到配置目录:

    cd aws_workload_credentials_provider_common/configuration
  2. 运行安装脚本

    运行存储库中提供的 install 脚本。

    该脚本在启动时生成一个随机的 SSRF 令牌并将其存储在文件 /var/run/awssmatoken 中。安装脚本创建的 aws-wcp-token 组可以读取该令牌。

  3. 配置应用程序权限

    将运行应用程序的用户账户添加到 aws-wcp-token 组中:

    sudo usermod -aG aws-wcp-token APP_USER

    APP_USER替换为应用程序运行时使用的用户 ID。

Container Sidecar

您可以使用 Docker 将 AWS 工作负载凭证提供程序作为边车容器与应用程序一起运行。然后,您的应用程序可以从 AWS 工作负载凭据提供商提供的本地 HTTP 服务器检索密钥。有关 Docker 的信息,请参阅 Docker 文档。

为创建边车容器 AWS 工作负载凭证提供商
  1. 创建提供商 Dockerfile

    为 AWS 工作负载凭证提供商 sidecar 容器创建 Dockerfile:

    # Use the latest Debian image as the base FROM debian:latest # Set the working directory inside the container WORKDIR /app # Copy the Workload Credentials Provider binary to the container COPY aws-workload-credentials-provider . # Install any necessary dependencies RUN apt-get update && apt-get install -y ca-certificates # Set the entry point to run the provider ENTRYPOINT ["./aws-workload-credentials-provider", "sm", "start"]
  2. 创建应用程序 Dockerfile

    为您的客户端应用程序创建一个 Dockerfile。

  3. 创建 Docker Compose 文件

    创建 Docker Compose 文件来运行具有共享网络接口的两个容器:

    重要

    必须加载 AWS 凭据和 SSRF 令牌,应用程序才能使用 AWS 工作负载凭据提供程序。对于 Amazon EKS 和 Amazon ECS,请参阅以下内容:

    version: '3' services: client-application: container_name: client-application build: context: . dockerfile: Dockerfile.client command: tail -f /dev/null # Keep the container running workload-credentials-provider: container_name: workload-credentials-provider build: context: . dockerfile: Dockerfile.provider network_mode: "container:client-application" # Attach to the client-application container's network depends_on: - client-application
  4. 复制提供商二进制文件

    将 aws-workload-credentials-provider 二进制文件复制到包含您的 Dockerfile 和 Docker Compose 文件的同一个目录中。

  5. 构建并运行容器

    使用 Docker Compose 构建并运行容器:

    docker-compose up --build
  6. 后续步骤

    现在,您可以使用 AWS 工作负载凭证提供程序从客户端容器检索密钥。有关更多信息,请参阅 使用检索机密 AWS 工作负载凭证提供商。

Lambda

您可以将 AWS 工作负载凭证提供程序打包为 Lambda 扩展。然后,您可以将其作为层添加到您的 Lambda 函数中,并从 Lambda 函数调用 AWS 工作负载凭证提供商以获取密钥。

以下说明说明如何使用 aws-workload-credentials-provider GitHub 存储库secrets-manager-provider-extension.sh中的示例脚本将工作负载凭证提供程序安装为 MyTest Lambda 扩展来获取名为的 AWS 密钥。

为创建 Lambda 扩展 AWS 工作负载凭证提供商
  1. 打包提供者层

    在 AWS 工作负载凭证提供程序代码包的根目录下,运行以下命令:

    AWS_ACCOUNT_ID=AWS_ACCOUNT_ID LAMBDA_ARN=LAMBDA_ARN # Build the release binary cargo build --release --target=x86_64-unknown-linux-gnu # Copy the release binary into the `bin` folder mkdir -p ./bin cp ./target/x86_64-unknown-linux-gnu/release/aws-workload-credentials-provider ./bin/aws-workload-credentials-provider # Copy the `secrets-manager-provider-extension.sh` example script into the `extensions` folder. mkdir -p ./extensions cp aws_secretsmanager_provider/examples/example-lambda-extension/secrets-manager-provider-extension.sh ./extensions # Zip the extension shell script and the binary zip secrets-manager-provider-extension.zip bin/* extensions/* # Publish the layer version LAYER_VERSION_ARN=$(aws lambda publish-layer-version \ --layer-name secrets-manager-provider-extension \ --zip-file "fileb://secrets-manager-provider-extension.zip" | jq -r '.LayerVersionArn')
  2. 配置 SSRF 令牌

    提供商的默认配置会自动将 SSRF 令牌设置为在预设变量AWS_SESSION_TOKEN或AWS_CONTAINER_AUTHORIZATION_TOKEN环境变量(启用的 Lambda 函数的后一个变量)中设置的值。 SnapStart 或者,您可以改用自己的 Lambda 函数的任意值定义 AWS_TOKEN 环境变量,因为该变量优先于其他两个变量。如果您选择使用 AWS_TOKEN 环境变量,则必须通过 lambda:UpdateFunctionConfiguration 调用来设置该环境变量。

  3. 将层附加到函数

    将层版本附加到 Lambda 函数:

    # Attach the layer version to the Lambda function aws lambda update-function-configuration \ --function-name $LAMBDA_ARN \ --layers "$LAYER_VERSION_ARN"
  4. 更新函数代码

    更新您的 Lambda 函数以使用 X-Aws-codes-Secrets-Token 标头值(设置为来自上述环境变量之一的 SSRF 令牌值)查询 http://localhost:2773/secretsmanager/get?secretId=MyTest,从而检索密钥。务必在应用程序代码中实现重试逻辑,以适应 Lambda 扩展初始化和注册中的延迟。

  5. 测试此函数

    调用 Lambda 函数以验证是否已正确获取密钥。

使用检索机密 AWS 工作负载凭证提供商

要检索密钥,请使用密钥名称或 ARN 作为查询参数调用本地 AWS 工作负载凭证提供程序端点。默认情况下, AWS 工作负载凭证提供者检索密钥的AWSCURRENT版本。要检索其他版本,请使用 versionStage 或 versionId 参数。

重要

为了帮助保护 AWS 工作负载凭证提供商,您必须在每个请求中包含 SSRF 令牌标头:X-Aws-Parameters-Secrets-Token AWS 工作负载凭证提供者拒绝没有此标头或带有无效 SSRF 令牌的请求。您可以在 配置 AWS 工作负载凭证提供商 中自定义 SSRF 标头名称。

所需的权限

AWS 工作负载凭证提供者使用 AWS 适用于 Rust 的 SDK,该软件开发工具包使用AWS 凭证提供者链。这些 IAM 证书的身份决定了 AWS 工作负载凭证提供商检索机密的权限。

  • secretsmanager:DescribeSecret

  • secretsmanager:GetSecretValue

有关权限的更多信息,请参阅 的权限参考 AWS Secrets Manager。

重要

将密钥值提取到 AWS 工作负载凭证提供程序后,任何有权访问计算环境和 SSRF 令牌的用户都可以访问 AWS 工作负载凭据提供程序缓存中的密钥。有关更多信息,请参阅 安全注意事项。

示例请求

curl
例示例 — 使用 curl 获取密钥

以下 curl 示例显示如何从 AWS 工作负载凭证提供程序获取密钥。该示例依赖于文件中存在的 SSRF,该文件是安装脚本存储示例的位置。

curl -v -H \ "X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \ 'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID'
Python
例示例 — 使用 Python 获取密钥

以下 Python 示例显示了如何从 AWS 工作负载凭证提供程序获取密钥。该示例依赖于文件中存在的 SSRF,该文件是安装脚本存储示例的位置。

import requests import json # Function that fetches the secret from AWS Workload Credentials Provider for the provided secret id. def get_secret(): # Construct the URL for the GET request url = f"http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID" # Get the SSRF token from the token file with open('/var/run/awssmatoken') as fp: token = fp.read() headers = { "X-Aws-Parameters-Secrets-Token": token.strip() } try: # Send the GET request with headers response = requests.get(url, headers=headers) # Check if the request was successful if response.status_code == 200: # Return the secret value return response.text else: # Handle error cases raise Exception(f"Status code {response.status_code} - {response.text}") except Exception as e: # Handle network errors raise Exception(f"Error: {e}")

了解 RefreshNow 参数

AWS 工作负载凭证提供程序使用内存缓存来存储密钥值,并定期刷新这些值。默认情况下,当您在生存时间(TTL)到期后请求密钥时,就会发生此刷新,通常每 300 秒刷新一次。但是,这种方法有时会导致密钥值过时,特别是如果密钥在缓存条目过期之前轮换。

为了解决此限制, AWS 工作负载凭证提供程序支持 URL refreshNow 中名为的参数。您可以使用此参数强制立即刷新密钥的值,从而绕过缓存并确保您拥有最新的信息。

默认行为(没有 refreshNow)
  • 在 TTL 过期之前使用缓存值

  • 仅在 TTL 之后刷新密钥(默认为 300 秒)

  • 如果密钥在缓存过期之前轮换,则可能会返回旧值

使用 refreshNow=true 的行为
  • 完全绕过缓存

  • 直接从 Secrets Manager 中检索最新的密钥值

  • 使用新值更新缓存并重置 TTL

  • 确保您始终获得最新的密钥值

Force-refresh 一个秘密值

重要

refreshNow 的默认值为 false。设置为时true,它将覆盖 AWS 工作负载凭证提供者配置文件中指定的 TTL,并向密钥管理器发出 API 调用。

curl
例示例 — 使用 curl Force-refresh 的秘密

以下 curl 示例显示如何强制 AWS 工作负载凭证提供程序刷新密钥。该示例依赖于文件中存在的 SSRF,该文件是安装脚本存储示例的位置。

curl -v -H \ "X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \ 'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&refreshNow=true'
Python
例示例 — 使用 Python Force-refresh 的秘密

以下 Python 示例显示了如何从 AWS 工作负载凭证提供程序获取密钥。该示例依赖于文件中存在的 SSRF,该文件是安装脚本存储示例的位置。

import requests import json # Function that fetches the secret from AWS Workload Credentials Provider for the provided secret id. def get_secret(): # Construct the URL for the GET request url = f"http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&refreshNow=true" # Get the SSRF token from the token file with open('/var/run/awssmatoken') as fp: token = fp.read() headers = { "X-Aws-Parameters-Secrets-Token": token.strip() } try: # Send the GET request with headers response = requests.get(url, headers=headers) # Check if the request was successful if response.status_code == 200: # Return the secret value return response.text else: # Handle error cases raise Exception(f"Status code {response.status_code} - {response.text}") except Exception as e: # Handle network errors raise Exception(f"Error: {e}")

通过角色链接跨账户检索机密

角色链接使 AWS 工作负载凭证提供商能够通过使用 AWS STS AssumeRole代入 IAM 角色来检索其他 AWS 账户的密钥。 AWS 工作负载凭证提供者为每个唯一角色 ARN 创建和缓存单独的缓存客户端。每个角色客户端都维护自己的独立缓存,因此使用不同角色获取的相同密钥具有单独的缓存条目。

所需的权限

要使用角色链接,您需要满足以下条件:

  • 工作 AWS 负载凭证提供者的环境凭证必须具有目标角色 ARN 的sts:AssumeRole权限。

  • 目标角色必须拥有您要访问的机密secretsmanager:GetSecretValue和secretsmanager:DescribeSecret权限。

  • 目标角色的信任策略必须允许 AWS 工作负载凭证提供者的身份代入其身份。

检索跨账户密钥

在向 AWS 工作负载凭证提供商发出的请求中包含roleArn查询参数,以指定要代入哪个角色进行机密检索。

curl
例示例 — 使用 cur Cross-account l 进行密钥
curl -v -H \ "X-Aws-Parameters-Secrets-Token: $(</var/run/awssmatoken)" \ 'http://localhost:2773/secretsmanager/get?secretId=YOUR_SECRET_ID&roleArn=arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME'
Python
例示例 — 使用 Python 进行 Cross-account 秘密
import requests def get_secret_cross_account(): secret_id = "YOUR_SECRET_ID" role_arn = "arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME" url = f"http://localhost:2773/secretsmanager/get?secretId={secret_id}&roleArn={role_arn}" with open('/var/run/awssmatoken') as fp: token = fp.read() headers = { "X-Aws-Parameters-Secrets-Token": token.strip() } try: response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: raise Exception(f"Status code {response.status_code} - {response.text}") except Exception as e: raise Exception(f"Error: {e}")

角色链接配置和限制

使用 TOML 配置文件中的max_roles选项配置角色链接。这会将同时担任的角色的最大数量设置在 1 到 20 之间。默认值为 20。

重要

假定角色不会从 AWS 工作负载凭证提供者的角色缓存中逐出。达到最大角色数量后,带有新角色 ARN 的请求会被拒绝并400出现错误,直到 AWS 工作负载凭证提供程序重新启动。

角色链接的错误响应
400

roleArn格式无效或已达到假定角色的最大数量。

403

AWS STS AssumeRole 调用失败。验证目标角色的信任策略是否允许 AWS 工作负载凭证提供者的身份代入该信任策略。

Pre-fetch 启动时的秘密

默认情况下,当您的应用程序请求密钥时, AWS 工作负载凭证提供程序会按需获取密钥。通过预提取, AWS 工作负载凭证提供程序在启动时将指定的密钥加载到缓存中,因此您的应用程序无需等待第一次 API 调用即可立即访问它们。 Pre-fetching 作为后台任务运行- AWS 工作负载凭证提供程序立即开始接受请求,并且不会在预提取完成时阻塞。

您可以通过两种方式指定要预提取的密钥:

  • 显式密钥 -列出特定的密钥 ID 或 ARN。

  • Tag-based 发现 -通过标签密钥发现机密。工作 AWS 负载凭证提供者获取所有具有指定标签的密钥。

所需的权限

除了检索机密的标准权限外,预取还需要以下内容:

  • secretsmanager:BatchGetSecretValue— 所有预取操作均为必填项。

  • secretsmanager:ListSecrets— 仅在使用基于标签的发现时才需要。

配置预提取

在 TOML 配置文件中添加一个[capabilities.secrets_manager.prefetch]部分。以下选项可用:

cache_buffer_ratio

预取期间每个客户端要填充的最大缓存比例,范围为 0.1 到 1.0。默认值为 0.8。当达到缓冲限制时, AWS 工作负载凭证提供程序会停止预取剩余的密钥——它不会驱逐现有的缓存条目。预提取期间未加载的密钥仍可按需使用。

max_jitter_seconds

预取开始前的随机延迟(以秒为单位),范围为 0 到 10。默认值是 0。当多个提供商同时启动时,使用它可以防止整个队列的 API 调用同步。

例 Pre-fetch 使用显式机密进行配置
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "MyOtherSecret" }, ]
例 Pre-fetch 使用基于标签的发现进行配置
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.8 filter_tags = [ { key = "Environment" }, { key = "Team" }, ]

您还可以在同一个配置中组合显式机密和基于标签的发现。要进行跨账户预取,请添加该字段。role_arn有关更多信息,请参阅 通过角色链接跨账户检索机密。

例 Pre-fetch 具有跨账户访问权限的配置
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.6 max_jitter_seconds = 5 secrets = [ { secret_id = "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-AbCdEf" }, { secret_id = "cross-account-secret", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ] filter_tags = [ { key = "Environment" }, { key = "Team", role_arn = "arn:aws:iam::987654321098:role/SecretAccessRole" }, ]

配置 AWS 工作负载凭证提供商

要更改 AWS 工作负载凭据提供程序的配置,请创建 TOML 配置文件,然后调用./aws-workload-credentials-provider sm start --config config.toml。

配置文件支持嵌套格式。密钥管理器选项位于下方[capabilities.secrets_manager],其中包含缓存和安全设置的子部分。日志选项位于下方[logging]。

例嵌套配置文件示例
[logging] log_level = "INFO" log_to_file = true [capabilities.secrets_manager] enabled = true http_port = 2773 region = "us-east-1" path_prefix = "/v1/" max_conn = 800 max_roles = 20 [capabilities.secrets_manager.cache] ttl_seconds = 300 cache_size = 1000 [capabilities.secrets_manager.security] ssrf_headers = ["X-Aws-Parameters-Secrets-Token", "X-Vault-Token"] ssrf_env_variables = ["AWS_TOKEN", "AWS_SESSION_TOKEN", "AWS_CONTAINER_AUTHORIZATION_TOKEN"]
注意

仍支持根级别的平面密钥(例如http_port = 2773),以便向后兼容现有配置文件。

密钥管理器配置选项
enabled

密钥管理器功能是否处于活动状态:true或false。默认值为 true。

http_port

本地 HTTP 服务器的端口,范围在 1024 到 65535 之间。默认值为 2773。

region

用于处理请求的 AWS 区域。如果未指定区域,则 AWS 工作负载凭证提供商将从 SDK 中确定区域。有关更多信息,请参阅《AWS SDK for Rust 开发人员指南》中的 Specify your credentials and default Region。

path_prefix

用于确定请求是否为基于路径的请求的 URI 前缀。默认值为“/v1/”。

max_conn

AWS 工作负载凭据提供程序允许的来自 HTTP 客户端的最大连接数,范围为 1 到 1000。默认值为 800。

max_roles

用于跨账户访问的并发 IAM 角色的最大数量,介于 1 到 20 之间。默认值为 20。有关更多信息,请参阅 通过角色链接跨账户检索机密。

缓存选项([capabilities.secrets_manager.cache])
ttl_seconds

缓存项目的 TTL(以秒为单位),范围在 1 到 3600 之间。默认值为 300。0 表示没有缓存。

cache_size

缓存中可以存储的最大密钥数,范围为 1 至 1000。默认值为 1000。

安全选项([capabilities.secrets_manager.security])
ssrf_headers

AWS 工作负载凭证提供商检查 SSRF 令牌的标头名称列表。默认为 “X-Aws-Parameters-Secrets-Token, X-Vault-Token”。

ssrf_env_variables

AWS 工作负载凭证提供者按顺序检查 SSRF 令牌的环境变量名称列表。环境变量可以包含令牌或对令牌文件的引用,如下所示:AWS_TOKEN=file:///var/run/awssmatoken。默认为 “AWS_TOKEN, AWS_SESSION_TOKEN, AWS_CONTAINER_AUTHORIZATION_TOKEN”。

记录选项([日志])
log_level

AWS 工作负载凭据提供程序日志中报告的详细程度:调试、信息、警告、错误或无。默认值为 INFO。

log_to_file

是登录文件还 stdout/stderr是:true或false。默认值为 true。

可选功能

通过将--features标志传递给,可以使用可选功能来构建 AWS 工作负载凭证提供程序cargo build。可用功能如下:

生成功能
prefer-post-quantum

使 X25519MLKEM768 成为最高优先级的密钥交换算法。否则,该算法可用,但不是最高优先级。X25519MLKEM768 是一种混合的、后量子安全的密钥交换算法。

fips

将提供商使用的密码套件限制为仅限密码。 FIPS-approved

日志记录

本地日志记录

AWS 工作负载凭据提供程序将错误记录到本地文件中,logs/secrets_manager_provider.log或 stdout/stderr根据log_to_file配置变量记录到文件中。当您的应用程序调用 AWS 工作负载凭证提供程序获取密钥时,这些调用会显示在本地日志中。它们不会出现在 CloudTrail 日志中。

日志轮换

当文件达到 10 MB 时, AWS 工作负载凭据提供程序会创建一个新的日志文件,它总共存储最多五个日志文件。

AWS 服务日志

该日志不会转到凭据管理器 CloudTrail、或 CloudWatch。从 AWS 工作负载凭证提供商获取机密信息的请求不会出现在这些日志中。当 AWS 工作负载凭证提供者调用 Secrets Manager 以获取密钥时,该调用将记录在 CloudTrail 包含的用户代理字符串中aws-workload-credentials-provider。

您可以在 配置 AWS 工作负载凭证提供商 中配置日志记录选项。

安全注意事项

信任域

对于本地提供商架构,信任域是可以访问提供商端点和 SSRF 令牌的地方,通常是整个主机。 AWS 工作负载凭证提供者的信任域应与可用 Secrets Manager 凭据的域相匹配,以保持相同的安全状态。例如,在 Amazon EC2 上, AWS 工作负载凭证提供者的信任域将与使用 Amazon EC2 角色时的证书域相同。

重要

具有安全意识的应用程序如果尚未使用基于提供商的解决方案,并锁定了应用程序的 Secrets Manager 证书,则应考虑使用特定语言的 AWS SDK 或缓存解决方案。有关更多信息,请参阅获取密钥。