如何使用管道在 Hashicorp Vault 中编写角色和策略

问题描述 投票:0回答:1

我正在使用 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
,以及用户在管道中使用的相同内容来读取秘密。

gitlab hashicorp-vault gitlab-omnibus
1个回答
0
投票

也许你可以做如下的事情?

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()
© www.soinside.com 2019 - 2024. All rights reserved.