AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1060489
Accepted
DavisTasar
DavisTasar
Asked: 2021-04-16 05:31:30 +0800 CST2021-04-16 05:31:30 +0800 CST 2021-04-16 05:31:30 +0800 CST

Gitlab 作为带有 HTTP 后端的 Terraform 状态管理,不使用项目凭据?

  • 772

我一直在努力为 Terraform 建立一个 monorepo 并运行。Terraform 在容器内执行。但是,当我尝试将inithttp 指向我的自托管 Gitlab 的后端时,它返回为需要身份验证:

Successfully configured the backend "http"! Terraform will automatically
use this backend unless the backend configuration changes.
2021-04-15T13:02:00.815Z [TRACE] Meta.Backend: instantiated backend of type *http.Backend
2021-04-15T13:02:00.815Z [DEBUG] checking for provisioner in "."
2021-04-15T13:02:00.815Z [DEBUG] checking for provisioner in "/bin"
2021-04-15T13:02:00.815Z [INFO]  Failed to read plugin lock file .terraform/plugins/linux_amd64/lock.json: open .terraform/plugins/linux_amd64/lock.json: no such file or directory
2021-04-15T13:02:00.815Z [TRACE] Meta.Backend: backend *http.Backend does not support operations, so wrapping it in a local backend
2021/04/15 13:02:00 [DEBUG] GET https://gitlab.my_domain.tld/api/v4/projects/2/terraform/state/infrastructure
Error refreshing state: HTTP remote state endpoint requires auth

我已经确认我的项目令牌确实可以通过对具有 API 访问权限的令牌的项目使用 curl 来工作:

bash-5.1# curl -k -I "https://gitlab.my_domain.tld/api/v4/projects?<my_token_id>"
HTTP/2 200 
server: nginx
date: Wed, 14 Apr 2021 23:59:43 GMT
content-type: application/json
vary: Accept-Encoding
cache-control: no-cache
link: <https://gitlab.my_domain.tld/api/v4/projects?<my_token_id>=&membership=false&order_by=created_at&owned=false&page=1&per_page=20&repository_checksum_failed=false&simple=false&sort=desc&starred=false&statistics=false&wiki_checksum_failed=false&with_custom_attributes=false&with_issues_enabled=false&with_merge_requests_enabled=false>; rel="first", <https://gitlab.my_domain.tld/api/v4/projects?<my_project_token>=&membership=false&order_by=created_at&owned=false&page=1&per_page=20&repository_checksum_failed=false&simple=false&sort=desc&starred=false&statistics=false&wiki_checksum_failed=false&with_custom_attributes=false&with_issues_enabled=false&with_merge_requests_enabled=false>; rel="last"
vary: Origin
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-gitlab-feature-category: projects
x-next-page:
x-page: 1
x-per-page: 20
x-prev-page:
x-request-id: 01F39D73G8ZXPJ1E1ZAK0ZS860
x-runtime: 0.184197
x-total: 1
x-total-pages: 1
strict-transport-security: max-age=31536000
referrer-policy: strict-origin-when-cross-origin

bash-5.1# 

凭据不会通过,-backend-config也不会直接放入backend.tfvars我在后端拥有的文件中:

后端.tf:

terraform {
    backend "http" { }
}

后端.tfvars:

lock_method = "POST" 
unlock_method = "DELETE" 
retry_max = "3" 
skip_cert_verification = true

我已经通过导出确认 和 的值TF_HTTP_USERNAME是TF_HTTP_PASSWORD在环境变量中设置的。见鬼,我什至将它们设置为全局变量:

declare -x TERRAFORM_VERSION="0.15.0"
declare -x TF_HTTP_PASSWORD="[MASKED]"
declare -x TF_HTTP_USERNAME="project_2_bot"
declare -x TF_LOG="trace"
declare -x TF_PASSWORD="[MASKED]"
declare -x TF_USERNAME="project_2_bot"
declare -x bot_2_token="[MASKED]"

我检查了 api_json.json 的 Gitlab 日志,我看到请求进来了,但是使用 INFO 他们并没有告诉我太多,只是尝试进来了:

{
  "time": "2021-04-15T13:02:00.924Z",
  "severity": "INFO",
  "duration_s": 0.00915,
  "db_duration_s": 0.00207,
  "view_duration_s": 0.00708,
  "status": 401,
  "method": "GET",
  "path": "/api/v4/projects/2/terraform/state/infrastructure",
  "params": [],
  "host": "gitlab.my_domain.tld",
  "remote_ip": "10.4.6.95, 127.0.0.1",
  "ua": "Go-http-client/1.1",
  "route": "/api/:version/projects/:id/terraform/state/:name",
  "queue_duration_s": 0.011228,
  "db_count": 2,
  "db_write_count": 0,
  "db_cached_count": 1,
  "cpu_s": 0.017418,
  "mem_objects": 10346,
  "mem_bytes": 423664,
  "mem_mallocs": 1771,
  "correlation_id": "01F3ASZH67FMVS0449NC289C47",
  "meta.caller_id": "/api/:version/projects/:id/terraform/state/:name",
  "meta.remote_ip": "10.4.6.95",
  "meta.feature_category": "infrastructure_as_code",
  "meta.client_id": "ip/10.4.6.95"
}

我正在尝试找出如何提高日志级别以捕获所有进入 API 的事件,但到目前为止还没有。

每次我尝试对后端运行命令时,它都会返回:

Error refreshing state: HTTP remote state endpoint requires auth

我试过 Terraform 版本 0.14.x(不记得最新的是什么)和 0.15

而且我已经没有办法去看了。任何人都经历过这种情况或就如何进一步排除故障提供想法?

terraform gitlab
  • 1 1 个回答
  • 1183 Views

1 个回答

  • Voted
  1. Best Answer
    DavisTasar
    2021-04-17T08:21:08+08:002021-04-17T08:21:08+08:00

    好的,我认为这对于任何关注或在以后的搜索中找到它的观众来说都很重要。

    所以,出现了两个问题:

    我认为 Terraform 和自签名证书行为存在问题(这甚至可能是下面的 go 代码)。因为即使我告诉它不要检查证书,它仍然会报告一个非常奇怪的错误,即证书使用的是通用名称,而不是 SAN 值。但这是另一个问题的征兆。

    我的实际问题是,我认为 Gitlab 文档是错误的。

    所以根据这里的gitlab文档说,在第4步:

    4. Create a Personal Access Token with the api scope.
    

    其中,我创建了一个Project Token ,而不是使用许可证席位计数的个人访问令牌。

    此令牌是项目的本地令牌,用户名为

    project_$(project_id)_bot#
    

    就我而言,哪个是 project_2_bot (没有数字,因为它是第一个,愚蠢)

    根据文档,它说令牌需要 API 访问才能访问 API。

    我相信文档是错误的。我创建的令牌只有 API 访问权限,并且一直失败。一旦我给了它更多访问权限(api、对容器、注册表、存储库的读/写),它实际上就通过了。

    • 0

相关问题

  • 使用 Terraform 创建 GCE 实例,附加辅助磁盘时出错?

  • Terraform,在污点上出现“模块根目录没有资源”错误

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve