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工作负载凭证提供程序在内存中检索和缓存机密,允许您的应用程序从本地主机获取密钥,而不必直接调用 Secrets Manager。AWS工作负载凭证提供程序只能读取密钥,无法对其进行修改。

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

重要

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

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

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

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

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

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

注意

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

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

构建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 系统上,安装开发工具组:AL2023

    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
要安装  AWS Amazon EC2 上的工作负载凭证提供商
  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. Package 提供者层

    在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_TOKENAWS_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-TokenAWS工作负载凭证提供程序拒绝没有此标头或具有无效 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}")

了解 refresh Now 参数

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

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

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

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

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

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

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

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

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

Force-refresh 一个秘密的价值

重要

refreshNow 的默认值为 false。设置为时true,它将覆盖AWS工作负载凭证提供程序配置文件中指定的 TTL,并对 Secrets Manager 进行 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
例示例 — Force-refresh 使用 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&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 STSAssumeRole代替 IAM 角色从其他AWS账户检索机密。AWS工作负载凭证提供程序为每个唯一角色 ARN 创建和缓存单独的缓存客户端。每个角色客户端都维护自己的独立缓存,因此使用不同角色获取的相同密钥具有单独的缓存条目。

所需的权限

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

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

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

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

检索跨账户密钥

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

curl
例示例 — 使用 curl 的 Cross-account 秘密
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 STSAssumeRole 调用失败。验证目标角色的信任策略是否允许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

配置文件支持嵌套格式。Secrets Manager 选项位于下方[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)。

Secrets Manager 配置选项
enabled

Secrets Manager 功能是否处于活动状态:truefalse。默认值为 true

http_port

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

region

用于请求的AWS区域。如果未指定区域,则AWS工作负载凭证提供程序将根据软件开发工具包确定区域。有关更多信息,请参阅《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。有关更多信息,请参阅 使用角色链跨账户检索机密

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

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

cache_size

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

安全选项([capabil ities.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是:truefalse。默认值为 true

可选功能

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

生成功能
prefer-post-quantum

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

fips

将提供者使用的密码套件仅限于密码。 FIPS-approved

日志记录

本地日志记录

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

日志轮换

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

AWS服务日志

日志不会转到 Secrets Manager 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 或缓存解决方案。有关更多信息,请参阅获取密钥