本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS Secrets Manager 秘密 AWS Lambda 函數
您可以使用 AWS 要擷取和快取的參數和密碼 Lambda 擴充功能 AWS Secrets Manager Lambda 函數中的秘密,而不使用SDK. 擷取快取的秘密比從 Secrets Manager 中擷取要快。由於呼叫 Secrets Manager 需要付費APIs,因此使用快取可以降低成本。延伸模組可以擷取 Secrets Manager 秘密和 Parameter Store 參數。如需參數存放區的相關資訊,請參閱參數存放區與 Lambda 擴充功能整合 AWS Systems Manager 使用者指南。
Lambda 延伸模組是新增至 Lambda 函數功能的隨附程序。如需詳細資訊,請參閱《Lambda 開發人員指南》中的 Lambda 延伸模組。如需在容器映像中使用延伸模組的詳細資訊,請參閱《在容器映像中使用 Lambda 層和延伸模組PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
設定為 debug
。
為了提供參數和密碼的記憶體內快取,擴充功能會將本機HTTP端點 (本機主機連接埠 2773) 公開給 Lambda 環境。您可以設定環境變數 PARAMETERS_SECRETS_EXTENSION_HTTP_PORT
來設定連接埠。
Lambda 會將與函數所要求並行層級相符的另外執行個體具現化。每個執行個體都彼此隔離,並維護自己組態資料的本機快取。如需 Lambda 執行個體和並行的詳細資訊,請參閱《Lambda 開發人員指南》中的管理 Lambda 函數的並行。
若要新增的擴充功能ARM,您必須使用 Lambda 函數的arm64
架構。如需詳細資訊,請參閱《Lambda 開發人員指南》中的 Lambda 指令集架構。擴充功能支援ARM以下地區:亞太區域 (孟買)、美國東部 (俄亥俄)、歐洲 (愛爾蘭)、歐洲 (法蘭克福)、歐洲 (蘇黎世)、美國東部 (維吉尼亞北部)、歐洲 (倫敦)、歐洲 (西班牙)、亞太區域 (東京)、美國西部 (奧勒岡)、亞太區域 (新加坡)、亞太區域 (海德拉巴) 和亞太區域 (雪梨)。
擴展程序使用 AWS 用戶端。如需有關設定 AWS 用戶端,請參閱中的設定參考 AWS SDK和工具參考指南。如果您的 Lambda 函數在中執行VPC,則需要建立VPC端點,以便擴充功能可以呼叫 Secrets Manager。如需詳細資訊,請參閱使用 AWS Secrets Manager VPC 端點。
必要許可:
Lambda 執行角色必須具有密碼的
secretsmanager:GetSecretValue
權限。如果密碼是使用客戶管理的金鑰加密,而不是 AWS 受管金鑰
aws/secretsmanager
,執行角色也需要KMS金鑰的kms:Decrypt
權限。
若要使用 AWS 參數和秘密 Lambda 擴展
-
添加 AWS 具名的圖層 AWS 參數和秘密 Lambda 擴展到您的函數。如需指示,請參閱 Lambda 開發人員指南中的將圖層新增至函數。如果您使用 AWS CLI 要添加圖層,您需要ARN擴展名。如需的清單ARNs,請參閱 AWS 參數和秘密 Lambda 擴展 ARNs AWS Systems Manager 使用者指南。
-
將許可授予 Lambda 執行角色,以便能夠存取秘密:
-
秘密的
secretsmanager:GetSecretValue
許可。請參閱 範例:擷取每個秘密值的許可。 -
(選擇性) 如果密碼是使用客戶管理的金鑰加密,而非 AWS 受管金鑰
aws/secretsmanager
,執行角色也需要KMS金鑰的kms:Decrypt
權限。 -
您可以將屬性型存取控制 (ABAC) 與 Lambda 角色搭配使用,以允許更精細地存取帳戶中的密碼。如需詳細資訊,請參閱 範例:使用標籤控制對秘密的存取 和 範例:使用符合秘密標籤的標籤限制對身分的存取。
-
-
使用 Lambda 環境變數設定快取。
-
若要從延伸模組快取擷取秘密,您必須先將
X-AWS-Parameters-Secrets-Token
新增至請求標頭。將字符設定為AWS_SESSION_TOKEN
,這會由 Lambda 針對所有運行中的函數提供。使用此標頭表示呼叫者位於 Lambda 環境中。以下 Python 範例說明如何新增標頭。
import os headers = {"X-Aws-Parameters-Secrets-Token": os.environ.get('AWS_SESSION_TOKEN')}
-
若要擷取 Lambda 函數中的密碼,請使用下列其中一個HTTPGET要求:
-
若要擷取密碼
secretId
,請使用密碼的ARN或名稱。GET: /secretsmanager/get?secretId=
secretId
-
若要透過暫存標籤擷取先前的密碼值或特定版本
secretId
,請使用密碼的ARN或名稱,以及用於versionStage
,請使用暫存標籤。GET: /secretsmanager/get?secretId=
secretId
&versionStage=AWSPREVIOUS
若要依 ID 擷取特定密碼版本
secretId
,請使用密碼的ARN或名稱,以及使用版本 ID。versionId
GET: /secretsmanager/get?secretId=
secretId
&versionId=versionId
範例 擷取機密 (Python)
以下 Python 範例說明如何擷取秘密,並使用
json.loads
剖析結果。 secrets_extension_endpoint = "http://localhost:" + \ secrets_extension_http_port + \ "/secretsmanager/get?secretId=" + \
<secret_name>
r = requests.get(secrets_extension_endpoint, headers=headers) secret = json.loads(r.text)["SecretString"] # load the Secrets Manager response into a Python dictionary, access the secret -
AWS 參數和秘密 Lambda 擴充環境變數
您可以使用下列環境變數設定延伸模組。
如需如何使用環境變數的相關資訊,請參閱《Lambda 開發人員指南》中的使用 Lambda 環境變數。
PARAMETERS_SECRETS_EXTENSION_CACHE_ENABLED
-
設定為 true 以快取參數和秘密。設定為 false 則不快取。預設為 true。
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE
要快取的秘密和參數數量上限。該值必須介於 0 到 1000 之間。值為 0 表示不快取。如果
SSM_PARAMETER_STORE_TTL
和SECRETS_MANAGER_TTL
都是 0,則忽略此變數。預設值為 1000。PARAMETERS_SECRETS_EXTENSION_HTTP_PORT
本機伺服器的連接HTTP埠。預設值為 2773。
PARAMETERS_SECRETS_EXTENSION_LOG_LEVEL
-
延伸模組提供的記錄層級:
debug
、info
、warn
、error
或none
。設定為debug
以查看快取組態。預設值為info
。 PARAMETERS_SECRETS_EXTENSION_MAX_CONNECTIONS
-
擴充功能用來向參數存放區或 Secrets Manager 發出要求的用HTTP戶端連線數目上限。這是每個用戶端的組態。預設值為 3。
SECRETS_MANAGER_TIMEOUT_MILLIS
-
對 Secrets Manager 的請求逾時 (以毫秒為單位)。值為 0 表示沒有逾時。預設值為 0。
SECRETS_MANAGER_TTL
-
TTL在幾秒鐘內緩存中的秘密。值為 0 表示不快取。最高為 300 秒。如果
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE
為 0,則忽略此變數。預設為 300 秒。 SSM_PARAMETER_STORE_TIMEOUT_MILLIS
對 Parameter Store 的請求逾時 (以毫秒為單位)。值為 0 表示沒有逾時。預設值為 0。
SSM_PARAMETER_STORE_TTL
TTL緩存中的參數(以秒為單位)。值為 0 表示不快取。最高為 300 秒。如果
PARAMETERS_SECRETS_EXTENSION_CACHE_SIZE
為 0,則忽略此變數。預設為 300 秒。