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

如何在GitLab流水线中使用IAM角色部署AWS资源

配置GitLab流水线通过IAM角色认证AWS并部署Terraform

1. 在AWS中创建可被GitLab扮演的IAM角色

首先要在AWS侧配置信任策略,允许GitLab的OIDC身份提供商触发角色扮演:

  • 打开AWS IAM控制台,创建新角色,选择「Web身份」作为信任类型
  • 身份提供商选择GitLab对应的OIDC(若未添加,GitLab.com的OIDC地址为https://gitlab.com,受众填https://gitlab.com;自托管GitLab需填写自身实例的OIDC地址)
  • 为角色附加Terraform部署所需的权限策略(比如针对EC2、S3等资源的精细权限,避免使用过于宽泛的全量权限)
  • 编辑角色的信任策略,限制仅特定GitLab项目/分支的流水线可扮演该角色,示例策略:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::你的AWS账户ID:oidc-provider/gitlab.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "gitlab.com:sub": "project_path:你的GitLab用户名/项目名:ref_type:branch:ref:main"
        }
      }
    }
  ]
}

提示:gitlab.com:sub的值可按需调整,比如限制到特定标签、分支或项目,防止权限滥用。

2. 在GitLab项目中配置OIDC相关变量

  • 进入GitLab项目,依次打开「设置」→「CI/CD」→「变量」
  • 添加以下配置变量(无需明文密钥):
    • AWS_ACCOUNT_ID:你的AWS账户ID
    • AWS_ROLE_ARN:刚创建的IAM角色ARN(格式示例:arn:aws:iam::123456789012:role/GitLabTerraformDeployRole)

3. 编写.gitlab-ci.yml流水线配置

以下是基础的Terraform部署流水线示例,通过OIDC获取AWS临时凭证:

stages:
  - deploy

deploy_terraform:
  stage: deploy
  image: hashicorp/terraform:latest
  before_script:
    # 安装AWS CLI(若镜像自带可省略)
    - apk add --no-cache aws-cli jq
    # 通过GitLab提供的JWT令牌获取AWS临时凭证
    - |
      RESPONSE=$(aws sts assume-role-with-web-identity \
        --role-arn $AWS_ROLE_ARN \
        --role-session-name "GitLab-Terraform-Deploy" \
        --web-identity-token $CI_JOB_JWT_V2 \
        --duration-seconds 3600)
      export AWS_ACCESS_KEY_ID=$(echo $RESPONSE | jq -r '.Credentials.AccessKeyId')
      export AWS_SECRET_ACCESS_KEY=$(echo $RESPONSE | jq -r '.Credentials.SecretAccessKey')
      export AWS_SESSION_TOKEN=$(echo $RESPONSE | jq -r '.Credentials.SessionToken')
    # 初始化Terraform
    - terraform init
  script:
    - terraform plan
    - terraform apply -auto-approve
  only:
    - main

说明:$CI_JOB_JWT_V2是GitLab自动注入的流水线JWT令牌,用于和AWS OIDC交互;若GitLab版本较旧,可替换为$CI_JOB_JWT。

4. Terraform提供商配置注意事项

确保Terraform的AWS提供商不使用静态密钥,直接依托AWS默认凭证链读取临时凭证,示例配置:

provider "aws" {
  region = "us-east-1"
  # 无需手动配置access_key和secret_key,自动读取环境变量中的临时凭证
}

额外提醒

  • 权限最小化:给IAM角色分配的权限仅满足Terraform部署需求,避免过度授权
  • 有效期调整:duration-seconds最大可设为3600秒(1小时),若流水线运行时间更长,需调整角色的最大会话时长
  • 自托管GitLab:需先在AWS IAM中添加自身实例的OIDC提供商,地址格式为https://你的GitLab实例地址/.well-known/openid-configuration

内容的提问来源于stack exchange,提问作者CMR H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:31