最新の安定バージョンについては、Spring Cloud Config 5.0.5 を使用してください!

Google シークレットマネージャーバックエンド

Spring Cloud Config サーバーは Google Cloud Secret Manager を EnvironmentRepository として使用できます。秘密情報は PropertySource として公開され、そのエントリは秘密ペイロードから構築されます。

バックエンドを有効にする

以下のすべての条件が満たされた場合、リポジトリは登録されます。

  • Spring プロファイル secret-manager はアクティブです。

  • com.google.cloud.secretmanager.v1.SecretManagerServiceClient はクラスパス上にあります (通常は google-cloud-secretmanager を追加することによって)。

pom.xml
<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-secretmanager</artifactId>
</dependency>

spring-cloud-config-server をオプションの Google ライブラリなしで使用する場合は、ビルドに必要なアーティファクトを明示的に追加してください。以下で説明する権限チェックは Cloud Resource Manager API を使用します。この動作に依存する場合は、google-api-services-cloudresourcemanager と google-auth-library-oauth2-http を含めてください。

spring:
  profiles:
    active: secret-manager
  cloud:
    config:
      server:
        gcp-secret-manager:
          order: 0
          application-label: application
          profile-label: profile
          service-account: /path/to/service-account.json
          token-mandatory: true
          version: 1

構成プロパティは spring.cloud.config.server.gcp-secret-manager にバインドされています。

プロパティ デフォルト 説明

order

他の環境リポジトリと同様

複合リポジトリ(org.springframework.core.Ordered)でオーダーします。

application-label

application

構成サーバー {application} 名と一致するために使用される Secret Manager ラベルキー ( マッピングアプリケーションとプロファイルを参照)。

profile-label

profile

シークレットマネージャーのラベルキーは、各アクティブプロファイルを照合するために使用されます(マッピングアプリケーションとプロファイルを参照)。

service-account

空の

Google クラウドサービスアカウントの JSON キーファイルへのパス。設定されている場合、Secret Manager クライアントはこの認証情報を使用します。設定されていない場合、クライアントは Application Default Credentials (たとえば、Google Compute Engine 上のメタデータサーバー)を使用します。

token-mandatory

true

true の場合、シークレットはオプションの権限チェック (token-mandatory) が成功した場合にのみロードされます。false の場合、そのチェックはスキップされ、サーバー側のシークレットマネージャーの認証情報のみを使用してシークレットがロードされます。また、allowed-project-ids がクライアントから提供される X-Project-ID に適用されるかどうかも制御します (下記参照)。

allowed-project-ids

空の

token-mandatory が false の場合: 空でない X-Project-ID の許可リスト。空の場合、クライアントから提供されたプロジェクト ID は拒否されます。token-mandatory が true の場合、このプロパティはヘッダーでは無視されます (代わりにオプションの権限チェック (token-mandatory) が適用されます)。メタデータまたは project-id には適用されません。

project-id

空の

Fallback Google Cloud project when X-Project-ID is absent and metadata is unavailable (for example local development). Not validated against allowed-project-ids.

version

1

API アクセス戦略バージョン(1 のみサポート)。

マッピングアプリケーションとプロファイル

サーバーは、Google クラウドプロジェクト(Google クラウドプロジェクトの解決を参照)内のシークレットを一覧表示し、各構成クライアントリクエストに対してフィルタリングします。

  • Label-based matching (default) : 特定の {application} およびプロファイルに対して、シークレットマネージャーのラベルが、設定済みのキー (application-label および profile-label) 上で大文字小文字を区別せずに一致する場合に、シークレットが含まれます。シークレットにラベルがない場合、コードはそれをそれぞれデフォルトの文字列 application または profile (プロパティ名と同じキー) として扱うため、ラベルのないシークレットはこれらのデフォルト値に準拠します。

  • Prefix-based matching : HTTP リクエストに空でない X-Secret-Prefix ヘッダーが含まれている場合、ショートネーム(projects/…​/secrets/ の後のセグメント)がそのプレフィックスで始まるシークレットも含まれます。プレフィックスはプロパティキーから削除されます。このパスは、同じループ内でラベルフィルタリングロジックと組み合わせることができます(GoogleSecretManagerEnvironmentRepository を参照)。

リポジトリは、他のバックエンドと同様に、default プロファイルが他のプロファイルよりも先に考慮されるように常に保証します。クライアントが最初に default を送信しない場合、サーバーはそれを先頭に追加します。

一致するシークレットごとに、プロパティ値は 最新の有効化されたシークレットバージョンのペイロードになります。「最新」は、数値バージョン ID を比較することによって決定されます(シークレットマネージャーの「最新」エイリアスではありません)。

プロパティソースの名前は gsm:{application}-{profile} です。

Config Server {label} パスセグメントは API で受け入れられますが、このバックエンドではシークレットの選択には使用されません。バージョン選択は、上記で説明したシークレットバージョンに基づいて行われます。

Google クラウドプロジェクトの解決

Secret Manager API 呼び出しはプロジェクト ID にスコープされます。解決は、GoogleSecretManagerV1AccessStrategy 内部の GcpProjectResolutionSupport によって、現在の HTTP リクエストヘッダー、オプションのメタデータ、構成情報を使用して実行されます。

プロジェクトは以下の順序で選ばれます。

  1. Non-empty X-Project-ID header(トリミング後)。token-mandatory が true の場合、ヘッダー値は許可リストのチェックなしで受け入れられ、そのプロジェクトへのアクセスはオプションの権限チェック (token-mandatory) によって強制されます。token-mandatory が false の場合、プロジェクトは allowed-project-ids に存在する必要があります。このリストがの場合、クライアントから提供されたプロジェクト ID は許可されません。

  2. GCE metadata : GET metadata.google.internal/computeMetadata/v1/project/project-id (英語) 、ヘッダー Metadata-Flavor: Google。インスタンスのプロジェクトを使用します(クライアントはこのパスを介して操作できません)。許可リストは適用されません。

  3. project-id プロパティ spring.cloud.config.server.gcp-secret-manager.project-id が設定され、メタデータからプロジェクトが生成されなかった場合。サーバー管理者設定のみ。許可リストは適用されません。

プロジェクトが解決できない場合、getSecrets() はシークレットがない (GSM で裏付けられたエントリがない) かのように動作し、token-mandatory が true の場合、checkRemotePermissions() は false を返します。そのため、リポジトリはそのリクエストに対して GSM PropertySource を提供しません。これは、権限チェックの失敗と一致します。

token-mandatory を false に設定すると、クライアントは allowed-project-ids リストにある任意のプロジェクトからシークレットをロードできるようになります。token-mandatory を false に設定しないことを推奨します。そうすることで、シークレットをロードする前にオプションの権限チェック (token-mandatory) が実行されるようになります。
token-mandatory false を使用する場合、X-Project-ID に依存するクライアントは、allowed-project-ids で許可されたプロジェクト ID をリストする必要があります。

秘密を一覧表示および閲覧するための認証情報

秘密情報の一覧表示と秘密値へのアクセスには、SecretManagerServiceClient のみが使用されます。

  • service-account が設定されている場合: その JSON ファイルから取得した認証情報。

  • それがなければ: アプリケーションのデフォルト認証情報。

X-Config-Token における OAuth アクセストークンは、シークレットマネージャークライアントには渡されません。これらの認証情報は、クライアントトークンとは関係なく、常にサーバー(またはキーファイル)のものです。

オプションの権限チェック (token-mandatory)

token-mandatory が true (デフォルト)の場合、サーバーはシークレットをロードする前に、アクセス戦略に対して checkRemotePermissions() を呼び出します。このメソッドは、シークレットマネージャーの呼び出し(Google クラウドプロジェクトの解決を参照)と同じ方法でターゲットプロジェクトを解決し、その後、次の処理を実行します。

  1. X-Config-Token HTTP ヘッダーからアクセストークンを読み取ります(このチェックには必須です。ヘッダーが欠落しているか無効な場合、チェックは失敗します)。

  2. If the project could not be resolved, the check fails.

  3. Uses the Cloud Resource Manager REST API projects.testIamPermissions for that project with the permission secretmanager.versions.access.

  4. If that permission is reported for the token, the check passes and secrets are loaded. If not, or if the API call fails, the check fails and no GSM-backed property sources are added for that request.

So the token in X-Config-Token acts as a gate for whether GSM data is returned when token-mandatory is true, while reading secrets still uses the server ’ s Secret Manager credentials . The principal that passes IAM testing and the principal used for Secret Manager API calls can differ.

When token-mandatory is false, this remote check is not performed and secrets are loaded solely subject to server credentials and Secret Manager data access (subject to project resolution and allowed-project-ids when using X-Project-ID).

HTTP ヘッダー (Config Client to Config Server)

ヘッダー Required when 目的

X-Config-Token

token-mandatory is true for the permission check

Bearer-style access token used only for Cloud Resource Manager testIamPermissions.

X-Project-ID

Recommended when not running on GCP with metadata

Google Cloud project ID for Secret Manager and IAM checks.

X-Secret-Prefix

オプション

Restricts which secrets contribute properties when matching by name prefix (see マッピングアプリケーションとプロファイル ).

Header names are case-insensitive per HTTP; the implementation uses X-Config-TokenX-Project-IDX-Secret-Prefix.