我正在使用 Hashicorp Vault 来管理和存储我的秘密。并使用 Gitlab 作为 CI/CD 管道来读取这些秘密。使用此文档https://docs.gitlab.com/ee/ci/examples/authenticating-with-hashicorp-vault/,我可以使用 JWT 读取机密。 但我已经从 Vault CLI 配置了那些秘密/角色/策略
我想知道是否有一种方法可以直接从管道创建策略和角色。例如,第一步是创建这样的角色 -
$ vault write auth/jwt/role/myproject-production - <<EOF
{
"role_type": "jwt",
"policies": ["myproject-production"],
"token_explicit_max_ttl": 60,
"user_claim": "user_email",
"bound_claims_type": "glob",
"bound_claims": {
"project_id": "42",
"ref_protected": "true",
"ref_type": "tag",
"ref": "auto-deploy-*"
}
}
EOF
在这里您可以看到我已将策略
myproject-production
附加到该角色,该角色将像这样创建 -
$ vault policy write myproject-production - <<EOF
# Policy name: myproject-production
#
# Read-only permission on 'secret/data/myproject/production/*' path
path "secret/data/myproject/production/*" {
capabilities = [ "read" ]
}
EOF
从 Vault 成功进行身份验证后,如何从管道执行这两个步骤? 现在我正在做的是,当新用户进来时,我去为他创建
policy
和 roles
,以及用户在管道中使用的相同内容来读取秘密。
也许你可以做如下的事情?
import argparse
import json
def parse_args():
parser = argparse.ArgumentParser(description="Generate JSON structure for a project ID")
parser.add_argument('--project-id', required=True, help='Project ID')
return parser.parse_args()
def generate_json_structure(project_id):
data = {
"role_type": "jwt",
"policies": ["myproject-production"],
"token_explicit_max_ttl": 60,
"user_claim": "user_email",
"bound_claims_type": "glob",
"bound_claims": {
"project_id": project_id,
"ref_protected": "true",
"ref_type": "tag",
"ref": "auto-deploy-*"
}
}
return json.dumps(data, indent=4)
def main():
args = parse_args()
json_output = generate_json_structure(args.project_id)
print(json_output)
if __name__ == "__main__":
main()