使用 Secrets Manager 指定敏感資料 - AWS Batch

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Secrets Manager 指定敏感資料

使用時 AWS Batch,您可以將敏感資料插入工作,方法是將敏感資料儲存在機 AWS Secrets Manager 密中,然後在工作定義中參照這些資料。Secrets Manager 密碼中儲存的機密資料可以作為環境變數公開給工作,也可以做為記錄組態的一部分公開給工作。

當您將秘密做為環境變數插入時,可以指定 JSON 金鑰或要插入的秘密版本。此程序可協助您控制公開給工作的機密資料。如需有關秘密版本控制的詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager重要術語和概念

使用 Secrets Manager 指定敏感資料的注意事項

使用 Secrets Manager 指定工作的敏感資料時,應考慮下列事項。

  • 若要使用特定 JSON 金鑰或密碼版本插入機密,運算環境中的容器執行個體必須安裝 Amazon ECS 容器代理程式的 1.37.0 版或更新版本。不過,我們建議您使用最新版的容器代理程式。如需有關檢查代理程式版本和更新至最新版本的資訊,請參閱 Amazon 彈性容器服務開發人員指南中的更新 Amazon ECS 容器代理程式

    若要將密碼的完整內容插入為環境變數,或在記錄組態中插入密碼,您的容器執行個體必須具有容器代理程式的 1.23.0 版或更新版本。

  • 僅支援儲存文字資料的密碼,這些密碼是使用 CreateSecretAPI SecretString 參數建立的密碼。不支援儲存二進位資料的密碼,這些密碼是使用 CreateSecretAPI SecretBinary 參數建立的機密。

  • 使用參考 Secrets Manager 密碼的工作定義來擷取工作的機密資料時,如果您同時使用介面虛擬私人雲端端點,則必須為 Secrets Manager 建立介面 VPC 人雲端端點。如需詳細資訊,請參閱 《AWS Secrets Manager 使用者指南》中的搭配使用 Secrets Manager 與 VPC 端點

  • 工作初始啟動時,會將機密資料插入您的工作中。如果密碼隨後更新或輪替,工作不會自動接收更新的值。您必須啟動新工作,才能強制服務啟動具有更新密碼值的全新工作。

AWS Batch 密碼所需的 IAM 許可

若要使用此功能,您必須具有執行角色,並在工作定義中參照它。這可讓容器代理程式提取必要的 Secrets Manager 資源。如需詳細資訊,請參閱 AWS Batch 執行IAM角色

若要提供對您所建立之 Secrets Manager 密碼的存取權,請手動將下列權限新增為內嵌原則至執行角色。如需詳細資訊,請參閱 IAM 使用者指南中的新增和移除 IAM 政策

  • secretsmanager:GetSecretValue - 如果您要參考 Secrets Manager 秘密,則需要此項目。

  • kms:Decrypt - 只有在您的秘密使用自訂的 KMS 金鑰而非預設金鑰時,才需要此項目。您的自訂金鑰的 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>" ] } ] }

插入敏感資料作為環境變數

在工作定義中,您可以指定下列項目:

  • 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 秘密全文時的格式。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }
範例 參考秘密中的特定金鑰

以下顯示來自命令的範例輸出,該get-secret-value命令會顯示密碼的內容,以及與密碼相關聯的版本暫存標籤和版本 ID。

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}

在 ARN 結尾指定金鑰名稱,來在容器定義中參考上一個輸出的特定金鑰。

{ "containerProperties": [{ "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-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "AWSPREVIOUS"
        ]
    }
}

在 ARN 結尾指定金鑰名稱,來在容器定義中參考上一個輸出的特定版本預備標籤。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:" }] }] }

在 ARN 結尾指定金鑰名稱,來在容器定義中參考上一個輸出的特定版本 ID。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }
範例 參考秘密的特定金鑰和版本預備標籤

以下說明如何參考秘密中的特定金鑰和特定版本預備標籤。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }] }

若要指定特定的金鑰和版本 ID,請使用下列語法。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }

將敏感資料插入日誌組態

在您的工作定義中,當指定一個時,logConfiguration您可以secretOptions使用要在容器中設定的記錄驅動程式選項名稱,以及包含要呈現給容器之敏感資料的 Secrets Manager 密碼的完整 ARN 來指定。

以下是工作定義的片段,顯示參考 Secret Manager 密碼時的格式。

{ "containerProperties": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

建立 AWS Secrets Manager 密碼

您可以使用 Secrets Manager 主控台為您的敏感資料建立秘密。如需詳細資訊,請參閱 《AWS Secrets Manager 使用者指南》中的建立基本秘密

建立基本秘密

使用 Secrets Manager 為您的敏感資料建立秘密。

  1. 開啟位於的 Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

  2. 選擇 Store a new secret (存放新機密)。

  3. 針對 Select secret type (選取秘密類型),選擇 Other type of secrets (其他秘密類型)

  4. 將自訂秘密詳細資訊指定為 Key (金鑰)Value (值) 對。例如,您可以指定 UserName 的金鑰,然後提供適當的使用者名稱作為其值。新增名為 Password 的第二個金鑰,再輸入密碼文字作為其值。您也可以新增資料庫名稱、伺服器位址或 TCP 連接埠的項目。您可以新增任意數量的對組用以存放您需要的資訊。

    或者,您可以選擇 Plaintext (純文字) 標籤,然後以任何您喜歡的方式輸入秘密值。

  5. 選擇您要用來 AWS KMS 加密密碼中受保護文字的加密金鑰。如果您未選擇一個金鑰,則 Secrets Manager 將查看帳戶是否有預設金鑰,若有便會使用該金鑰。如果預設金鑰不存在,Secrets Manager 將自動為您建立一個。您也可以選擇 Add new key (新增金鑰) 來建立專供此秘密使用的自訂 KMS 金鑰。若要建立自己的 KMS 金鑰,您必須擁有在帳戶中建立 KMS 金鑰的許可。

  6. 選擇下一步

  7. 針對 Secret name (秘密名稱),請輸入可選的路徑與名稱,例如 production/MyAwesomeAppSecretdevelopment/TestSecret,然後選擇 Next (下一步)。您也可以選擇性新增描述,協助您日後回憶起此秘密的用途。

    秘密名稱必須是 ASCII 字母、數字或下列任一字元:/_+=.@-

  8. (選用) 在此階段,您可以為秘密設定輪換。針對此程序,維持 Disable automatic rotation (停用自動輪換),然後選擇 Next (下一步)

    如需如何設定新密碼或現有密碼輪換的相關資訊,請參閱輪換您的 AWS Secrets Manager 密碼

  9. 檢視您的設定,然後選擇 Store secret (存放秘密) 以儲存您在 Secrets Manager 中輸入作為新秘密的所有內容。