假设我要使用Vault中的值创建一个变量。
Widget build(BuildContext context) {
Unit.initialize();
return Provider<AuthService>(
builder: (_) => Auth(),
dispose: (_, AuthService authService) => authService.dispose(),
child: new MaterialApp(
title: 'MyCoolApp',
debugShowCheckedModeBanner: false,
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new RootPage()));
}
有可能吗?
还有另一种在管道内使用保险柜秘密的方法吗?
答案 0 :(得分:2)
我们在构建器映像中添加了一个辅助脚本,该脚本可以将指向机密的GitLab CI / CD作业变量转换为包含Vault机密的作业环境变量。在我们的案例中,我们还使用appRole auth方法来限制临时保险柜访问令牌的有效性。
一个用例示例是:
I want a job env var "MY_SECRET_TOKEN" with a value from a Vault secret.
So I add a CI/CD variable called V_MY_SECRET_TOKEN="secret/<path>/<key>"
Then I insert a job step to retrieve the secret value and populate
the MY_SECRET_TOKEN with the value associated with the key.
变量已添加到GitLab中的CICD作业设置中。
VAULT_ADDR=https://vault.example.com:8200
VAULT_ROLE_ID=db02de05-fa39-4855-059b-67221c5c2f63
VAULT_SECRET_ID=6a174c20-f6de-a53c-74d2-6018fcceff64
VAULT_VAR_FILE=/var/tmp/vault-vars.sh
添加到.gitlab-ci.yml作业定义中的步骤。
script:
- get-vault-secrets-by-approle > ${VAULT_VAR_FILE}
- source ${VAULT_VAR_FILE} && rm ${VAULT_VAR_FILE}
这里是对我们使用的get-vault-secrets-by-approle帮助脚本的引用。
这里是thinking behind the design的摘要。
'before_script'选项不适合我们的工作流程,因为我们在gitlab-ci.yml定义中定义了特权和非特权阶段的组合。非特权作业将生成并进行质量检查代码,而特权作业将打包并释放代码。 VAULT_ROLE_ID和VAULT_SECRET_ID作业变量仅对特权打包和释放作业可见。
我还尝试了使用include,extend和yaml锚,但是我想将项目合并到现有的yaml映射(script: {}
或before_script: {}
)中,而不是将地图中的所有项目替换为模板。
答案 1 :(得分:1)
您可以在脚本之前/之后看到它,并在末尾使用已撤销的令牌。
参见gitlab.eng.cleardata.com
pub/pipelines/gcp-ci.yml
作为示例:
# Obtains credentials via vault (the gitlab-runner authenticates to vault using its AWS credentials)
# Configures the `gcloud` sdk and `kubectl` to authenticate to our *production* cluster
#
# Note: Do not override the before_script or the after_script in your job
#
.auth-prod: &auth-prod
image: cleardata/bionic
before_script:
- |
export CLUSTER_NAME=production
export CLUSTER_LOCATION=us-central1
export CLUSTER_PROJECT_ID=cleardata-production-cluster
- vault login -method=aws -path=gitlab-ci -no-print header_value=gitlab.eng.cleardata.com
- GCP_CREDS=$(vault read -field=private_key_data gitlab-ci/gcp/cleardata-production-cluster/key/deployment-key)
- gcloud auth activate-service-account --key-file=<(base64 -d <<<$GCP_CREDS)
- gcloud auth configure-docker
- gcloud beta container clusters get-credentials $CLUSTER_NAME --region $CLUSTER_LOCATION --project $CLUSTER_PROJECT_ID
after_script:
- vault token revoke -self