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工作負載登入資料提供者會擷取和快取記憶體中的秘密,讓您的應用程式從 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

RPM-based systems
在以 RPM 為基礎的系統上建置
  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 為基礎的系統上,安裝 開發工具 群組:

    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. 建置供應商

    使用貨運建置命令建置AWS工作負載登入資料提供者:

    cargo build --release

    您可以在 下找到可執行檔target/release/aws-workload-credentials-provider

Debian-based systems
在 Debian 型系統上建置
  1. 安裝開發工具

    在 Ubuntu 等 Debian 系統上,安裝 build-essential 套件:

    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. 建置供應商

    使用貨運建置命令建置AWS工作負載登入資料提供者:

    cargo build --release

    您可以在 下找到可執行檔target/release/aws-workload-credentials-provider

Windows
在 Windows 上建置
  1. 設定開發環境

    請遵循 Microsoft Windows 文件中在 Windows for Rust 上設定開發環境的指示。

  2. 建置供應商

    使用貨運建置命令建置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 的建置

    跨編譯 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 上安裝AWS工作負載登入資料提供者
  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

    以應用程式執行所在的使用者 ID 取代 APP_USER

Container Sidecar

您可以使用 Docker,將AWS工作負載登入資料提供者做為附屬容器與應用程式一起執行。然後,您的應用程式可以從AWS工作負載登入資料提供者提供的本機 HTTP 伺服器擷取秘密。如需 Docker 的相關資訊,請參閱 Docker 文件

為AWS工作負載登入資料提供者建立附屬容器
  1. 建立提供者 Dockerfile

    為AWS工作負載登入資料提供者附屬容器建立 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二進位檔複製到包含 Dockerfiles 和 Docker Compose 檔案的相同目錄。

  5. 建置和執行容器

    使用 Docker Compose 建置和執行容器:

    docker-compose up --build
  6. 後續步驟

    您現在可以使用AWS工作負載登入資料提供者,從用戶端容器擷取秘密。如需詳細資訊,請參閱使用AWS工作負載登入資料提供者擷取秘密

Lambda

您可以將AWS工作負載登入資料提供者封裝為 Lambda 延伸模組。然後,您可以將其做為 layer 新增至 Lambda 函數,並從 Lambda 函數呼叫AWS工作負載登入資料提供者以取得秘密。

下列指示說明如何使用 aws-workload-credentials-provider GitHub 儲存庫secrets-manager-provider-extension.sh中的範例指令碼來取得名為 MyTest 的秘密,以安裝AWS工作負載登入資料提供者做為 Lambda 延伸。

為AWS工作負載登入資料提供者建立 Lambda 延伸模組
  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_TOKENAWS_CONTAINER_AUTHORIZATION_TOKEN環境變數中設定的值 (啟用 SnapStart 的 Lambda 函數的後者變數)。或者,您可以使用 Lambda 函數的任意值來定義AWS_TOKEN環境變數,因為此變數優先於其他兩個變數。如果您選擇使用 AWS_TOKEN環境變數,則必須使用 lambda:UpdateFunctionConfiguration呼叫來設定該環境變數。

  3. 將 layer 連接至函數

    將 layer 版本連接至 Lambda 函數:

    # Attach the layer version to the Lambda function aws lambda update-function-configuration \ --function-name $LAMBDA_ARN \ --layers "$LAYER_VERSION_ARN"
  4. 更新函數程式碼

    更新您的 Lambda 函數以查詢 http://localhost:2773/secretsmanager/get?secretId=MyTest X-Aws-codes-Secrets-Token標頭值設定為從上述環境變數取得的 SSRF 字符值,以擷取秘密。請務必在應用程式程式碼中實作重試邏輯,以因應 Lambda 延伸模組的初始化和註冊延遲。

  5. 測試函數

    叫用 Lambda 函數來驗證是否正確擷取秘密。

使用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工作負載登入資料提供者快取存取秘密。如需詳細資訊,請參閱安全考量

請求範例

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中稱為 的參數。您可以使用此參數強制立即重新整理秘密的值、略過快取,並確保您擁有up-to-date資訊。

預設行為 (不含 refreshNow)
  • 使用快取值,直到 TTL 過期

  • 僅在 TTL 之後重新整理秘密 (預設 300 秒)

  • 如果秘密在快取過期之前輪換,可能會傳回過時的值

使用 的行為 refreshNow=true
  • 完全略過快取

  • 直接從 Secrets Manager 擷取最新的秘密值

  • 使用新值更新快取並重設 TTL

  • 確保您一律取得最新的秘密值

強制重新整理秘密值

重要

refreshNow 的預設值為 false。當設定為 時true,它會覆寫AWS工作負載登入資料提供者組態檔案中指定的 TTL,並對 Secrets Manager 進行 API 呼叫。

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&refreshNow=true'
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&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工作負載登入資料提供者透過使用 擔任 IAM 角色,從其他AWS帳戶擷取秘密AWS STSAssumeRole。AWS工作負載登入資料提供者會為每個唯一角色 ARN 建立和快取個別的快取用戶端。每個角色用戶端都會維護自己的獨立快取,因此使用不同角色擷取的相同秘密會有不同的快取項目。

所需的許可

若要使用角色鏈結,您需要下列項目:

  • AWS工作負載登入資料提供者的環境登入資料必須具有目標角色 ARN 的sts:AssumeRole許可。

  • 目標角色必須具有您要存取之秘密的 secretsmanager:GetSecretValuesecretsmanager:DescribeSecret許可。

  • 目標角色的信任政策必須允許AWS工作負載登入資料提供者的身分擔任該角色。

擷取跨帳戶秘密

在對AWS工作負載登入資料提供者的請求中包含roleArn查詢參數,以指定要擔任哪個角色進行秘密擷取。

curl
範例範例 – 使用 curl 的跨帳戶秘密
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 的跨帳戶秘密
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工作負載登入資料提供者的角色快取中移出。一旦達到角色數量上限,具有新角色 ARNs請求就會遭到拒絕,並顯示400錯誤,直到AWS工作負載登入資料提供者重新啟動為止。

角色鏈結的錯誤回應
400

roleArn 格式無效或已達到擔任的角色數量上限。

403

AWS STSAssumeRole 呼叫失敗。確認目標角色的信任政策允許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 功能是否處於作用中狀態: truefalse。預設值為 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: truefalse。預設值為 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 或快取解決方案。如需詳細資訊,請參閱取得秘密