如何查找AWS EC2实例有权访问的关联S3存储桶?
结论
可以直接在EC2实例内部查询到该实例关联的可下载S3存储桶,具体操作方法如下:
操作步骤
方法1:通过EC2实例绑定的IAM角色权限规则查询
- 首先获取实例关联的IAM角色名称,执行以下命令查询实例元数据:
如果你使用的是IMDSv1(实例元数据服务v1版本):
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/如果你使用的是IMDSv2(实例元数据服务v2版本),需先获取会话令牌再查询:
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/ - 拿到角色名后,查询该角色绑定的权限策略,筛选允许
s3:GetObject动作的资源项:
权限策略中*允许# 先查询角色绑定的托管策略 aws iam list-attached-role-policies --role-name <你拿到的角色名> # 或者查询角色的内联策略 aws iam list-role-policies --role-name <你拿到的角色名>s3:GetObject动作对应的S3桶ARN,就是该实例可下载文件的目标存储桶,其余仅配置s3:ListBucket权限的桶仅支持查看文件列表。
方法2:无IAM查询权限时的模拟校验
如果当前实例没有调用IAM接口查询策略的权限,可以通过权限模拟接口校验:
# 先获取当前实例的角色ARN aws sts get-caller-identity # 模拟调用s3:GetObject权限,替换<存储桶名称>为你要校验的桶名 aws iam simulate-principal-policy --policy-source-arn <你的角色ARN> --action-names s3:GetObject --resource-arns arn:aws:s3:::<存储桶名称>/*
返回结果中EvaluationDecision字段为Allowed的存储桶,就是该实例可下载文件的关联存储桶。
内容的提问来源于stack exchange,提问作者Michael Barrowman
相关产品推荐
相关产品推荐

