Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

指定敏感数据

Amazon ECS 使您能够向容器中注入敏感数据,方法是将您的敏感数据存储在 AWS Secrets Manager 密钥或 AWS Systems Manager Parameter Store 参数中,然后在容器定义中引用它们。使用 EC2 和 Fargate 启动类型的任务支持此功能。

可以按以下方式将密钥对容器开放:

  • 要将敏感数据作为环境变量注入容器,请使用 secrets 容器定义参数。

  • 要引用容器的日志配置中的敏感信息,请使用 secretOptions 容器定义参数。

对于使用 Fargate 启动类型的任务,此功能要求您的任务使用平台版本 1.3.0 或更高版本。有关信息,请参阅 AWS Fargate 平台版本

注意

此功能在 GovCloud(美国东部)区域中不可用。

作为环境变量注入敏感数据

在容器定义中,使用要在容器中设置的环境变量的名称以及包含要提供给容器的敏感数据的 Secrets Manager 密钥或 Systems Manager Parameter Store 参数的完整 ARN 指定 secrets。您引用的参数必须来自同一个账户,但可以来自与使用此参数的容器不同的区域。

重要

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

以下是任务定义的片段,其中显示引用 Secrets Manager 密钥时的格式。

{ "containerDefinitions": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }

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

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

注入日志配置中的敏感数据

在容器定义中,当指定 logConfiguration 时,您可以使用要在容器中设置的日志驱动程序选项的名称以及包含要提供给容器的敏感数据的 Secrets Manager 密钥或 Systems Manager Parameter Store 参数的完整 ARN 指定 secretOptions。您引用的参数必须来自同一个账户,但可以来自与使用此参数的容器不同的区域。

重要

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

以下是任务定义的片段,其中显示引用 Secrets Manager 密钥时的格式。

{ "containerDefinitions": [{ "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" }] }] }] }

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

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

Amazon ECS 密钥所需的 IAM 权限

要使用此功能,您必须具有 Amazon ECS 任务执行角色,并在任务定义中引用它。这允许容器代理提取必要的 AWS Systems Manager 或 Secrets Manager 资源。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色

要提供对您创建的 AWS Systems Manager Parameter Store 参数的访问权限,请将以下权限作为内联策略手动添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM 策略

  • ssm:GetParameters — 当您在任务定义中引用 Systems Manager Parameter Store 参数时是必需的。

  • secretsmanager:GetSecretValue — 当您直接引用 Secrets Manager 密钥或者您的 Systems Manager Parameter Store 参数在任务定义中引用 Secrets Manager 密钥时,这是必需的。

  • kms:Decrypt — 仅当您的密钥使用自定义 KMS 密钥而不是默认密钥时才需要。您的自定义密钥的 ARN 应添加为资源。

以下示例内联策略添加所需权限:

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

创建 AWS Systems Manager Parameter Store 参数

您可以使用 AWS Systems Manager 控制台为您的敏感数据创建 Systems Manager Parameter Store 参数。有关更多信息,请参阅 AWS Systems Manager 用户指南 中的演练:在命令中创建和使用参数(控制台)

创建 Parameter Store 参数

  1. https://console.amazonaws.cn/systems-manager/ 上打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,依次选择 Parameter StoreCreate parameter (创建参数)

  3. 对于 Name (名称),键入层次结构和参数名称。例如,键入 test/database_password

    注意

    如果在参数中引用 AWS Secrets Manager 密钥,则参数名称必须以下面的保留路径开头:/aws/reference/secretsmanager/。有关更多信息,请参阅 AWS Systems Manager 用户指南 中的从 Parameter Store 参数中引用 AWS Secrets Manager 密钥

  4. 对于 Description (描述),键入可选描述。

  5. 对于 Type,选择 StringStringListSecureString

    注意

    • 如果选择 SecureString,则会显示 KMS Key ID (KMS 密钥 ID) 字段。如果您没有提供 KMS CMK ID、KMS CMK ARN、别名或别名 ARN,则系统将使用 alias/aws/ssm,这是 Systems Manager 的默认 KMS CMK。要避免使用此密钥,请选择自定义密钥。有关更多信息,请参阅 AWS Systems Manager 用户指南 中的使用安全字符串参数

    • 在控制台中使用具有自定义 KMS CMK 别名或别名 ARN 的 key-id 参数创建安全字符串参数时,您必须在别名前面指定前缀 alias/。以下是 ARN 示例:

      arn:aws:kms:us-east-2:123456789012:alias/MyAliasName

      以下是别名示例:

      alias/MyAliasName
  6. 对于 Value (值),键入一个值。例如:MyFirstParameter。如果您选择了 SecureString,则在您键入时值会被掩蔽。

  7. 选择创建参数

创建引用密钥的任务定义

您可以使用 Amazon ECS 控制台创建引用 Secrets Manager 密钥或 Systems Manager Parameter Store 参数的任务定义。

创建指定密钥的任务定义

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,依次选择 Task Definitions (任务定义)Create new Task Definition (创建新任务定义)

  3. Select launch type compatibility (选择启动类型兼容性) 页面上,选择任务的启动类型,然后选择 Next step (下一步)

  4. Task Definition Name (任务定义名称) 中,为任务定义键入名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  5. 对于 Task execution role (任务执行角色),选择现有任务执行角色,或者选择 Create new role (创建新角色) 为您创建一个此类角色。此角色授权 Amazon ECS 提取任务的私有映像。有关更多信息,请参阅 私有注册表身份验证所需的 IAM 权限

    重要

    如果 Task execution role (任务执行角色) 字段未显示,请选择 Configure via JSON (通过 JSON 配置) 并手动添加 executionRoleArn 字段来指定您的任务执行角色。以下代码显示语法:

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  6. 对于您的任务定义中要创建的每个容器,请完成以下步骤:

    1. Container Definitions (容器定义) 下,选择 Add container (添加容器)

    2. 对于 Container name (容器名称),键入容器的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

    3. 对于 Image (映像),键入映像名称或到您私有映像的路径。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

    4. 展开 Advanced container configuration (高级容器配置)

    5. 对于作为环境变量引用的容器密钥,在 Environment (环境) 下,对于 Environment variables (环境变量),请完成以下字段:

      1. 对于 Key (键),输入要在容器中设置的环境变量的名称。此选项对应于容器定义的 secrets 部分中的 name 字段。

      2. 对于 Value (值),选择 ValueFrom。对于添加值,请输入 Secrets Manager 密钥的完整 ARN 或 AWS Systems Manager Parameter Store 参数的名称或完整 ARN,其中包含要作为环境变量提供给您的容器的数据。

        注意

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

    6. 对于在容器的日志配置中引用的密钥,在 Storage and Logging (存储和日志记录) 下,对于 Log configuration (日志配置),填写以下字段:

      1. 清除自动配置 CloudWatch Logs 选项。

      2. Log options (日志选项) 下,对于 Key (密钥),输入要设置的日志配置选项。

      3. 对于 Value (值),选择 ValueFrom。对于添加值,请输入 Secrets Manager 密钥的完整 ARN 或 AWS Systems Manager Parameter Store 参数的名称或完整 ARN,其中包含要作为日志选项提供给日志配置的数据。

        注意

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

    7. 填写剩余的必填字段和要在您的容器定义中使用的任何可选字段。更多容器定义参数将可用于 Advanced container configuration (高级容器配置) 菜单中。有关更多信息,请参阅任务定义参数

    8. 选择 Add

  7. 当添加您的容器时,请选择 Create (创建)