本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
透過 Amazon ECS 環境變數擷取秘密管理員機密
當您將秘密作為環境變數插入時,可以指定秘密的完整內容、秘密內的特定 JSON 金鑰或要插入的特定秘密版本。這可協助您控制向容器公開的敏感資料。如需有關秘密版本控制的詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager重要術語和概念。
使用環境變數將 Secret Manager 密碼插入容器時,應考慮下列事項。
-
敏感資料會在初次啟動容器時,嵌入您的容器。如果後續更新或輪換秘密,則容器不會自動收到更新的值。您必須啟動新的任務,或如果任務是服務的一部分,您可以更新服務,並使用 Force new deployment (強制新的部署) 選項強制服務來啟動新的任務。
-
對於上的 Amazon ECS 任務 AWS Fargate,應考慮下列事項:
-
若要將秘密的完整內容作為環境變數或在日誌組態中插入,您必須使用平台版本
1.3.0
或更新版本。如需相關資訊,請參閱適用於 Amazon ECS 的 Fargate Linux 平台版本。 -
若要將特定 JSON 金鑰或秘密版本作為環境變數或在日誌組態中插入,您必須使用平台版本
1.4.0
或更新版本 (Linux),或者1.0.0
(Windows)。如需相關資訊,請參閱適用於 Amazon ECS 的 Fargate Linux 平台版本。
-
-
對於 EC2 上的 Amazon ECS 任務,應考慮下列事項:
-
若要使用秘密的特定 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 VPC 中連接到 Secrets Manager 服務
。 -
對於設定為使用
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>
IAM 許可
若要使用此功能,您必須擁有 Amazon ECS 任務執行角色,並在您的任務定義中參考它。如需詳細資訊,請參閱 Amazon ECS 任務執行 IAM 角色。
若要將存取提供給您建立的 Secrets Manager 秘密,請將以下許可做為內嵌政策,手動新增到任務執行角色。如需詳細資訊,請參閱新增和移除 IAM 政策。
-
secretsmanager:GetSecretValue
- 如果您要參考 Secrets Manager 秘密,則需要此項目。新增從 Secrets Manager 擷取密碼的許可。 -
kms:Decrypt
– 只有在秘密使用客戶受管金鑰而非預設金鑰時,此項目為必要。客戶受管金鑰的 ARN 應該新增為資源。新增解密客戶受管金鑰的許可。
下列政策範例新增必要許可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:
region
:aws_account_id
:secret:secret_name
", "arn:aws:kms:region
:aws_account_id
:key/key_id
" ] } ] }
建立 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
階段標籤的秘密。版本 ID 會用來在不同版本的秘密更新或輪換時加以追蹤。每個版本的秘密都有 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
:" }] }] }
在 ARN 結尾指定金鑰名稱,來在容器定義中參考上一個輸出的特定版本 ID。
{ "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 任務定義。