Amazon ECS 任务执行 IAM 角色
任务执行角色的 ,该角色授予 Amazon ECS 容器和 Fargate 代理代表您进行 AWS API 调用的权限。任务执行 IAM 角色是必需的,具体取决于任务的要求。您可以将多个任务执行角色用于与您的账户关联的服务不同目的。有关您的应用程序运行所需的 IAM 权限,请参阅 Amazon ECS 任务 IAM 角色。
以下是任务执行 IAM 角色的常见使用案例:
-
您的任务托管在 AWS Fargate 或外部实例上且:
-
从 Amazon ECR 私有存储库中提取容器映像。
-
在与运行任务的账户不同的账户中,从 Amazon ECR 私有存储库中提取容器映像。
-
使用
awslogs
日志驱动程序将容器日志发送到 CloudWatch Logs。有关更多信息,请参阅 将 Amazon ECS 日志发送到 CloudWatch 。
-
-
您的任务托管在 AWS Fargate 或 Amazon EC2 实例上且:
-
使用私有注册表身份验证。有关更多信息,请参阅 私有注册表身份验证权限。
-
使用运行时监控。
-
任务定义使用 Secrets Manager 密钥或 AWS Systems Manager Parameter Store 参数引用敏感数据。有关更多信息,请参阅 Secrets Manager 或 Systems Manager 权限。
-
注意
该任务执行角色由 Amazon ECS 容器代理版本 1.16.0 和更高版本支持。
Amazon ECS 提供了名为 AmazonECSTaskExecutionRolePolicy 的托管式策略,该策略包含上述常见应用场景所需的权限。有关更多信息,请参阅《AWS 托管式策略参考指南》中的 AmazonECSTaskExecutionRolePolicy。对于特殊应用场景,可能需要向任务执行角色添加内联策略。
Amazon ECS 控制台将会创建一个任务执行角色。您可以手动为任务附加该托管式 IAM 策略,以便 Amazon ECS 能够在引入未来功能和增强功能时添加相关权限。您可以使用 IAM 控制台搜索来搜索 ecsTaskExecutionRole
,并查看您的账户是否已有该任务执行角色。有关更多信息,请参阅《IAM 用户指南》中的 IAM 控制台搜索。
如果以经过身份验证的用户身份拉取映像,则不太可能受到 Docker Hub 拉取速率限制
通过使用 Amazon ECR 和 Amazon ECR Public,您可以避开 Docker 施加的限制。如果您从 Amazon ECR 提取映像,这还有助于缩短网络提取时间,并减少流量离开您的 VPC 时的数据传输变化。
使用 Fargate 时,您必须使用 repositoryCredentials
向私有映像注册表进行身份验证。无法为 Fargate 上托管的任务设置 Amazon ECS 容器代理环境变量 ECS_ENGINE_AUTH_TYPE
或 ECS_ENGINE_AUTH_DATA
或修改 ecs.config
文件。有关更多信息,请参阅任务的私有注册表身份验证。
创建任务执行 角色
如果您的账户尚未具有任务执行角色,请使用以下步骤创建角色。
创建该角色后,为该角色添加以下功能的附加权限。
功能 | 其他权限 |
---|---|
使用 Secrets Manager 凭证访问您的容器映像专用存储库 |
|
使用 Systems Manager 或 Secrets Manager 传递敏感数据 | |
让 Fargate 任务通过接口端点拉取 Amazon ECR 映像 | |
在 Amazon S3 存储桶中托管配置文件 | |
配置 Container Insights 以查看 Amazon ECS 生命周期事件 | |
在 Container Insights 中查看 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" ] } ] }
Secrets Manager 或 Systems Manager 权限
允许容器代理拉取所需 AWS Systems Manager 或 Secrets Manager 资源的权限。有关更多信息,请参阅 将敏感数据传递给 Amazon ECS 容器。
使用 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
" ] } ] }
Fargate 任务通过接口端点拉取 Amazon ECR 映像的权限
在 Amazon ECR 配置为使用接口 VPC 端点的情况下,当启动使用 Fargate 启动类型的任务(该任务从 Amazon ECR 中提取映像)时,可以限制任务对特定 VPC 或 VPC 端点的访问。可通过为要使用 IAM 条件键的任务创建任务执行角色来做到这一点。
使用以下 IAM 全局条件键来限制对特定 VPC 或 VPC 端点的访问。有关更多信息,请参阅 AWS Global Condition Context Keys。
-
aws:SourceVpc
- 限制对特定 VPC 的访问。可以将 VPC 限制为托管任务和端点的 VPC。 -
aws:SourceVpce
- 限制对特定 VPC 端点的访问。
以下任务执行角色策略提供了一个添加条件键的示例:
{ "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
" } } } ] }
Amazon S3 存储桶文件存储权限
指定某个在 Amazon S3 中托管的配置文件时,任务执行角色必须包含对此配置文件的 s3:GetObject
权限以及对此文件所在 Amazon S3 存储桶的 s3:GetBucketLocation
权限。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的 Amazon S3 的策略操作。
以下示例策略添加了从 Amazon S3 中检索文件所需的权限。指定 Amazon S3 存储桶的名称和配置文件名称。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "
s3:GetObject
" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/folder_name
/config_file_name
" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
" ] } ] }
配置 Container Insights 以查看 Amazon ECS 生命周期事件所需的权限
在任务角色中,配置生命周期事件需要以下权限:
-
events:PutRule
-
events:PutTargets
-
logs:CreateLogGroup
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutRule", "events:PutTargets", "logs:CreateLogGroup" ], "Resource": "*" } ] }
在 Container Insights 中查看 Amazon ECS 生命周期事件所需的权限
查看生命周期事件需要以下权限。将以下权限作为内联策略添加到任务执行角色。有关更多信息,请参阅添加和删除 IAM policy。
-
events:DescribeRule
-
events:ListTargetsByRule
-
logs:DescribeLogGroups
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:DescribeRule", "events:ListTargetsByRule", "logs:DescribeLogGroups" ], "Resource": "*" } ] }