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

在AWS上通过GET部署GitLab参考架构时Terraform报错求助

问题:GitLab Environment Toolkit容器中Terraform Plan AWS凭证验证失败

问题详情

我正在完成GitLab PSE路径下的实施课程,已完成所有环境搭建及必要文件配置,当前处于运行工具包(GET)Docker容器的步骤:

  • 进入对应目录:cd /gitlab-environment-toolkit/terraform/environments/3k
  • terraform init执行成功,但执行terraform plan -out 3k.aws_ec2.tfplan时出现报错
  • 使用的是AWS临时凭证,无法访问IAM页面获取其他凭证
  • 已尝试的操作:
    • 在Linux实例上设置环境变量并传入Docker容器
    • 在main.tf中硬编码AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
    • 修改Terraform的variables.tf和environment.tf中的区域配置
      但问题仍未解决,怀疑是AWS凭证相关问题导致,希望完成后续Ansible脚本运行以结束workshop。

当前main.tf内容:

terraform {
    required_providers {
        aws = {
        source = "hashicorp/aws"
        }
    }
}

# Configure the AWS Provider
provider "aws" {
    region = var.region
}

运行的Docker命令:

docker run -it  \
-v /home/ec2-user/gitlab-environment-toolkit/keys:/gitlab-environment-toolkit/keys \
-v /home/ec2-user/gitlab-environment-toolkit/ansible/environments/3k:/gitlab-environment-toolkit/ansible/environments/3k \
-v /home/ec2-user/gitlab-environment-toolkit/ansible/ansible.cfg:/gitlab-environment-toolkit/ansible/ansible.cfg \
-v /home/ec2-user/gitlab-environment-toolkit/terraform/environments/3k:/gitlab-environment-toolkit/terraform/environments/3k \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e GITLAB_PASSWORD=$GITLAB_PASSWORD \
registry.gitlab.com/gitlab-org/gitlab-environment-toolkit:latest

排查与解决步骤

1. 补充临时凭证必需的Session Token

AWS临时凭证除了AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,还必须携带AWS_SESSION_TOKEN参数。修改Docker运行命令,添加该环境变量传递:

docker run -it  \
-v /home/ec2-user/gitlab-environment-toolkit/keys:/gitlab-environment-toolkit/keys \
-v /home/ec2-user/gitlab-environment-toolkit/ansible/environments/3k:/gitlab-environment-toolkit/ansible/environments/3k \
-v /home/ec2-user/gitlab-environment-toolkit/ansible/ansible.cfg:/gitlab-environment-toolkit/ansible/ansible.cfg \
-v /home/ec2-user/gitlab-environment-toolkit/terraform/environments/3k:/gitlab-environment-toolkit/terraform/environments/3k \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN \
-e GITLAB_PASSWORD=$GITLAB_PASSWORD \
registry.gitlab.com/gitlab-org/gitlab-environment-toolkit:latest

同时确保宿主机Linux实例已正确设置AWS_SESSION_TOKEN环境变量,可通过env | grep AWS验证。

2. 验证容器内凭证是否生效

进入Docker容器后,先手动打印环境变量确认传递是否成功:

echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY
echo $AWS_SESSION_TOKEN

如果输出为空,说明宿主机环境变量未设置成功,或Docker命令中变量引用存在问题(比如非bash环境下变量解析失败)。

3. 指定AWS Provider稳定版本

当前main.tf未指定AWS Provider版本,可能存在版本兼容问题,添加版本约束:

terraform {
    required_providers {
        aws = {
        source = "hashicorp/aws"
        version = "~> 4.0" # 指定稳定兼容版本
        }
    }
}

修改后执行terraform init -upgrade更新Provider。

4. 测试临时凭证权限范围

在容器内用AWS CLI直接测试凭证权限,确认是否有Terraform所需的资源操作权限:

aws ec2 describe-instances --region <你的目标区域>

如果返回权限不足报错,说明临时凭证权限不够,需联系课程管理员获取权限覆盖更全的临时凭证。

5. 确认区域配置一致性

检查variables.tf或environment.tf中的region变量值,确保与AWS凭证允许访问的区域完全一致,避免跨区域访问导致的权限验证失败。

内容的提问来源于stack exchange,提问作者John Wick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:23:11