本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon ECS 任务执行 IAM 角色
任务执行角色的 ,该角色授予 Amazon ECS 容器和 Fargate 代理代表您进行 Amazon API 调用的权限。任务执行 IAM 角色是必需的,具体取决于任务的要求。您可以将多个任务执行角色用于与您的账户关联的服务不同目的。有关您的应用程序运行所需的 IAM 权限,请参阅 任务 IAM 角色。
以下是任务执行 IAM 角色的常见使用案例:
-
您的任务托管在 Amazon Fargate和...
-
从 Amazon ECR 私有存储库中提取容器映像。
-
在与运行任务的账户不同的账户中,从 Amazon ECR 私有存储库中提取容器映像。
-
使用日志驱动程序将容器 CloudWatch 日志发送到
awslogs
Logs。有关更多信息,请参阅使用 awslogs 日志驱动程序。
-
-
您的任务托管在两 Amazon Fargate 个 Amazon EC2 实例上,而且...
-
使用私有注册表身份验证。有关更多信息,请参阅私有注册表身份验证所需的 IAM 权限。
-
正在使用运行时监控。
-
任务定义使用 Secrets Manager 密钥或 Amazon Systems Manager Parameter Store 参数引用敏感数据。有关更多信息,请参阅密钥 Amazon ECS 机密所需的 IAM 权限。
-
注意
该任务执行角色由 Amazon ECS 容器代理版本 1.16.0 和更高版本支持。
Amazon ECS 提供了名为 AmazonECSTaskExecutionRolePolicy
的托管策略,该策略包含上述常见使用案例所需的权限。对于特殊使用案例,可能需要向您的任务执行角色添加内联策略,这些策略概述如下。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] }
可以在 Amazon ECS 控制台中为您创建一个Amazon ECS 任务执行角色;但是,您应该为任务手动附加托管 IAM policy,允许 Amazon ECS 在引入未来功能和增强功能时添加权限。您可以使用 IAM 控制台搜索来搜索ecsTaskExecutionRole
并查看您的账户是否已拥有任务执行角色。有关更多信息,请参阅 IAM 用户指南中的 IAM 控制台搜索。
创建任务执行 (ecsTaskExecutionRole
) 角色
如果您的账户还没有任务执行角色,请按照以下步骤创建该角色。
私有注册表身份验证所需的 IAM 权限
使用此功能需要 Amazon ECS 任务执行角色。这允许容器代理拉取容器映像。
要提供对您创建的密钥的访问权限,请将以下权限作为内联策略添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM policy。
-
secretsmanager:GetSecretValue
-
kms:Decrypt
- 仅当密钥使用自定义 KMS 密钥而不是原定设置密钥时才需要。您的自定义密钥的 Amazon 资源名称(ARN)必须添加为资源。
下面是添加所需权限的示例内联策略。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:secret_name", "arn:aws:kms:<region>:<aws_account_id>:key/key_id" ] } ] }
密钥 Amazon ECS 机密所需的 IAM 权限
要使用 Amazon ECS 密钥功能,您必须具有 Amazon ECS 任务执行角色并在任务定义中引用它。这允许容器代理提取必要的 Amazon Systems Manager 或 Secrets Manager 资源。有关更多信息,请参阅将敏感数据传递给容器。
使用 Secrets Manager
要提供对您创建的 Secrets Manager 密钥的访问权限,请将以下权限手动添加到任务执行角色。有关如何管理权限的信息,请参阅《IAM 用户指南》中的添加和删除 IAM 身份权限。
-
secretsmanager:GetSecretValue
– 在引用 Secrets Manager 密钥时是必需的。添加从 Secrets Manager 中检索密钥的权限。
以下示例策略添加了所需的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:
region
:aws_account_id
:secret:secret_name
" ] } ] }
使用 Systems Manager
重要
对于使用 EC2 启动类型的任务,必须使用 ECS 代理配置变量 ECS_ENABLE_AWSLOGS_EXECUTIONROLE_OVERRIDE=true
才能使用此功能。您可以在创建容器实例的过程中将其添加到 ./etc/ecs/ecs.config
文件中,也可以将其添加到现有实例中,然后重新启动 ECS 代理。有关更多信息,请参阅Amazon ECS 容器代理配置。
要提供对您创建的 Systems Manager Parameter Store 参数的访问权限,请将以下权限作为策略手动添加到任务执行角色。有关如何管理权限的信息,请参阅《IAM 用户指南》中的添加和删除 IAM 身份权限。
-
ssm:GetParameters
— 当您在任务定义中引用 Systems Manager Parameter Store 参数时是必需的。添加检索 Systems Manager 参数的权限。 -
secretsmanager:GetSecretValue
— 当您直接引用 Secrets Manager 密钥或者您的 System Manager Parameter Store 参数在任务定义中引用 Secrets Manager 密钥时,这是必需的。添加从 Secrets Manager 中检索密钥的权限。 -
kms:Decrypt
— 仅当您的密钥使用客户托管键而不是默认键时才需要。您的自定义密钥的 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
" ] } ] }
通过接口端点拉取 Amazon ECR 映像的 Fargate 任务的可选 IAM 权限
在 Amazon ECR 配置为使用接口 VPC 端点的情况下,当启动使用 Fargate 启动类型的任务(该任务从 Amazon ECR 中提取映像)时,可以限制任务对特定 VPC 或 VPC 端点的访问。可通过为要使用 IAM 条件键的任务创建任务执行角色来做到这一点。
使用以下 IAM 全局条件键来限制对特定 VPC 或 VPC 端点的访问。有关更多信息,请参阅 Amazon Global Condition Context Keys。
-
aws:SourceVpc
- 限制对特定 VPC 的访问。 -
aws:SourceVpce
- 限制对特定 VPC 端点的访问。
以下任务执行角色策略提供了一个添加条件键的示例:
重要
ecr:GetAuthorizationToken
API 操作无法应用aws:sourceVpc
或aws:sourceVpce
条件密钥,因为 GetAuthorizationToken API 调用通过 Amazon Fargate 拥有的弹性网络接口,而不是任务的弹性网络接口。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*", "Condition": { "StringEquals": { "aws:sourceVpce": "
vpce-xxxxxx
", "aws:sourceVpc": "vpc-xxxxx
" } } } ] }