Amazon ECS - 在 Docker 入口点上使用 IAM 角色时权限被拒绝
Posted
技术标签:
【中文标题】Amazon ECS - 在 Docker 入口点上使用 IAM 角色时权限被拒绝【英文标题】:Amazon ECS - Permission denied when using IAM role on Docker entrypoint 【发布时间】:2019-09-20 17:21:30 【问题描述】:我正在寻找一种将机密/证书注入 Amazon ECS 容器的方法。在我的例子中,它是一个简单的 nginx 容器。
我一直在关注这篇文章,使用 AWS Parameter Store: https://aws.amazon.com/blogs/compute/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks/
这是基本要点:
-
在我的 Dockerfile 上,我在 entrypoint 上附加了一个脚本,该脚本安装 AWS 客户端并从 AWS 参数存储中获取密钥。
Dockerfile
FROM nginx:1.16.0
...
ENTRYPOINT ["/var/run/fetch.sh", "nginx", "-g", "daemon off;"]
fetch.sh
aws ssm get-parameter \
--name $key \
--with-decryption \
--region us-east-1 \
--output text \
--query Parameter.Value
-
任务定义假定一个 IAM 角色可以访问所需的服务(kms + 参数存储)。我可以验证这是否有效,因为如果我通过 ssh 连接到服务器并在容器上运行脚本,我就可以从 Parameter Store 获取密钥。
"portMappings": [
"hostPort": 0,
"protocol": "tcp",
"containerPort": 443
],
"cpu": 0,
"environment": [],
"mountPoints": [],
"memoryReservation": 256,
"memory": 512,
"volumesFrom": [],
"image": "url/some_image:latest",
"essential": true,
"name": "my-container"
-
当 ECS 运行此任务时,它应该点击 入口点,该入口点从参数存储中获取密钥并保存它们。
我可以通过 docker exec 手动运行正在运行的任务来获取密钥,但是在启动任务时我无法获取它们(特别是当我将脚本附加到入口点上时,如上面的代码所示) .
ECS 任务是否有权访问入口点的 IAM 角色?它何时实际承担 IAM 角色?
【问题讨论】:
【参考方案1】:您现在可以使用任务定义的containerDefinitions
中的secrets
从 SSM 或 Secrets Manager 轻松注入机密。使用此解决方案,您不必再运行/管理自定义脚本来获取您的秘密。
看起来像这样:
"containerDefinitions": [
"secrets": [
"name": "environment_variable_name",
"valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf"
]
]
"containerDefinitions": [
"secrets": [
"name": "environment_variable_name",
"valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
]
]
看看AWS Launches Secrets Support for Amazon Elastic Container Service 和Specifying Sensitive Data。
您必须具有任务执行角色并在任务定义中引用它。示例政策:
"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"
]
]
Required IAM Permissions for Amazon ECS Secrets 中的更多信息。
【讨论】:
我已经尝试过了,并且在将我的 ECR 图像拉到任务定义上时以某种方式添加任务执行角色(具有所有权限)给我一个错误:CannotPullContainerError: Error response from daemon: pull access denied
。我不确定为什么会这样,因为它似乎无关。虽然我已经验证删除任务执行角色可以解决我的 ECR 问题。有什么想法吗?
这是一个很好的答案,所以我会将其标记为已接受。将我的问题转移到另一个帖子:***.com/questions/55965007/…以上是关于Amazon ECS - 在 Docker 入口点上使用 IAM 角色时权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
在 Amazon ECS 上的 Docker 中运行节点 API 的最佳方式是啥?
如何在 Amazon EC2 容器服务 (ECS) 中使用不安全的 docker 注册表?
如何更新在 Amazon ECS 上运行的 docker 容器
在ECS中使用哪个ASP.NET Windows容器映像?使用Amazon ECS在基本映像中出现Windows Docker Container兼容性问题