本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用AWS工作負載登入資料提供者
AWS工作負載登入資料提供者的運作方式
AWS工作負載登入資料提供者 (先前稱為AWS Secrets Manager代理程式) 提供用戶端 HTTP 服務,協助您標準化在運算環境中從 Secrets Manager 取用秘密的方式。您可以搭配下列服務使用:
-
AWS Lambda
-
Amazon Elastic Container Service
-
Amazon Elastic Kubernetes Service
-
Amazon Elastic Compute Cloud
AWS工作負載登入資料提供者會擷取和快取記憶體中的秘密,讓您的應用程式從 localhost 取得秘密,而不是直接呼叫 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
安裝AWS工作負載登入資料提供者
從下列安裝選項中選擇您的運算環境。
使用AWS工作負載登入資料提供者擷取秘密
若要擷取秘密,請使用秘密名稱或 ARN 做為查詢參數來呼叫本機AWS工作負載登入資料提供者端點。根據預設,AWS工作負載登入資料提供者會擷取秘密的AWSCURRENT版本。若要擷取不同的版本,請使用 versionStage 或 versionId 參數。
重要
為了協助保護AWS工作負載登入資料提供者,您必須在每個請求中包含 SSRF 字符標頭:X-Aws-Parameters-Secrets-Token。AWS工作負載登入資料提供者拒絕沒有此標頭或具有無效 SSRF 字符的請求。您可以在 中自訂 SSRF 標頭名稱設定AWS工作負載登入資料提供者。
所需的許可
AWS工作負載登入資料提供者使用適用於 Rust 的AWS SDK,其使用AWS登入資料提供者鏈結。這些 IAM 登入資料的身分決定AWS工作負載登入資料提供者擷取秘密的許可。
-
secretsmanager:DescribeSecret -
secretsmanager:GetSecretValue
如需許可的詳細資訊,請參閱「的許可參考 AWS Secrets Manager」。
重要
將秘密值提取至AWS工作負載登入資料提供者後,任何可存取運算環境和 SSRF 字符的使用者都可以從AWS工作負載登入資料提供者快取存取秘密。如需詳細資訊,請參閱安全考量。
請求範例
了解 refreshNow 參數
AWS工作負載登入資料提供者使用記憶體內快取來存放秘密值,它會定期重新整理。根據預設,當您在存留時間 (TTL) 過期後請求秘密時,通常會每 300 秒重新整理一次。不過,這種方法有時會導致秘密值過時,特別是當秘密在快取項目過期之前輪換時。
為了解決此限制,AWS工作負載登入資料提供者支援 URL refreshNow中稱為 的參數。您可以使用此參數強制立即重新整理秘密的值、略過快取,並確保您擁有up-to-date資訊。
- 預設行為 (不含
refreshNow) -
-
使用快取值,直到 TTL 過期
-
僅在 TTL 之後重新整理秘密 (預設 300 秒)
-
如果秘密在快取過期之前輪換,可能會傳回過時的值
-
- 使用 的行為
refreshNow=true -
-
完全略過快取
-
直接從 Secrets Manager 擷取最新的秘密值
-
使用新值更新快取並重設 TTL
-
確保您一律取得最新的秘密值
-
強制重新整理秘密值
重要
refreshNow 的預設值為 false。當設定為 時true,它會覆寫AWS工作負載登入資料提供者組態檔案中指定的 TTL,並對 Secrets Manager 進行 API 呼叫。
使用角色鏈結跨帳戶擷取秘密
角色鏈結可讓AWS工作負載登入資料提供者透過使用 擔任 IAM 角色,從其他AWS帳戶擷取秘密AWS STSAssumeRole。AWS工作負載登入資料提供者會為每個唯一角色 ARN 建立和快取個別的快取用戶端。每個角色用戶端都會維護自己的獨立快取,因此使用不同角色擷取的相同秘密會有不同的快取項目。
所需的許可
若要使用角色鏈結,您需要下列項目:
-
AWS工作負載登入資料提供者的環境登入資料必須具有目標角色 ARN 的
sts:AssumeRole許可。 -
目標角色必須具有您要存取之秘密的
secretsmanager:GetSecretValue和secretsmanager:DescribeSecret許可。 -
目標角色的信任政策必須允許AWS工作負載登入資料提供者的身分擔任該角色。
擷取跨帳戶秘密
在對AWS工作負載登入資料提供者的請求中包含roleArn查詢參數,以指定要擔任哪個角色進行秘密擷取。
角色鏈結組態和限制
使用 TOML 組態檔案中的 max_roles選項設定角色鏈結。這會設定介於 1 到 20 之間的同時擔任角色數目上限。預設值為 20。
重要
假設的角色不會從AWS工作負載登入資料提供者的角色快取中移出。一旦達到角色數量上限,具有新角色 ARNs請求就會遭到拒絕,並顯示400錯誤,直到AWS工作負載登入資料提供者重新啟動為止。
角色鏈結的錯誤回應
400-
roleArn格式無效或已達到擔任的角色數量上限。 403-
AWS STS
AssumeRole呼叫失敗。確認目標角色的信任政策允許AWS工作負載登入資料提供者的身分擔任該角色。
啟動時預先擷取秘密
根據預設,當應用程式請求秘密時,AWS工作負載登入資料提供者會隨需擷取秘密。透過預先擷取,AWS工作負載登入資料提供者會在快取啟動時將指定的秘密載入快取,讓您的應用程式可以立即存取它們,而無需等待第一次 API 呼叫。預先擷取會以背景任務的形式執行 -AWS工作負載登入資料提供者會立即開始接受請求,而不會在預先擷取完成時封鎖。
您可以透過兩種方式指定要預先擷取的秘密:
-
明確秘密 – 列出特定的秘密 IDs或 ARNs。
-
標籤型探索 – 依標籤索引鍵探索秘密。AWS工作負載登入資料提供者會擷取具有指定標籤的所有秘密。
所需的許可
除了擷取秘密的標準許可之外,預先擷取還需要下列項目:
-
secretsmanager:BatchGetSecretValue– 所有預先擷取操作都需要。 -
secretsmanager:ListSecrets– 只有在使用標籤型探索時才需要。
設定預先擷取
將[capabilities.secrets_manager.prefetch]區段新增至 TOML 組態檔案。下列選項可供使用:
cache_buffer_ratio-
在 0.1 到 1.0 的範圍內,每個用戶端在預先擷取期間要填入的快取最大部分。預設值為 0.8。達到緩衝限制時,AWS工作負載登入資料提供者會停止預先擷取剩餘的秘密,而不會移出現有的快取項目。預先擷取期間未載入的秘密仍可隨需使用。
max_jitter_seconds-
預先擷取開始之前的秒數隨機延遲,範圍介於 0 到 10。預設值為 0。當多個供應商同時啟動時,請使用此選項來防止同步的整個機群 API 呼叫。
範例具有明確秘密的預先擷取組態
[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" }, ]
範例使用標籤型探索預先擷取組態
[capabilities.secrets_manager.prefetch] cache_buffer_ratio = 0.8 filter_tags = [ { key = "Environment" }, { key = "Team" }, ]
您也可以在相同的組態中結合明確的秘密和標籤型探索。對於跨帳戶預先擷取,新增 role_arn 欄位。如需詳細資訊,請參閱使用角色鏈結跨帳戶擷取秘密。
範例具有跨帳戶存取的預先擷取組態
[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 功能是否處於作用中狀態:
true或false。預設值為true。 http_port-
本機 HTTP 伺服器的連接埠,範圍介於 1024 到 65535 之間。預設值為 2773。
region-
AWS用於請求的區域。如果未指定區域,AWS工作負載登入資料提供者會從 SDK 判斷區域。如需詳細資訊,請參閱《適用於 AWS Rust 的 SDK 開發人員指南》中的指定您的登入資料和預設區域。
path_prefix-
用來判斷請求是否為路徑型請求的 URI 字首。預設值為 "/v1/"。
max_conn-
AWS工作負載登入資料提供者允許的 HTTP 用戶端連線數目上限,範圍介於 1 到 1000。預設值為 800。
max_roles-
跨帳戶存取的同時 IAM 角色數目上限,範圍介於 1 到 20。預設值為 20。如需詳細資訊,請參閱使用角色鏈結跨帳戶擷取秘密。
快取選項 ([capabilities.secrets_manager.cache])
ttl_seconds-
快取項目的 TTL,以秒為單位,範圍介於 0 到 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」。
記錄選項 ([logging])
log_level-
AWS工作負載登入資料提供者日誌中報告的詳細資訊層級:DEBUG、INFO、WARN、 ERROR 或 NONE。預設值為 INFO。
log_to_file-
是否要登入檔案或 stdout/stderr:
true或false。預設值為true。
選用功能
將 --features旗標傳遞至 ,即可使用選用功能建置AWS工作負載登入資料提供者cargo build。可用的功能包括:
建構功能
prefer-post-quantum-
建立最高優先順序
X25519MLKEM768的金鑰交換演算法。否則,它可用,但不是最高優先順序。X25519MLKEM768是混合式、post-quantum-secure金鑰交換演算法。 fips-
將供應商使用的加密套件限制為僅 FIPS 核准的加密。
記錄
- 本機記錄
-
AWS工作負載登入資料提供者會根據
log_to_file組態變數,在本機將錯誤記錄到 檔案logs/secrets_manager_provider.log或 stdout/stderr。當您的應用程式呼叫AWS工作負載登入資料提供者以取得秘密時,這些呼叫會出現在本機日誌中。它們不會出現在 CloudTrail 日誌中。 - 日誌輪換
-
AWS工作負載登入資料提供者會在檔案達到 10 MB 時建立新的日誌檔案,最多可存放五個日誌檔案。
- 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 SDKs 或快取解決方案。如需詳細資訊,請參閱取得秘密。