AWS信任策略与角色串联
我对以下信任策略和权限角色有点困惑。
在信任策略中,它包含如下角色 eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole。
s3-velero-policy 将被附加到一个EC2实例上。
eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole 将被附加到eks-node。
这是否意味着 ec2 instance 将与 s3-velero-policy 角色一起承担 eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole 角色?
或者
这是否意味着 eks node 可以在同时承担 eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole 角色的情况下,承担 s3-velero-policy role 角色
我之所以有这个疑问,是因为文档写着 Principal element is used to define who is allowed to assume that role
当我查看信任策略时,我在想,eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole(因为它是主体)是否可以承担 s3-velero-policy 角色,还是相反的情况。
cat > node-trust-policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { # uses the Principal element to define who is allowed to assume that role
"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"
}
]
}
EOF
cat > s3-velero-policy.json <<EOF
{
"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"
]
}
]
}
EOF
解决方案
一个信任策略附加在一个角色 R 上。它决定了哪些主体(服务、其他角色等)被 R 信任去承担它。请注意,承担一个角色是一个显式的动作——仅仅因为某个主体 可以 假设一个角色,并不意味着它会自动这么做。
你的信任策略表示,EC2服务和指定的角色都可以承担信任策略所附加的任意角色。请注意,你的信任策略陈述中的两个条款是独立的。每一个条款都向不同的主体授予承担该角色的权限,而不考虑另一个主体。因此,
这是否意味着
ec2 instance将在同时承担eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色和s3-velero-policy角色?
不,这并非如此。
这是否意味着
eks node可以在同时承担eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色的情况下,承担s3-velero-policy角色。
你说“s3-velero-policy 角色”,但据我从问题和命名所能判断,s3-velero-policy 是一个策略。策略不是角色(也不是任何其他类型的主体),所以信任策略肯定不意味着 eks node 可以承担 s3-velero-policy。
不清楚 eks node 是什么,但
- 如果
eks node是被信任策略附加的IAM角色,那么信任策略意味着EC2服务和eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole角色都可以各自承担eks node角色。 - 如果
eks node是一个EC2实例,那么信任策略表示eks node可以承担信任策略附加到的任意角色,其他EC2实例也可以,eksctl-demo-eks-cluster-nodegroup--NodeInstanceRole也可以(无论该角色是否在EC2内部被使用) - 如果
eks node是其他东西,那么信任策略与之没有直接相关。
另外,你写道:
s3-velero-policy将被附加到一个ec2实例上。
,但那样的表述至多只能说得不准确,因为IAM策略不能直接附加到一个EC2实例。我的最佳猜测是你有一个EC2实例(也许是 “eks node”),你想给予它由 s3-velero-policy 描述的权限。为此,你应该先创建一个IAM角色,可能叫做 “s3-velero-accessor”,并将 s3-velero-policy 作为该角色的权限策略附加到上面。从那里,你有两种选择:
- 将
s3-velero-accessor角色附加到你的实例。这将允许实例在不显式承担该角色的情况下行使该角色的权限。你不需要信任策略来实现这一点。
或者
- 为
s3-velero-accessor附加一个信任策略,允许实例承担该角色。问题中的信任策略已经足够宽松(可能太宽松)。然后实例需要对s3-velero-accessor角色执行一次“承担角色”的动作,才能行使该角色的权限。