本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 |
471c1978f8bf63a0a0aeefb425e974ac3c816c7e04feb302236512eea37516c7e04feb302236512eea375160de4 |
|
|
Linux |
aarch64 |
8b09dc4e58b84379f580a9a9ae179940bcb3de0338421f638a421f638a43376bf73376bf73376bf73380ffb6 |
|
|
Windows |
x86-64 |
5fbdac4017e630556b94b90e5ed9ed9ed11be69ac7a47e67a47e67e20181ce990dbe12 |
构建 AWS 来自来源的工作负载凭证提供商
或者,您可以从源代码构建 AWS 工作负载凭证提供程序。在开始之前,请确保为您的平台安装了标准的开发Rust工具和工具。
注意
当前,在 macOS 上启用该fips功能来构建提供商需要以下解决方法:
-
创建名为
SDKROOT的环境变量,该变量设置为运行xcrun --show-sdk-path的结果
安装 AWS 工作负载凭证提供商
从以下安装选项中选择您的计算环境。
使用检索机密 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 工作负载凭据提供程序缓存中的密钥。有关更多信息,请参阅 安全注意事项。
示例请求
了解 RefreshNow 参数
AWS 工作负载凭证提供程序使用内存缓存来存储密钥值,并定期刷新这些值。默认情况下,当您在生存时间(TTL)到期后请求密钥时,就会发生此刷新,通常每 300 秒刷新一次。但是,这种方法有时会导致密钥值过时,特别是如果密钥在缓存条目过期之前轮换。
为了解决此限制, AWS 工作负载凭证提供程序支持 URL refreshNow 中名为的参数。您可以使用此参数强制立即刷新密钥的值,从而绕过缓存并确保您拥有最新的信息。
- 默认行为(没有
refreshNow) -
-
在 TTL 过期之前使用缓存值
-
仅在 TTL 之后刷新密钥(默认为 300 秒)
-
如果密钥在缓存过期之前轮换,则可能会返回旧值
-
- 使用
refreshNow=true的行为 -
-
完全绕过缓存
-
直接从 Secrets Manager 中检索最新的密钥值
-
使用新值更新缓存并重置 TTL
-
确保您始终获得最新的密钥值
-
Force-refresh 一个秘密值
重要
refreshNow 的默认值为 false。设置为时true,它将覆盖 AWS 工作负载凭证提供者配置文件中指定的 TTL,并向密钥管理器发出 API 调用。
通过角色链接跨账户检索机密
角色链接使 AWS 工作负载凭证提供商能够通过使用 AWS STS AssumeRole代入 IAM 角色来检索其他 AWS 账户的密钥。 AWS 工作负载凭证提供者为每个唯一角色 ARN 创建和缓存单独的缓存客户端。每个角色客户端都维护自己的独立缓存,因此使用不同角色获取的相同密钥具有单独的缓存条目。
所需的权限
要使用角色链接,您需要满足以下条件:
-
工作 AWS 负载凭证提供者的环境凭证必须具有目标角色 ARN 的
sts:AssumeRole权限。 -
目标角色必须拥有您要访问的机密
secretsmanager:GetSecretValue和secretsmanager:DescribeSecret权限。 -
目标角色的信任策略必须允许 AWS 工作负载凭证提供者的身份代入其身份。
检索跨账户密钥
在向 AWS 工作负载凭证提供商发出的请求中包含roleArn查询参数,以指定要代入哪个角色进行机密检索。
角色链接配置和限制
使用 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 或缓存解决方案。有关更多信息,请参阅获取密钥。