本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 Amazon ECS環境變數擷取 Secrets Manager 秘密
當您將秘密插入為環境變數時,您可以指定秘密的完整內容、秘密中的特定JSON金鑰,或要注入的秘密特定版本。這可協助您控制向容器公開的敏感資料。如需有關秘密版本控制的詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager重要術語和概念。
使用環境變數將 Secrets Manager 秘密注入容器時,應考慮下列事項。
-
敏感資料會在初次啟動容器時,嵌入您的容器。如果後續更新或輪換秘密,則容器不會自動收到更新的值。您必須啟動新的任務,或如果任務是服務的一部分,您可以更新服務,並使用 Force new deployment (強制新的部署) 選項強制服務來啟動新的任務。
-
對於 上的 Amazon ECS任務 AWS Fargate,請考慮下列事項:
-
若要將秘密的完整內容作為環境變數或在日誌組態中插入,您必須使用平台版本
1.3.0
或更新版本。如需相關資訊,請參閱 適用於 Amazon 的 Fargate 平台版本 ECS。 -
若要將特定JSON金鑰或秘密版本插入環境變數或日誌組態中,您必須使用平台版本
1.4.0
或更新版本 (Linux) 或1.0.0
(Windows)。如需相關資訊,請參閱 適用於 Amazon 的 Fargate 平台版本 ECS。
-
-
對於 上的 Amazon ECS任務EC2,應考慮下列事項:
-
若要使用特定JSON金鑰或秘密版本來注入秘密,您的容器執行個體必須具有容器代理程式的版本
1.37.0
或更新版本。不過,我們建議您使用最新版的容器代理程式。如需檢查代理程式版本及更新至最新版本的資訊,請參閱「更新 Amazon ECS容器代理程式」。若要插入秘密的完整內容做為環境變數,或在日誌組態中插入秘密,則容器執行個體必須有
1.22.0
版或更新版本的容器代理程式。
-
-
使用介面VPC端點增強安全控制,並透過私有子網路連線至 Secrets Manager。您必須為 Secrets Manager 建立介面VPC端點。如需VPC端點的相關資訊,請參閱 AWS Secrets Manager 使用者指南 中的建立VPC端點。如需使用 Secrets Manager 和 Amazon 的詳細資訊VPC,請參閱如何在 Amazon 中連線至 Secrets Manager 服務VPC
。 -
對於設定為使用
awslogs
日誌記錄驅動程式的 Windows 任務,您也必須在容器執行個體上設定ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE
環境變數。使用下列語法:<powershell> [Environment]::SetEnvironmentVariable("ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE", $TRUE, "Machine") Initialize-ECSAgent -Cluster <cluster name> -EnableTaskIAMRole -LoggingDrivers '["json-file","awslogs"]' </powershell>
-
您的任務定義必須使用任務執行角色搭配 Secrets Manager 的其他許可。如需詳細資訊,請參閱Amazon ECS任務執行IAM角色。
建立 AWS Secrets Manager 秘密
您可以使用 Secrets Manager 主控台為您的敏感資料建立秘密。如需詳細資訊,請參閱 AWS Secrets Manager 使用者指南 中的建立 AWS Secrets Manager 秘密。
將環境變數新增至容器定義
您可以在容器定義中指定下列項目:
-
包含要在容器中設定之環境變數名稱的
secrets
物件。 -
Secrets Manager 秘密的 Amazon Resource Name (ARN)
-
包含要提供給容器之敏感資料的其他參數
下列範例示範了必須為 Secrets Manager 秘密指定的完整語法。
arn:aws:secretsmanager:
region
:aws_account_id
:secret:secret-name
:json-key
:version-stage
:version-id
以下部分說明其他參數。這些參數雖然是選用,但如果您不使用,則必須包含冒號 :
來使用預設值。以下提供範例深入說明。
json-key
-
使用您要設為環境變數值的值,來指定金鑰/值對中的金鑰名稱。僅支援 JSON 格式的值。如果您未指定JSON金鑰,則會使用秘密的完整內容。
version-stage
-
指定您要使用之秘密版本的預備標籤。如果指定了版本預備標籤,就無法指定版本 ID。如果未指定版本階段,則預設會擷取具有
AWSCURRENT
階段標籤的秘密。預備標籤會用來在不同版本的秘密更新或輪換時加以追蹤。每個版本的秘密都有一或多個預備標籤和 ID。如需詳細資訊,請參閱 《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager的重要術語和概念。
version-id
-
針對您要使用的秘密版本,指定其唯一識別符。如果指定了版本 ID,就無法指定版本預備標籤。如果未指定版本 ID,則預設會擷取具有
AWSCURRENT
階段標籤的秘密。版本IDs用於追蹤更新或輪換的秘密的不同版本。每個版本的秘密都有 ID。如需詳細資訊,請參閱 《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager的重要術語和概念。
容器定義範例
下列範例示範您可以在容器定義中參考 Secrets Manager 秘密的方法。
範例 參考完整秘密
以下是任務定義的程式碼片段,顯示參考 Secrets Manager 秘密全文時的格式。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:secret_name-AbCdEf
" }] }] }
若要從容器內存取此秘密的值,您需要呼叫 $environment_variable_name
。
範例 參考秘密中的特定金鑰
以下顯示來自get-secret-value命令的範例輸出,其中顯示秘密的內容,以及與其相關聯的版本暫存標籤和版本 ID。
{ "ARN": "arn:aws:secretsmanager:
region
:aws_account_id
:secret:appauthexample-AbCdEf
", "Name": "appauthexample
", "VersionId": "871d9eca-18aa-46a9-8785-981ddEXAMPLE
", "SecretString": "{\"username1
\":\"password1
\",\"username2
\":\"password2
\",\"username3
\":\"password3
\"}", "VersionStages": [ "AWSCURRENT
" ], "CreatedDate": 1581968848.921 }
透過在 結尾指定金鑰名稱,參考容器定義中先前輸出的特定金鑰ARN。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:appauthexample-AbCdEf
:username1
::" }] }] }
範例 參考特定秘密版本
以下示範 describe-secret 命令的範例輸出,會顯示秘密的未加密內容,以及所有版本秘密的中繼資料。
{ "ARN": "arn:aws:secretsmanager:
region
:aws_account_id
:secret:appauthexample-AbCdEf
", "Name": "appauthexample
", "Description": "Example of a secret containing application authorization data.", "RotationEnabled": false, "LastChangedDate": 1581968848.926, "LastAccessedDate": 1581897600.0, "Tags": [], "VersionIdsToStages": { "871d9eca-18aa-46a9-8785-981ddEXAMPLE
": [ "AWSCURRENT
" ], "9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE
": [ "AWSPREVIOUS
" ] } }
透過在 結尾指定金鑰名稱,參考容器定義中先前輸出的特定版本預備標籤ARN。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:appauthexample-AbCdEf
::AWSPREVIOUS
:" }] }] }
透過在 結尾指定金鑰名稱,參考容器定義中先前輸出的特定版本 IDARN。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:appauthexample-AbCdEf
:::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE
" }] }] }
範例 參考秘密的特定金鑰和版本預備標籤
以下說明如何參考秘密中的特定金鑰和特定版本預備標籤。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:appauthexample-AbCdEf
:username1
:AWSPREVIOUS
:" }] }] }
若要指定特定的金鑰和版本 ID,請使用下列語法。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:secretsmanager:region
:aws_account_id
:secret:appauthexample-AbCdEf
:username1
::9d4cb84b-ad69-40c0-a0ab-cead3EXAMPLE
" }] }] }
如需有關如何使用環境變數中指定的秘密建立任務定義的資訊,請參閱 使用主控台建立 Amazon ECS任務定義。