我已经启动了 Vault,它在 10.10.10.10:8200 上运行良好。接下来我想在运行 Gitlab CI 时连接到它。我尝试了说明https://docs.gitlab.com/ci/secrets/hashicorp_vault/,但没有任何作用。有几件事还不完全清楚:
- 我启用
vault auth enable jwt
并创建角色
vault write auth/jwt/role/runner - <<EOF
{
"role_type": "jwt",
"policies": ["gitlab-runner"],
"token_explicit_max_ttl": 60,
"user_claim": "user_email",
"bound_claims_type": "glob",
"bound_claims": {
"project_id": "66",
"ref_protected": "true"
}
}
EOF
- 添加JWT认证方法:
vault write auth/jwt/config \
oidc_discovery_url="https://gitlab.my-gitlab.ru" \
bound_issuer="https://gitlab.my-gitlab.ru"
- 在 Gitlab 中将变量添加
VAULT_SERVER_URL=http://10.10.10.10:8200
到VAULT_AUTH_ROLE=runner
我的项目变量中 - 接下来,按照同一文档中的手动 ID 令牌身份验证说明,我配置 .gitlab-ci.yaml。
...
manual_authentication:
variables:
VAULT_ADDR: http://10.10.10.10:8200
image: vault:latest
id_tokens:
VAULT_ID_TOKEN:
aud: http://10.10.10.10
script:
- echo $VAULT_ID_TOKEN
- export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=myproject-example jwt=$VAULT_ID_TOKEN)"
- export PASSWORD="$(vault kv get -field=password secret/myproject)"
但我收到 400 令牌错误:
Error writing data to auth/jwt/login: Error making API request.
URL: PUT http://10.10.10.10:8200/v1/auth/iwt/login
Code: 400. Errors:
* error validating token: invalid issuer (iss) claim
马上就有几个问题:在文档中,在 gitlab-ci.yaml 中aud
,指定了 HTTP://vault.example.com,在上面同一文档的示例中,指定了 "bound_audiences": "HTTPS://vault.example.com" - 为什么不同?或者这些是不同的实体?最后我尝试添加角色"bound_audiences": "http://10.10.10.10"
,但是也不起作用,就像没有这个参数一样。输出echo $VAULT_ID_TOKEN
返回 [MASKED]——无法验证令牌,所以没有办法?请告诉我我做错了什么?以及如何解决Vault与Gitlab之间的通信问题?