AWS信任策略与角色串联

编程语言 2026-07-08

我对以下信任策略和权限角色有点困惑。

在信任策略中,它包含如下角色 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 角色执行一次“承担角色”的动作,才能行使该角色的权限。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章