

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

# 使用 Systems Manager 參數存放區指定敏感資料
<a name="specifying-sensitive-data-parameters"></a>

使用 時 AWS Batch，您可以將敏感資料儲存在參數存放區參數中 AWS Systems Manager ，然後在容器定義中參考，藉此將敏感資料注入容器。

**Topics**
+ [使用 Systems Manager 參數存放區指定敏感資料的考量事項](#secrets--parameterstore-considerations)
+ [AWS Batch 秘密所需的 IAM 許可](#secrets-iam-parameters)
+ [將敏感資料注入為環境變數](#secrets-envvar-parameters)
+ [在日誌組態中注入敏感資料](#secrets-logconfig-parameters)
+ [建立 AWS Systems Manager 參數存放區參數](#secrets-create-parameter)

## 使用 Systems Manager 參數存放區指定敏感資料的考量事項
<a name="secrets--parameterstore-considerations"></a>

使用 Systems Manager 參數存放區參數來指定容器的敏感資料時，應考慮以下事項。
+ 此功能需要您的容器執行個體具有 1.23.0 版或更新版本的容器代理程式。不過，我們建議您使用最新版的容器代理。如需有關檢查代理程式版本和更新至最新版本的資訊，請參閱[《Amazon Elastic Container Service 開發人員指南》中的更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)程式。 **
+ 最初啟動容器時，會將敏感資料注入您任務的容器中。如果後續更新或輪換秘密或參數存放區參數，則容器不會自動收到更新的值。您必須啟動新的任務，才能強制啟動具有更新秘密的新任務。

## AWS Batch 秘密所需的 IAM 許可
<a name="secrets-iam-parameters"></a>

若要使用此功能，您必須擁有執行角色，並在任務定義中參考它。這可讓 Amazon ECS 容器代理程式提取必要的 AWS Systems Manager 資源。如需詳細資訊，請參閱[AWS Batch IAM 執行角色](execution-IAM-role.md)。

若要讓您存取您建立的 AWS Systems Manager 參數存放區參數，請手動將下列許可新增為執行角色的內嵌政策。如需詳細資訊，請參閱 *IAM User Guide* 中的 [Adding and Removing IAM Policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `ssm:GetParameters` - 如果您在任務定義中參考 Systems Manager 參數存放區參數，才需要此項目。
+ `secretsmanager:GetSecretValue` - 如果您直接參考 Secrets Manager 秘密，或者您的 Systems Manager 參數存放區參數參考任務定義中的 Secrets Manager 秘密，才需要此項目。
+ `kms:Decrypt` - 只有在您的秘密使用自訂 KMS 金鑰而非預設金鑰時，才需要此項目。您的自訂金鑰的 ARN 應該新增為資源。

下列內嵌政策範例新增必要許可：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameters",
                "secretsmanager:GetSecretValue",
                "kms:Decrypt"
            ],
            "Resource": [
                "arn:aws:ssm:us-east-2:999999999999:parameter/<parameter_name>",
                "arn:aws:secretsmanager:us-east-2:999999999999:secret:<secret_name>",
                "arn:aws:kms:us-east-2:999999999999:key/<key_id>"
            ]
        }
    ]
}
```

------

## 將敏感資料注入為環境變數
<a name="secrets-envvar-parameters"></a>

在您的容器定義內，將 `secrets` 指定為要在容器中設定的環境變數名稱，以及 Systems Manager 參數存放區參數 (含有要呈現給容器的敏感資料) 的完整 ARN。

以下是任務定義的程式碼片段，顯示參考 Systems Manager 參數存放區參數時的格式。如果 Systems Manager 參數存放區參數與您啟動的任務位於相同的區域中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。

```
{
  "containerProperties": [{
    "secrets": [{
      "name": "environment_variable_name",
      "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
    }]
  }]
}
```

## 在日誌組態中注入敏感資料
<a name="secrets-logconfig-parameters"></a>

在您的容器定義內，指定 `logConfiguration` 時，您可用要在容器中設定的日誌驅動程式選項名稱指定 `secretOptions`，以及 Systems Manager 參數存放區參數 (含有要呈現給容器的敏感資料) 的完整 ARN。

**重要**  
如果 Systems Manager 參數存放區參數與您啟動的任務位於相同的區域中，則您可以使用參數的完整 ARN 或名稱。如果參數存在於不同區域，則必須指定完整 ARN。

以下是任務定義的程式碼片段，顯示參考 Systems Manager 參數存放區參數時的格式。

```
{
  "containerProperties": [{
    "logConfiguration": [{
      "logDriver": "fluentd",
      "options": {
        "tag": "fluentd demo"
      },
      "secretOptions": [{
        "name": "fluentd-address",
        "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
      }]
    }]
  }]
}
```

## 建立 AWS Systems Manager 參數存放區參數
<a name="secrets-create-parameter"></a>

您可以使用 AWS Systems Manager 主控台為您的敏感資料建立 Systems Manager 參數存放區參數。如需詳細資訊，請參閱 *《AWS Systems Manager 使用者指南》*中的[演練：在命令中建立和使用參數 (主控台)](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-console.html)。

**建立參數存放區參數**

1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

1. 在導覽窗格中，選擇 **Parameter Store (參數存放區)**、**Create parameter (建立參數)**。

1. 針對 **Name (名稱)**，輸入階層和參數名稱。例如，輸入 `test/database_password`。

1. 針對 **Description (描述)**，輸入選擇性描述。

1. 在 **Type (類型)** 中選擇 **String**、**StringList** 或 **SecureString**。
**注意**  
如果您選擇 **SecureString (SecureString)**，將會出現 **KMS Key ID (KMS 金鑰 ID)** 欄位。如果您不提供 KMS 金鑰 ID、KMS 金鑰 ARN、別名名稱或別名 ARN，系統會使用 `alias/aws/ssm`。這是 Systems Manager 的預設 KMS 金鑰。若要避免使用此金鑰，請選擇自訂金鑰。如需詳細資訊，請參閱 *《AWS Systems Manager 使用者指南》*中的[使用安全字串參數](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-about.html)。
當您在主控台使用 `key-id` 參數及自訂 KMS 金鑰別名名稱或別名 ARN 建立安全字串參數時，您必須在別名前面指定字首 `alias/`。以下是 ARN 範例：  

     ```
     arn:aws:kms:us-east-2:123456789012:alias/MyAliasName
     ```
下列是別名名稱範例：  

     ```
     alias/MyAliasName
     ```

1. 針對 **Value (值)**，輸入一個值。例如 `MyFirstParameter`。如果您選擇 **SecureString**，則會完全按照您輸入的方式遮罩該值。

1. 選擇 **Create parameter (建立參數)**。