首页 > 解决方案 > IAM 角色引用多个 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-2和)。xxxx-oidc-cluster-3我深入研究了如何构建此类 IAM JSON 策略的官方文档,但找不到任何可以帮助的东西。我想也许我错过了什么。

标签: amazon-web-servicesopenid-connectamazon-iamamazon-eks

解决方案


将您的 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:*:*""
        }
      }
    }
  ]
}

推荐阅读