43.7. メッセージヘッダー


Google Secret Manager コンポーネントは、以下の 3 つのメッセージヘッダーをサポートしています。

Expand
名前説明デフォルトタイプ

GoogleSecretManagerOperation (producer)

定数: OPERATION

実行する操作。

列挙値:

  • createSecret
  • getSecretVersion
  • deleteSecret
  • listSecrets
 

GoogleSecretManagerOperations

CamelGoogleSecretManagerSecretId (producer)

定数: SECRET_ID

シークレットの ID。

 

String

CamelGoogleSecretManagerVersionId (producer)

定数: VERSION_ID

シークレットのバージョン。

latest

String

43.7.1. GCP Secret Manager プロパティーソースの使用

GCP Secret Manager を使用するには、serviceAccountKey ファイルと GCP projectId を提供する必要があります。これは、アプリケーションを起動する前に環境変数を使用して実行できます。

export $CAMEL_VAULT_GCP_SERVICE_ACCOUNT_KEY=file://path/to/service.accountkey
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.gcp.serviceAccountKey = serviceAccountKey
camel.vault.gcp.projectId = projectId

GCP のデフォルトのクライアントインスタンス を使用する場合は、次の環境変数を指定する必要があります。

export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId

次のように、application.properties ファイルで認証情報を設定することもできます。

camel.vault.gcp.useDefaultInstance = true
camel.vault.gcp.projectId = region
注記

camel.vault.gcp 設定は、Google Secret Manager プロパティー関数 (プロパティーを解決する場合など) にのみ適用されます。シークレットの作成、取得、リスト表示などの operation オプションを使用する場合は、GCP サービスに接続するための通常のオプションを指定する必要があります。

この時点で、{{}} 構文で gcp: を接頭辞として使用することで、次のようにプロパティーを参照できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route}}"/>
    </route>
</camelContext>

ここで、route は GCP Secret Manager サービスに保存されているシークレットの名前になります。

GCP Secret Manager にシークレットが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route:default}}"/>
    </route>
</camelContext>

この場合、シークレットが存在しなければプロパティーの値は default にフォールバックします。

また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。

{
  "username": "admin",
  "password": "password123",
  "engine": "postgres",
  "host": "127.0.0.1",
  "port": "3128",
  "dbname": "db"
}

ルート内で 1 つのシークレット値を取得できます。以下はその例です。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username}}"/>
    </route>
</camelContext>

または、エンドポイントの一部としてプロパティーを再利用します。

GCP Secret Manager に特定のシークレットフィールドが存在しない場合は、デフォルト値を指定できます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username:admin}}"/>
    </route>
</camelContext>

この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "admin" にフォールバックします。

フィールド/デフォルト値を指定して、またはシークレットのみを使用して、両方のアプローチでシークレットの特定のバージョンを取得するための構文もあります。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route@1}}"/>
    </route>
</camelContext>

このアプローチでは、バージョン '1' の RAW ルートシークレットが返されます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <to uri="{{gcp:route:default@1}}"/>
    </route>
</camelContext>

このアプローチでは、シークレットが存在しない場合、またはバージョンが存在しない場合、バージョン '1' またはデフォルト値のルートシークレット値が返されます。

<camelContext>
    <route>
        <from uri="direct:start"/>
        <log message="Username is {{gcp:database/username:admin@1}}"/>
    </route>
</camelContext>

このアプローチでは、データベースシークレットのユーザー名フィールドがバージョン '1' で返されます。あるいは、シークレットが存在しない場合、またはバージョンが存在しない場合は、admin が返されます。

要件は 2 つだけです。

  • Camel アプリケーションに camel-google-secret-manager JAR を追加します。
  • サービスアカウントに、シークレット管理レベルでの操作を実行するための権限を付与します (たとえば、シークレットペイロードにアクセスする、シークレットマネージャーサービスの管理者になるなど)。

43.7.2. シークレット更新時の CamelContext の自動リロード

Secret の更新時に Camel コンテキストをリロードできるようにするには、通常の認証情報 (Google Secret Manager プロパティー関数で使用されるものと同じ) を指定します。

環境変数を使用する場合:

export $CAMEL_VAULT_GCP_USE_DEFAULT_INSTANCE=true
export $CAMEL_VAULT_GCP_PROJECT_ID=projectId

または単純な Camel のメインプロパティーとしての場合:

camel.vault.gcp.useDefaultInstance = true
camel.vault.gcp.projectId = projectId

または、デフォルトのインスタンスを使用する代わりに、サービスアカウントキーファイルへのパスを指定します。

自動更新を有効にするには、追加のプロパティーを設定する必要があります。

camel.vault.gcp.projectId= projectId
camel.vault.gcp.refreshEnabled=true
camel.vault.gcp.refreshPeriod=60000
camel.vault.gcp.secrets=hello*
camel.vault.gcp.subscriptionName=subscriptionName
camel.main.context-reload-enabled = true

ここで、camel.vault.gcp.refreshEnabled は自動コンテキストリロードを有効にし、camel.vault.gcp.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔で、camel.vault.gcp.secrets は更新を追跡するシークレットを表す正規表現です。

camel.vault.gcp.secrets は必須ではないことに注意してください。指定されていない場合、更新イベントのチェックを担当するタスクは、gcp: 接頭辞が付いたプロパティーを考慮します。

camel.vault.gcp.subscriptionName は、追跡されたシークレットに関連付けられた Google PubSub トピックに関連して作成されたサブスクリプション名です。

このメカニズムは、Google Secret Manager に関連する通知システムを利用します。この機能により、すべてのシークレットを 1 個から 10 個までの Google Pubsub トピックに関連付けることができます。これらのトピックは、シークレットのライフサイクルに関連するイベントを受け取ります。

要件は 2 つだけです。

  • Camel アプリケーションに camel-google-secret-manager JAR を追加します。
  • サービスアカウントに、シークレット管理レベルで操作を実行するための権限を付与します (たとえば、シークレットペイロードにアクセスする、シークレットマネージャーサービスの管理者になる、Pubsub サービスに対する権限を持つ、など)。

https://cloud.google.com/sdk/docs/install から gcloud cli をインストールする必要があります。Cli がインストールされたら、ログインして次のコマンドでプロジェクトをセットアップできます。

gcloud auth login

および

gcloud projects create <projectId> --name="GCP Secret Manager Refresh"

プロジェクトでは、シークレットマネージャーサービスを使用するためにサービスアイデンティティーが必要になります。これは次のコマンドで取得できます。

gcloud beta services identity create --service "secretmanager.googleapis.com" --project <project_id>

次のコマンドで、エクスポートする必要があるサービスアカウント名を取得できます。

export SM_SERVICE_ACCOUNT="service-...."

Google Pubsub トピックを通じて特定のシークレットに関連するイベントの通知を受け取るには、そのためのトピックを次のコマンドを使用して作成する必要があります。

gcloud pubsub topics create "projects/<project_id>/topics/pubsub-gcp-sec-refresh"

サービスアカウントは、作成したトピックにメッセージを公開するために Secret Manager の認可を必要とするため、次のコマンドで iam ポリシーバインディングを追加する必要があります。

gcloud pubsub topics add-iam-policy-binding pubsub-gcp-sec-refresh --member "serviceAccount:${SM_SERVICE_ACCOUNT}" --role "roles/pubsub.publisher" --project <project_id>

次に、作成した pubsub-gcp-sec-refresh のサブスクリプションを作成し、次のコマンドで sub-gcp-sec-refresh という名前を付ける必要があります。

gcloud pubsub subscriptions create "projects/<project_id>/subscriptions/sub-gcp-sec-refresh" --topic "projects/<project_id>/topics/pubsub-gcp-sec-refresh"

次に、アプリケーションを実行するためのサービスアカウントを作成する必要があります。

gcloud iam service-accounts create gcp-sec-refresh-sa --description="GCP Sec Refresh SA" --project <project_id>

SA に所有者ロールを割り当てます。

gcloud projects add-iam-policy-binding <project_id> --member="serviceAccount:gcp-sec-refresh-sa@<project_id>.iam.gserviceaccount.com" --role="roles/owner"

ここで、作成した SA のサービスアカウントキーファイルを作成する必要があります。

gcloud iam service-accounts keys create <project_id>.json --iam-account=gcp-sec-refresh-sa@<project_id>.iam.gserviceaccount.com

プロジェクトで Secret Manager API を有効にします。

gcloud services enable secretmanager.googleapis.com --project <project_id>

次のように、PubSub API も有効にします。

gcloud services enable pubsub.googleapis.com --project <project_id>

必要に応じて Billing API も有効にします。

次に、トピック通知を指定してシークレットを作成します。

gcloud secrets create <secret_name> --topics=projects/<project_id>/topics/pubsub-gcp-sec-refresh --project=<project_id>

値を追加します。

gcloud secrets versions add <secret_name> --data-file=<json_secret> --project=<project_id>

これで、projectId とサービスアカウントの json ファイルを使用してシークレットを回復できるようになりました。

43.7.4. Google Secret Manager Producer の操作

Google Functions コンポーネントは、producer 側で次の操作を提供します。

  • createSecret
  • getSecretVersion
  • deleteSecret
  • listSecrets

デフォルトで操作を指定しない場合、producer は createSecret 操作を使用します。

43.7.5. Google Secret Manager Producer の操作例

  • createSecret : この操作は、Secret Manager サービスにシークレットを作成します。
from("direct:start")
    .setHeader("GoogleSecretManagerConstants.SECRET_ID, constant("test"))
    .setBody(constant("hello"))
    .to("google-functions://myProject?serviceAccountKey=/home/user/Downloads/my-key.json&operation=createSecret")
    .log("body:${body}")
  • getSecretVersion : この操作は、Secret Manager サービス内の最新バージョンのシークレット値を取得します。
from("direct:start")
    .setHeader("GoogleSecretManagerConstants.SECRET_ID, constant("test"))
    .to("google-functions://myProject?serviceAccountKey=/home/user/Downloads/my-key.json&operation=getSecretVersion")
    .log("body:${body}")

これにより、シークレット "test" の値がログに記録されます。

  • deleteSecret : この操作は、シークレットを削除します
from("direct:start")
    .setHeader("GoogleSecretManagerConstants.SECRET_ID, constant("test"))
    .to("google-functions://myProject?serviceAccountKey=/home/user/Downloads/my-key.json&operation=deleteSecret")
  • listSecrets : この操作は、プロジェクト myProject のシークレットのリストを返します。
from("direct:start")
    .setHeader("GoogleSecretManagerConstants.SECRET_ID, constant("test"))
    .to("google-functions://myProject?serviceAccountKey=/home/user/Downloads/my-key.json&operation=listSecrets")
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る