AWS信任策略角色链疑问:角色假设关系确认
关于IAM角色信任策略与权限的疑问
问题背景
- 信任策略(
node-trust-policy.json)中包含角色eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole s3-velero-policy权限策略将附加到一台EC2实例对应的IAM角色eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色已附加到EKS节点
需要确认:
- 是EC2实例在拥有
s3-velero-policy对应角色的同时,扮演eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色? - 还是EKS节点在拥有
eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色的同时,扮演s3-velero-policy对应角色?
疑问来源:IAM文档指出Principal元素定义允许扮演该角色的对象,但看了信任策略后,不确定作为Principal的eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole是否可以扮演s3-velero-policy对应的角色,或是反过来。
核心结论
EKS节点(已附加eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色)可以扮演s3-velero-policy对应的IAM角色,而非反过来。
具体解释
角色关系明确:
node-trust-policy.json是附加了s3-velero-policy权限策略的那个IAM角色的信任策略- 信任策略里的
Principal字段,本质是定义允许哪些实体来扮演当前这个角色
拆解信任策略的两条规则:
- 第一条允许
ec2.amazonaws.com服务扮演该角色:说明任何EC2实例都可以通过实例配置文件直接关联这个带Velero权限的角色 - 第二条允许
eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色扮演该角色:说明已经持有这个EKS节点角色的实体(也就是EKS节点本身),可以调用sts:AssumeRole接口获取该Velero角色的临时凭证,从而获得S3和EC2相关操作权限
- 第一条允许
两种猜测的正误判断:
- 错误:EC2实例不会去扮演EKS节点角色——EKS节点角色的信任策略(未提供)通常仅允许EC2服务或EKS相关服务扮演,不会包含Velero角色作为Principal
- 正确:EKS节点在自身拥有
eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色的基础上,可以主动扮演s3-velero-policy对应的角色,以此获得Velero备份/恢复所需的存储权限
附上对应的策略代码
节点信任策略(node-trust-policy.json)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::xxxxx:role/eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole-O7yw97MymI8w" }, "Action": "sts:AssumeRole" } ] }
S3 Velero权限策略(s3-velero-policy.json)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeSnapshots", "ec2:CreateTags", "ec2:CreateVolume", "ec2:CreateSnapshot", "ec2:DeleteSnapshot" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::velero/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::velero" ] } ] }
内容的提问来源于stack exchange,提问作者Destiny
相关产品推荐
相关产品推荐

