このガイドでは、CData Virtuality Server のクレデンシャルストアとしてAzure Key Vault を構成する方法と、データソースの作成時にこれらのクレデンシャルを使用する方法を説明します。

Using Azure Key Vault Credentials in Data Sources

At present, Azure Key Vault support (Preview feature) in the CData Virtuality Server is available only for data sources that are relational databases (MySQL, PostgreSQL, etc).

Pre-requisites

  • CData Virtuality Server v4.10以降;

  • Microsoft Azure Key Vault へのアクセス;

  • 必要なAzure認証情報(クライアントID、クライアントシークレット、テナントID、およびKey Vault URL)。

Configuring and Integrating Azure Key Vault

この短いチュートリアルでは、CData Virtuality Server から機密情報(パスワードなど)を安全に管理し、アクセスできるように Azure Key Vault を設定する方法の概要を説明します。

Steps to Configure Azure Key Vault

  1. アプリケーションの登録
    外部アプリケーションからAzure Key Vault にアクセスする前に、Azure Active Directory にアプリケーションを登録する必要があります。登録後:

    • アプリケーションの概要セクションにクライアントIDテナントID が表示されます;

    • Manage → Certificates & Secrets で、Client Secret を作成します。シークレットは作成直後にしか表示されないので注意してください。

  2. Azure Key Vault の作成とセットアップ
    AzureでKey Vault を作成します。Key Vault のOverviewセクションで、Vault URIを控えてください。これはCData Virtuality Server のクレデンシャルストアの設定に使用されます。

  3. Key Vault Administrator ロールの割り当て
    ユーザーアカウントに、Key Vault に機密情報を追加できるようにします:

    • Key Vault のAccess Control (IAM) に移動します;

    • Key Vault Administrator ロールをユーザーに割り当て、保管庫内のキーと機密情報を管理できるようにします。

  4. Key Vault への機密情報の追加
    Key Vault 内のObjects → Secrets セクションで、管理したい機密情報(データベース パスワードなど)を追加します。これらの機密情報は後ほどCData Virtuality Server の設定で参照します。

  5. シークレットへのアプリケーションアクセスの割り当て
    登録したアプリケーションが特定のシークレットにアクセスできるようにします:

    • Key Vault Secrets Officer ロールをシークレットレベルでアプリケーションに割り当てます;

    • 以下のAzure CLI コマンドを使用して、プレースホルダーを自分の値に置き換えてください:

      az role assignment create --role "Key Vault Secrets Officer" \
      --assignee "CLIENT_ID" \
      --scope "/subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP_NAME/providers/microsoft.keyvault/vaults/AZURE_KEY_VAULT_NAME/secrets/SECRET_KEY_NAME"

    このコマンドを実行するには:

    • Azure ポータル内のAutomation → CLI/PS にアクセスします;

    • Run をクリックしてCloud Shell を開きます;

    • CLI コマンドを貼り付けて実行します。

  6. ロールの割り当ての確認
    CLI コマンドの実行後、Objects → Secrets → SECRET_KEY_NAME → Access control (IAM) に移動します。Key Vault Secrets Officer ロールがアプリケーションに割り当てられていることが確認できるはずです。

Summary

これらの手順を踏むことで、以下が完了しました:

  • Azure Active Directory にアプリケーションを登録;

  • Azure Key Vault を作成および構成;

  • Key Vault のシークレットを追加および管理;

  • アプリケーションがこれらのシークレットにアクセスするために必要なロールの割り当て。

この設定により、Azure Key Vault の認証情報をCData Virtuality Server に統合することができます。これにより、データソースの機密クレデンシャルの安全な外部管理が可能になります。

Configuring the Credential Store in CData Virtuality

  1. Azure Key Vault Provider の追加
    dvserver-standalone.xml 構成ファイルで、Elytron サブシステムと<providers> セクションを探します。<provider-loader name="openssl" .../> エントリの後に、以下のスニペットを追加します:

    <provider-loader name="azure-key-vault-provider"
    module="com.datavirtuality.dv"
    class-names="com.datavirtuality.dv.core.controller.credential.AzureKeyVaultProvider"/>
  2. Azure Key Vault クレデンシャルストアの追加
    Elytron サブシステム内で、<credential-stores> セクションを見つけ、Azure Key Vault クレデンシャルストア構成を追加します。例えば、既存の<secret-key-credential-store> のエントリの後:

    <credential-store name="azure-key-vault-store"
    type="AzureKeyVaultCredentialStore"
    providers="azure-key-vault-provider">
    <implementation-properties>
    <property name="keyVaultUrl" value="KEY_VAULT_URL"/>
    <property name="clientId" value="CLIENT_ID"/>
    <property name="clientSecret" value="CLIENT_SECRET"/>
    <property name="tenantId" value="TENANT_ID"/>
    </implementation-properties>
    <credential-reference clear-text="dummy-value"/>
    </credential-store>

    Note:
    KEY_VAULT_URLCLIENT_IDCLIENT_SECRETTENANT_ID は、実際のAzure Key Vault 構成値に置き換えてください。

  3. 構成の検証
    Azure Key Vault クレデンシャルストアが正常に構成されていることを検証するには、次のストアドプロシージャを実行します:

    CALL SYSADMIN.getCredentialStores();

    これにより、新しく作成されたazure-key-vault-store を含む、構成されたすべてのクレデンシャルストアがリストされます。

Example: Creating an SQL Server Data Source

SYSADMIN.createOrReplaceDatasource プロシージャでクレデンシャルストアとエイリアスを参照することで、データソースを作成するときにAzure Key Vault のクレデンシャルを使用できます。

重要:
connectionProperties では、プレーンな値の代わりに以下の構文を使用してパスワード(またはその他のシークレット)を指定できます:

password="{credentialStoreName=azure-key-vault-store,credentialStoreAlias=SECRET_KEY_NAME_IN_AZURE}"

これは、CData Virtuality Server に、秘密のエイリアスSECRET_KEY_NAME_IN_AZURE(Azure Key Vault の秘密の名前に対応)を使用してazure-key-vault-storeクレデンシャルストアからパスワードを取得するように指示します。

例えば:

CALL "SYSADMIN.createOrReplaceDatasource"(
"name" => 'test',
"translator" => 'sqlserver',
"modelProperties" => 'importer.useFullSchemaName=False,importer.TableTypes="TABLE,VIEW",importer.schemaPattern=dbo,importer.defaultSchema=dbo',
"connectionTemplateName" => 'mssql',
"connectionProperties" => 'user-name=USER_NAME,port=SERVER_PORT,host=HOST,db=DATABASE,password="{credentialStoreName=azure-key-vault-store,credentialStoreAlias=SECRET_KEY_NAME}"',
"enableReplace" => TRUE
);;

Azure Key Vault as a Credential Store (Preview) is available since v4.10