You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于EKS的Gitlab-CI Runner结合AWS IAM角色配置可行性问询

可以实现,具体方案如下

核心是通过**EKS的IAM角色绑定(IRSA)**结合GitLab CI的配置,让不同团队的作业Pod自动假定对应权限的IAM角色,实现AWS账号级别的权限隔离。

1. 为各团队创建隔离的AWS IAM角色

  • 给每个团队单独创建IAM角色,仅赋予其自身AWS账号内基础设施部署所需的最小权限(比如CloudFormation、EC2、S3等权限,按需配置)。
  • 为每个IAM角色配置OIDC信任策略,允许EKS集群中的指定服务账号扮演该角色。策略示例:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<AWS账号ID>:oidc-provider/oidc.eks.<区域>.amazonaws.com/id/<EKS集群OIDC ID>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.<区域>.amazonaws.com/id/<EKS集群OIDC ID>:sub": "system:serviceaccount:<GitLab Runner命名空间>:<团队专属服务账号名>",
          "oidc.eks.<区域>.amazonaws.com/id/<EKS集群OIDC ID>:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}
  • 在EKS中创建对应服务账号,并绑定到上述IAM角色:
eksctl create iamserviceaccount \
  --cluster=<你的EKS集群名> \
  --namespace=<Runner所在命名空间> \
  --name=<团队专属服务账号名> \
  --attach-policy-arn=<对应IAM角色的ARN> \
  --approve \
  --override-existing-serviceaccounts

2. 配置GitLab Runner支持服务账号覆盖

  • 确保你的EKS托管Runner使用Kubernetes executor,在config.toml中开启服务账号自定义权限:
[[runners]]
  name = "EKS GitLab Runner"
  executor = "kubernetes"
  [runners.kubernetes]
    namespace = "<Runner所在命名空间>"
    service_account_overwrite_allowed = ".*" # 允许作业指定专属服务账号

3. 在项目CI配置中指定团队专属服务账号

  • 每个团队的项目在.gitlab-ci.yml里,通过kubernetes字段指定自己的服务账号,作业Pod启动后会自动获取对应IAM角色的临时凭证:
deploy_infra:
  stage: deploy
  script:
    - aws cloudformation deploy --stack-name <团队专属栈名> --template-file infra.yml
  tags:
    - eks-runner # 指定使用EKS托管的Runner
  kubernetes:
    service_account: <团队专属服务账号名>

4. 权限隔离验证

  • 每个团队的IAM角色仅配置自身AWS账号的权限,避免跨账号访问。
  • 作业中执行AWS命令无需手动配置密钥,Pod会通过IRSA自动获取临时凭证,权限完全受绑定的IAM角色限制。

内容的提问来源于stack exchange,提问作者Ahmed-F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:05:23