正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

シークレットマネージャー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はグループにスコープ指定されています。