13.6. 使用方法
13.6.1. Azure Key Vault プロパティー関数の使用 リンクのコピーリンクがクリップボードにコピーされました!
この関数を使用するには、環境変数として Azure Key Vault サービスに認証情報を提供する必要があります。
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで認証情報を設定することもできます。
camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
または、次の方法で Azure Identity の使用を有効にすることもできます。
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。
camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
camel.vault.azure 設定は、Azure Key Vault プロパティー関数にのみ適用されます (例: プロパティーの解決時)。operation オプションを使用してシークレットの作成、取得、リスト表示などを行う場合は、Azure サービスに接続するための通常のオプションを指定する必要があります。
この時点で、次の方法でプロパティーを参照できるようになります。
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{azure:route}}"/>
</route>
</camelContext>
ここで、route は Azure Key Vault サービスに保存されているシークレットの名前になります。
Azure Key Vault サービスにシークレットが存在しない場合は、デフォルト値を指定できます。
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{azure:route:default}}"/>
</route>
</camelContext>
この場合、シークレットが存在しなければプロパティーの値は "default" にフォールバックします。
また、たとえば次の形式の database という名前のシークレットがある場合、シークレットの特定のフィールドを取得できます。
{
"username": "admin",
"password": "password123",
"engine": "postgres",
"host": "127.0.0.1",
"port": "3128",
"dbname": "db"
}
たとえば次のように、ルート内で単一のシークレット値を取得できます。
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{azure:database/username}}"/>
</route>
</camelContext>
または、エンドポイントの一部としてプロパティーを再利用します。
特定のシークレットフィールドが Azure Key Vault に存在しない場合は、デフォルト値を指定できます。
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{azure:database/username:admin}}"/>
</route>
</camelContext>
この場合、シークレットが存在しないか、シークレットは存在するがユーザー名フィールドがシークレットの一部ではない場合、プロパティーは値として "admin" にフォールバックします。
フィールド/デフォルト値を指定して、またはシークレットのみを使用して、両方のアプローチでシークレットの特定のバージョンを取得するための構文もあります。
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{azure:route@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
</route>
</camelContext>
このアプローチでは、バージョン 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' の RAW ルートシークレットが返されます。
<camelContext>
<route>
<from uri="direct:start"/>
<to uri="{{azure:route:default@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
</route>
</camelContext>
このアプローチでは、バージョン 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' のルートシークレット値が返されます。シークレットが存在しない場合、またはバージョンが存在しない場合は、デフォルト値が返されます。
<camelContext>
<route>
<from uri="direct:start"/>
<log message="Username is {{azure:database/username:admin@bf9b4f4b-8e63-43fd-a73c-3e2d3748b451}}"/>
</route>
</camelContext>
この方法では、バージョン 'bf9b4f4b-8e63-43fd-a73c-3e2d3748b451' のデータベースシークレットの username フィールドが返されます。シークレットが存在しない場合、またはバージョンが存在しない場合は、admin が返されます。
現時点では、ローテーション機能は適用されていても考慮していませんが、今後対応する予定です。
唯一の要件は、Camel アプリケーションに camel-azure-key-vault jar を追加することです。
13.6.2. Secret Refresh での Camel コンテキストの自動リロード リンクのコピーリンクがクリップボードにコピーされました!
シークレット更新時に Camel コンテキストをリロードできるようにするには、通常の認証情報 (Azure Key Vault Property 関数で使用されるものと同じ) を指定します。
環境変数を使用する場合:
export $CAMEL_VAULT_AZURE_TENANT_ID=tenantId
export $CAMEL_VAULT_AZURE_CLIENT_ID=clientId
export $CAMEL_VAULT_AZURE_CLIENT_SECRET=clientSecret
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
または単純な Camel のメインプロパティーとしての場合:
camel.vault.azure.tenantId = accessKey
camel.vault.azure.clientId = clientId
camel.vault.azure.clientSecret = clientSecret
camel.vault.azure.vaultName = vaultName
Azure アイデンティティーを環境変数と共に使用したい場合は、次の方法で実行できます。
export $CAMEL_VAULT_AZURE_IDENTITY_ENABLED=true
export $CAMEL_VAULT_AZURE_VAULT_NAME=vaultName
次のように、application.properties ファイルで Azure アイデンティティーの使用を有効にすることもできます。
camel.vault.azure.azureIdentityEnabled = true
camel.vault.azure.vaultName = vaultName
自動更新を有効にするには、追加のプロパティーを設定する必要があります。
camel.vault.azure.refreshEnabled=true
camel.vault.azure.refreshPeriod=60000
camel.vault.azure.secrets=Secret
camel.vault.azure.eventhubConnectionString=eventhub_conn_string
camel.vault.azure.blobAccountName=blob_account_name
camel.vault.azure.blobContainerName=blob_container_name
camel.vault.azure.blobAccessKey=blob_access_key
camel.main.context-reload-enabled = true
ここで、camel.vault.azure.refreshEnabled は自動コンテキストリロードを有効にし、camel.vault.azure.refreshPeriod は更新イベントの 2 つの異なるチェック間の時間間隔で、camel.vault.azure.secrets は更新を追跡するシークレットを表す正規表現です。
ここで、camel.vault.azure.eventhubConnectionString は通知を取得するイベントハブ接続文字列、camel.vault.azure.blobAccountName、camel.vault.azure.blobContainerName、camel.vault.azure.blobAccessKey は、Azure Eventhub に必要なチェックポイントストアの Azure Storage Blob パラメーターです。
camel.vault.azure.secrets は必須ではないことに注意してください。指定されていない場合、更新イベントのチェックを行うタスクは、azure: 接頭辞を持つプロパティーを考慮します。
唯一の要件は、Camel アプリケーションに camel-azure-key-vault jar を追加することです。
13.6.3. シークレット更新時の Camel コンテキストの自動リロード - 必要なインフラストラクチャーの作成 リンクのコピーリンクがクリップボードにコピーされました!
まずアプリケーションを作成する必要があります。
az ad app create --display-name test-app-key-vault
次に認証情報を取得する必要があります。
az ad app credential reset --id <appId> --append --display-name 'Description: Key Vault app client' --end-date '2024-12-31'
次のような結果が返されます。
{
"appId": "appId",
"password": "pwd",
"tenant": "tenantId"
}
パスワードをメモし、clientSecret パラメーターとして clientId および tenantId と共に使用する必要があります。
key vault を作成します
az keyvault create --name <vaultName> --resource-group <resourceGroup>
アプリケーション ID に関連付けられたサービスプリンシパルを作成します。
az ad sp create --id <appId>
この時点で、ロール割り当てを使用してアプリケーションにロールを追加する必要があります。
az role assignment create --assignee <appId> --role "Key Vault Administrator" --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.KeyVault/vaults/<vaultName>
最後のステップとして、アプリケーションで何ができるか、何ができないかに関するポリシーを作成します。ここでは、シークレットの値を読み取るだけです。そのためには以下で十分なはずです。
az keyvault set-policy --name <vaultName> --spn <appId> --secret-permissions get
次のコマンドを使用して、Azure CLI 経由でシークレットを作成できます。
az keyvault secret set --name <secret_name> --vault-name <vaultName> -f <json-secret>
次に、シークレットの更新について通知を受け取るるために、Eventhub/EventGrid 通知を設定する必要があります。
まず、Eventhub の消費アクティビティーを追跡するために、Blob アカウントと Blob コンテナーが必要になります。
az storage account create --name <blobAccountName> --resource-group <resourceGroup>
次にコンテナーを作成します。
az storage container create --account-name <blobAccountName> --name <blobContainerName>
次に、このためのアクセスキーを回復します
az storage account keys list -g <resourceGroup> -n <blobAccountName>
vault の設定に使用する Blob アカウント名、Blob コンテナー名、Blob アクセスキーをメモします。
Eventhub 側を作成します。
まず名 namespace を作成します。
az eventhubs namespace create --resource-group <resourceGroup> --name <eventhub-namespace> --location westus --sku Standard --enable-auto-inflate --maximum-throughput-units 20
リソースを作成します。
az eventhubs eventhub create --resource-group <resourceGroup> --namespace-name <eventhub-namespace> --name <eventhub-name> --cleanup-policy Delete --partition-count 15
Azure ポータルで、作成した eventhub リソースに対する "MANAGE" 権限を持つ共有ポリシーを作成し、接続文字列をコピーします。
これで、vault を設定するために必要なすべてのパラメーターが揃いました。