You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在绑定EC2只读IAM角色的EC2实例Docker容器中运行AWS CLI

解决Docker容器内AWS CLI无法使用EC2实例IAM角色的问题

问题分析

宿主机能正常使用绑定的IAM角色,是因为EC2实例可通过**实例元数据服务(IMDS)**自动获取临时凭证;而Docker容器默认网络隔离,无法直接访问IMDS,导致权限验证失败。以下是无需手动配置访问密钥的安全解决方案:

解决方案1:使用主机网络运行容器

直接让容器共享宿主机的网络命名空间,容器将获得与宿主机完全相同的网络访问权限,包括IMDS:

docker run --network host -it amazon/aws-cli ec2 describe-instances

此方法最简单,容器内的AWS CLI会自动通过IMDS获取宿主机绑定的IAM角色临时凭证,权限与宿主机完全一致。

解决方案2:Bridge网络下配置容器访问IMDS

若不想使用主机网络,可通过以下方式让容器访问宿主机的IMDS:

  1. 先查看宿主机Docker bridge的IP(通常为172.17.0.1,执行ip addr show docker0确认)
  2. 运行容器时指定IMDS端点,AWS CLI会自动处理IMDSv2的token获取逻辑:
docker run -it amazon/aws-cli \
  --env AWS_EC2_METADATA_SERVICE_ENDPOINT=http://<宿主机bridge IP>:80 \
  ec2 describe-instances

替换<宿主机bridge IP>为实际查询到的地址即可。

解决方案3:挂载宿主机的凭证缓存目录

EC2实例会缓存IAM角色的临时凭证到/var/lib/aws/credentials,可将此目录挂载到容器内,让容器直接复用缓存的凭证:

docker run -it -v /var/lib/aws/credentials:/var/lib/aws/credentials amazon/aws-cli ec2 describe-instances

注意:若容器以非root用户运行,需确保该用户对挂载目录有读取权限,可添加--user root参数临时以root身份运行容器。

验证方法

执行以下命令确认容器已正确获取IAM角色权限:

aws sts get-caller-identity

返回结果应显示绑定的IAM角色ARN,而非权限错误提示。

内容的提问来源于stack exchange,提问作者Swarnim Pratap Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:15:22