シークレットマネージャーAPI
- プラン: Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed
- ステータス: ベータ版
このAPIを使用して、非CI/CDのワークロードからGitLab Secrets Managerのシークレットにアクセスします。
このAPIは、プロジェクトまたはグループ向けに短期間有効なJSON Webトークン(JWT)を生成します。クライアントはこのトークンをOpenBaoバックエンドに提示し、GitLab RunnerがCI/CDジョブ中にシークレットを読み取るのと同様に、シークレットを直接読み取ります。レスポンスには、クライアントが必要とするOpenBaoの接続詳細が含まれます。
このAPIは、パーソナルアクセストークン、プロジェクトまたはグループアクセストークン、あるいはapiスコープを持つサービスアカウントのトークンで呼び出します。APIが返すトークンは、GitLabのアクセストークンではなく、別途生成される短期間有効なOpenBao JWTです。これは5分後に期限切れとなります。シークレットの値を読み取るには、そのシークレットに対する読み取り値の権限がプリンシパルに必要です。
返された接続詳細を使用してシークレットを読み取るには、非CI/CDのワークロードからシークレットにアクセスを参照してください。
プロジェクトのシークレットマネージャーアクセストークンを作成する
プロジェクトのシークレットを読み取るためのアクセストークンを生成します。
POST /projects/:id/secrets_manager/access_tokenサポートされている属性は以下のとおりです:
| 属性 | タイプ | 必須 | 説明 |
|---|---|---|---|
id | 整数または文字列 | はい | プロジェクトのIDまたはURLエンコードされたパス。 |
リクエストの例:
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/1/secrets_manager/access_token"レスポンス例:
{
"expires_at": "2026-05-27T10:35:00Z",
"provider": {
"vault": {
"server": "https://secrets.gitlab.com",
"namespace": "org_5/group_42/project_99",
"path": "secrets/kv",
"version": "v2",
"secrets_path": "explicit",
"auth": {
"jwt": {
"path": "api_jwt/cel",
"role": "all_api",
"token": "<JWT>"
}
}
}
}
}レスポンス属性:
| 属性 | タイプ | 説明 |
|---|---|---|
expires_at | 文字列 | トークンの有効期限が切れるISO 8601タイムスタンプ。トークンは5分間有効です。 |
provider.vault.server | 文字列 | 接続するOpenBaoサーバーのURL。GitLab.comでは、これはhttps://secrets.gitlab.comです。GitLab Self-Managedでは、インスタンス用に設定されたOpenBao URLです。 |
provider.vault.namespace | 文字列 | プロジェクトのシークレットを保持するOpenBaoネームスペース。それをX-Vault-Namespaceヘッダーとして渡します。 |
provider.vault.path | 文字列 | KVシークレットエンジンのマウントパス。 |
provider.vault.version | 文字列 | KVシークレットエンジンのバージョン。 |
provider.vault.secrets_path | 文字列 | シークレットが保存されているKVエンジンのベースパス。シークレット名の前に付加して、読み取りパスを構築します(<path>/data/<secrets_path>/<secret_name>)。 |
provider.vault.auth.jwt.path | 文字列 | JWT認証メソッドのマウントパス。auth/<path>/loginで認証します。 |
provider.vault.auth.jwt.role | 文字列 | ログインに使用するJWT認証ロール。 |
provider.vault.auth.jwt.token | 文字列 | クライアントがOpenBaoに提示する短期間有効なJWT。 |
グループのシークレットマネージャーアクセストークンを作成する
グループのシークレットを読み取るためのアクセストークンを生成します。
POST /groups/:id/secrets_manager/access_tokenサポートされている属性は以下のとおりです:
| 属性 | タイプ | 必須 | 説明 |
|---|---|---|---|
id | 整数または文字列 | はい | グループのIDまたはURLエンコードされたパス。 |
リクエストの例:
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/groups/1/secrets_manager/access_token"レスポンス例:
{
"expires_at": "2026-05-27T10:35:00Z",
"provider": {
"vault": {
"server": "https://secrets.gitlab.com",
"namespace": "org_5/group_42/group_99",
"path": "secrets/kv",
"version": "v2",
"secrets_path": "explicit",
"auth": {
"jwt": {
"path": "api_jwt/cel",
"role": "all_api",
"token": "<JWT>"
}
}
}
}
}応答の属性は、プロジェクトのシークレットマネージャーアクセストークンを作成するの場合と同じですが、provider.vault.namespaceはグループにスコープ指定されています。