

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Systems Manager Parameter Store 指定敏感数据
<a name="specifying-sensitive-data-parameters"></a>

使用 AWS Batch，您可以将敏感数据注入容器，方法是将敏感数据存储在 P AWS Systems Manager arameter Store 参数中，然后在容器定义中引用它们。

**Topics**
+ [使用 Systems Manager Parameter Store 指定敏感数据时的注意事项](#secrets--parameterstore-considerations)
+ [AWS Batch 密钥所需的 IAM 权限](#secrets-iam-parameters)
+ [作为环境变量注入敏感数据](#secrets-envvar-parameters)
+ [在日志配置中注入敏感数据](#secrets-logconfig-parameters)
+ [创建 AWS Systems Manager 参数存储参数](#secrets-create-parameter)

## 使用 Systems Manager Parameter Store 指定敏感数据时的注意事项
<a name="secrets--parameterstore-considerations"></a>

使用 Systems Manager Parameter Store 参数指定容器的敏感数据时，应考虑以下事项。
+ 此功能要求您的容器实例具有 1.23.0 版或更高版本的容器代理。但是，我们建议使用最新的容器代理版本。有关检查您的代理版本和更新到最新版本的信息，请参阅 *Amazon Elastic Container Service 开发人员指南* 中的 [更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)。
+ 最初启动容器时，会为您的作业将敏感数据注入容器中。如果随后更新或轮换密钥或 Parameter Store 参数，则容器将不会自动接收已更新的值。您必须启动一个新作业，才能强制启动一个包含更新的密钥的新作业。

## AWS Batch 密钥所需的 IAM 权限
<a name="secrets-iam-parameters"></a>

要使用此功能，您必须具有作业执行角色，并在作业定义中引用它。这允许 Amazon ECS 容器代理提取必要的 AWS Systems Manager 资源。有关更多信息，请参阅 [AWS Batch IAM 执行角色](execution-IAM-role.md)。

要提供对您创建的 P AWS Systems Manager arameter Store 参数的访问权限，请手动将以下权限作为内联策略添加到执行角色。有关更多信息，请参阅 *IAM 用户指南*中的[添加和删除 IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `ssm:GetParameters`— 当您在任务定义中引用 Systems Manager Parameter Store 参数时，这是必填项。
+ `secretsmanager:GetSecretValue`— 当您直接引用 Secrets Manager 密钥或者您的 System Manager Parameter Store 参数在任务定义中引用 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>

在容器定义中，使用要在容器中设置的环境变量的名称和包含要提供给容器的敏感数据的 Systems Manager Parameter Store 参数的完整 ARN 指定 `secrets`。

以下是任务定义的片段，其中显示引用 Systems Manager Parameter Store 参数时的格式。如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域，则可以使用参数的完整 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` 时，您可以使用要在容器中设置的日志驱动程序选项的名称以及包含要提供给容器的敏感数据的 Systems Manager Parameter Store 参数的完整 ARN 指定 `secretOptions`。

**重要**  
如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域，则可以使用参数的完整 ARN 或名称。如果参数存在于不同的区域，则必须指定完整的 ARN。

以下是任务定义的片段，其中显示引用 Systems Manager Parameter Store 参数时的格式。

```
{
  "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)。

**创建 Parameter Store 参数**

1. 打开 AWS Systems Manager 控制台，网址为[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)。

1. 在导航窗格中，依次选择 **Parameter Store** 和 **Create parameter (创建参数)**。

1. 对于 **Name (名称)**，键入层次结构和参数名称。例如，键入 `test/database_password`。

1. 对于 **Description (描述)**，键入可选描述。

1. 对于 “**类型**”，选择 “**字符串**” **StringList**、“或” **SecureString**。
**注意**  
如果您选择 **SecureString**，则会出现 **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)。
在控制台中使用具有自定义 KMS 键 别名或别名 ARN 的 `key-id` 参数创建安全字符串参数时，您必须在别名前面指定前缀 `alias/`。以下是 ARN 示例：  

     ```
     arn:aws:kms:us-east-2:123456789012:alias/MyAliasName
     ```
以下是别名示例：  

     ```
     alias/MyAliasName
     ```

1. 对于 **Value (值)**，键入一个值。例如 `MyFirstParameter`。如果您选择 **SecureString**，则该值将完全按照您输入的值进行屏蔽。

1. 选择**创建参数**。