使用 Systems Manager Parameter Store 指定敏感数据
Amazon ECS 使您能够向容器中注入敏感数据,方法是将您的敏感数据存储在 Amazon Systems Manager Parameter Store 参数中,然后在容器定义中引用它们。
主题
使用 Systems Manager Parameter Store 指定敏感数据时的注意事项
使用 Systems Manager Parameter Store 参数指定容器的敏感数据时,应考虑以下事项。
-
Systems Manager Parameter Store 参数必须存在于运行任务的同一账户中。
-
对于 Fargate 上托管的任务,此功能要求您的任务使用平台版本
1.3.0
或更高版本(适用于 Linux)或者1.0.0
或更高版本(适用于 Windows)。有关信息,请参阅 Amazon Fargate 平台版本。 -
对于 EC2 实例上托管的任务,此功能要求您的容器实例具有版本
1.22.0
或更高版本的容器代理。但是,我们建议使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理。 -
最初启动容器时,会将敏感数据注入容器中。如果随后更新或轮换密钥或 Parameter Store 参数,则容器将不会自动接收已更新的值。您必须启动新任务,或者如果您的任务是服务的一部分,则可以更新服务并使用强制新部署选项来强制服务启动新任务。
-
对于配置为使用
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>
密钥 Amazon ECS 机密所需的 IAM 权限
要使用此功能,您必须具有 Amazon ECS 任务执行角色,并在任务定义中引用它。这允许容器代理提取必要的 Amazon Systems Manager 资源。有关更多信息,请参阅Amazon ECS 任务执行 IAM 角色。
对于使用 EC2 启动类型的任务,必须使用 ECS 代理配置变量 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true
才能使用此功能。您可以在创建容器实例的过程中将其添加到 ./etc/ecs/ecs.config
文件中,也可以将其添加到现有实例中,然后重新启动 ECS 代理。有关更多信息,请参阅Amazon ECS 容器代理配置。
要提供对您创建的 Amazon Systems Manager Parameter Store 参数的访问权限,请将以下权限作为内联策略手动添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM 策略。
-
ssm:GetParameters
— 当您在任务定义中引用 Systems Manager Parameter Store 参数时是必需的。 -
secretsmanager:GetSecretValue
— 当您直接引用 Secrets Manager 密钥或者您的 System 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>" ] } ] }
作为环境变量注入敏感数据
在容器定义中,使用要在容器中设置的环境变量的名称和包含要提供给容器的敏感数据的 Systems Manager Parameter Store 参数的完整 ARN 指定 secrets
。
以下是任务定义的片段,其中显示引用 Systems Manager Parameter Store 参数时的格式。如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域,则可以使用参数的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。
{ "containerDefinitions": [{ "secrets": [{ "name": "
environment_variable_name
", "valueFrom": "arn:aws:ssm:region
:aws_account_id
:parameter/parameter_name
" }] }] }
注入日志配置中的敏感数据
在容器定义中,当指定 logConfiguration
时,您可以使用要在容器中设置的日志驱动程序选项的名称以及包含要提供给容器的敏感数据的 Systems Manager Parameter Store 参数的完整 ARN 指定 secretOptions
。
如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域,则可以使用参数的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。
以下是任务定义的片段,其中显示引用 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 Systems Manager Parameter Store 参数
您可以使用 Amazon Systems Manager 控制台为您的敏感数据创建 Systems Manager Parameter Store 参数。有关更多信息,请参见 Amazon Systems Manager 用户指南.中的演练:在命令(控制台)中创建和使用参数
创建 Parameter Store 参数
-
访问 https://console.aws.amazon.com/systems-manager/
,打开 Amazon Systems Manager 控制台。 -
在导航窗格中,依次选择 Parameter Store 和 Create parameter (创建参数)。
-
对于 Name (名称),键入层次结构和参数名称。例如,键入
/test/database_password
。 -
对于 Description (描述),键入可选描述。
-
对于 Type,选择 String、StringList 或 SecureString。
注意 -
如果选择 SecureString,则会显示 KMS Key ID (KMS 密钥 ID) 字段。如果您没有提供 KMS 键 ID、KMS 键 ARN、别名或别名 ARN,则系统将使用
alias/aws/ssm
,这是 Systems Manager 的原定设置 KMS 键。要避免使用此密钥,请选择自定义密钥。有关安全字符串的更多信息,请参阅 Amazon Systems Manager 用户指南中的使用安全字符串参数。 -
在控制台中使用具有自定义 KMS 键 别名或别名 ARN 的
key-id
参数创建安全字符串参数时,您必须在别名前面指定前缀alias/
。以下是 ARN 示例:arn:aws:kms:us-east-2:123456789012:alias/
MyAliasName
以下是别名示例:
alias/
MyAliasName
-
-
对于 Value (值),键入一个值。例如:
MyFirstParameter
。如果您选择了 SecureString,则在您键入时值会被掩蔽。 -
选择创建参数。
在经典控制台中创建引用了敏感数据的任务定义
您可以使用 Amazon ECS 控制台创建引用 Systems Manager Parameter Store 参数的任务定义。
创建指定密钥的任务定义
打开位于 https://console.aws.amazon.com/ecs/
的 Amazon ECS 控制台。 -
在导航窗格中,依次选择 Task Definitions (任务定义) 和 Create new Task Definition (创建新任务定义).
-
在 Select launch type compatibility (选择启动类型兼容性) 页面上,选择任务的启动类型,然后选择 Next step (下一步)。
注意 此步骤仅适用于当前支持使用 Amazon Fargate 的 Amazon ECS 区域。有关更多信息,请参阅Amazon Fargate 上的 Amazon ECS。
-
在 task definition Name (任务定义名称) 中,为任务定义键入名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。
-
对于 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" -
对于您的任务定义中要创建的每个容器,请完成以下步骤:
-
在 Container Definitions (容器定义) 下,选择 Add container (添加容器)。
-
对于 Container name (容器名称),键入容器的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。
-
对于 Image (映像),键入映像名称或到您私有映像的路径。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。
-
展开 Advanced container configuration (高级容器配置)。
-
对于要注入为环境变量的敏感数据,请在 Environment (环境) 下,为 Environment variables (环境变量) 填写以下字段:
-
对于 Key (键),输入要在容器中设置的环境变量的名称。此选项对应于容器定义的
secrets
部分中的name
字段。 -
对于 Value (值),选择 ValueFrom。对于 Add value (添加值),请输入 Amazon Systems Manager Parameter Store 参数的完整 ARN,其中包含要作为环境变量提供给您的容器的数据。
注意 如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域,则可以使用密钥的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。
-
-
对于在容器的日志配置中引用的密钥,在 Storage and Logging (存储和日志记录) 下,对于 Log configuration (日志配置),填写以下字段:
-
清除 Auto-configure CloudWatch Logs 选项。
-
在 Log options (日志选项) 下,对于 Key (密钥),输入要设置的日志配置选项。
-
对于 Value (值),选择 ValueFrom。对于 Add value (添加值),请输入包含要作为日志选项提供给日志配置的数据的 Amazon Systems Manager Parameter Store 参数的名称或完整 ARN。
注意 如果 Systems Manager Parameter Store 参数存在于要启动的任务所在的区域,则可以使用密钥的完整 ARN 或名称。如果参数存在于不同的区域,则必须指定完整的 ARN。
-
-
填写剩余的必填字段和要在您的容器定义中使用的任何可选字段。更多容器定义参数将可用于 Advanced container configuration (高级容器配置) 菜单中。有关更多信息,请参阅任务定义参数。
-
选择 Add(添加)。
-
-
当添加您的容器时,请选择 Create (创建)。