IAM 角色引用多个 EKS OIDC

IAM Role reference multiple EKS OIDC

每个阶段(dev、staging、prd)我有 3 个不同的 EKS 集群 我需要为集群中部署的每个应用程序设置多个 IAM 角色。

我的想法是能够在该 IAM 角色的信任关系中引用多个 EKS OIDC,因此我最终会跨集群为每个应用程序分配 1 个 IAM 角色,而不是 3 个。

配置一个 IAM 角色 + 信任关系很容易,如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::xxxxx:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-1"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringLike": {
          "oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-1:sub": "system:serviceaccount:*:*"
        }
      }
    }
  ]
}

我想做的是在相同的信任关系中引用我的其他集群(xxxx-oidc-cluster-2xxxx-oidc-cluster-3)。我深入研究了官方 doc 如何构建这样的 IAM JSON 政策,但找不到任何有用的信息。我想也许我错过了什么。

最佳做法可能是将 IAM 角色的范围限定为每个集群每个应用程序一个,但如果您真的想这样做,则需要在您的代入角色策略(信任关系)中使用多个单独的语句。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::xxxxx:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-1"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-1:sub": "system:serviceaccount:*:*"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::xxxxx:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-2"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.eu-west-1.amazonaws.com/id/xxxx-oidc-cluster-2:sub": "system:serviceaccount:*:*""
        }
      }
    }
  ]
}