Share via


Oracle WebLogic Servers で Java アプリのパスワードレス データベース接続を構成する

この記事では、Azure portal を使って Oracle WebLogic Server オファーで Java アプリのパスワードレス データベース接続を構成する方法について説明します。

このガイドでは、以下のタスクを実行します。

  • Azure CLI を使ってデータベース リソースをプロビジョニングします。
  • データベースで Microsoft Entra 管理者を有効にします。
  • ユーザーによって割り当てられたマネージド ID をプロビジョニングし、そのデータベース ユーザーを作成します。
  • Azure portal を使って Oracle WebLogic オファーでパスワードレス データベース接続を構成します。
  • データベース接続を検証します。

このオファーでは、PostgreSQL、MySQL、Azure SQL データベースのパスワードレス接続がサポートされます。

前提条件

リソース グループの作成

az group create を使用して、リソース グループを作成します。 リソース グループはサブスクリプション内で一意である必要があるため、一意の名前を選択します。 一意の名前を付ける簡単な方法は、自分の名前のイニシャル、今日の日付、何らかの識別子を組み合わせて使用することです。 たとえば、 abc1228rgです。 この例では、eastus の場所に abc1228rg という名前のリソース グループを作成します。

export RESOURCE_GROUP_NAME="abc1228rg"
az group create \
    --name ${RESOURCE_GROUP_NAME} \
    --location eastus

データベース サーバーとデータベースの作成

az mysql flexible-server create コマンドを使用して、フレキシブル サーバーを作成します。 この例では、管理者ユーザー azureuser と管理者パスワード Secret123456 を使用して、mysql20221201 という名前のフレキシブル サーバーを作成します。 パスワードは実際のパスワードに置き換えます。 詳しくは、「Azure CLI を使用して Azure Database for MySQL フレキシブル サーバーを作成する」をご覧ください。

export MYSQL_NAME="mysql20221201"
export MYSQL_ADMIN_USER="azureuser"
export MYSQL_ADMIN_PASSWORD="Secret123456"

az mysql flexible-server create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --location eastus \
    --admin-user $MYSQL_ADMIN_USER \
    --admin-password $MYSQL_ADMIN_PASSWORD \
    --public-access 0.0.0.0 \
    --tier Burstable \
    --sku-name Standard_B1ms

az mysql flexible-server db create を使ってデータベースを作成します。

export DATABASE_NAME="contoso"

# create mysql database
az mysql flexible-server db create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --database-name $DATABASE_NAME

コマンドが完了すると、次の例のような出力が表示されます。

Creating database with utf8 charset and utf8_general_ci collation
{
  "charset": "utf8",
  "collation": "utf8_general_ci",
  "id": "/subscriptions/contoso-hashcode/resourceGroups/abc1228rg/providers/Microsoft.DBforMySQL/flexibleServers/mysql20221201/databases/contoso",
  "name": "contoso",
  "resourceGroup": "abc1228rg",
  "systemData": null,
  "type": "Microsoft.DBforMySQL/flexibleServers/databases"
}

データベースでの Microsoft Entra 管理者の構成

データベースを作成したので、パスワードレス接続をサポートする準備をする必要があります。 パスワードレス接続には、Azure リソースのマネージド ID と Microsoft Entra 認証の組み合わせが必要です。 Azure リソース用マネージド ID の概要は、「Azure リソース用マネージド ID とは」を参照してください。

MySQL フレキシブル サーバーがマネージド ID を使用する方法については、「MySQL での認証に Microsoft Entra ID を使用する」をご覧ください。

次の例では、現在の Azure CLI ユーザーを Microsoft Entra 管理者アカウントとして構成します。 Azure 認証を有効にするには、MySQL フレキシブル サーバーに ID を割り当てる必要があります。

まず、az identity create を使ってマネージド ID を作成し、az mysql flexible-server identity assign を使って MySQL サーバーに ID を割り当てます。

export MYSQL_UMI_NAME="id-mysql-aad-20221205"

# create a User Assigned Managed Identity for MySQL to be used for AAD authentication
az identity create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_UMI_NAME

## assign the identity to the MySQL server
az mysql flexible-server identity assign \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --identity $MYSQL_UMI_NAME

次に、az mysql flexible-server ad-admin create を使って、現在の Azure CLI ユーザーを Microsoft Entra 管理者アカウントとして設定します。

export CURRENT_USER=$(az account show --query user.name --output tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id --output tsv)

az mysql flexible-server ad-admin create \
    --resource-group $RESOURCE_GROUP_NAME \
    --server-name $MYSQL_NAME \
    --object-id $CURRENT_USER_OBJECTID \
    --display-name $CURRENT_USER \
    --identity $MYSQL_UMI_NAME

ユーザー割り当てマネージド ID を作成する

次に、Azure CLI で az identity create コマンドを使って、サブスクリプションの ID を作成します。 このマネージド ID を使って、データベースに接続します。

az identity create \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity

後の手順で ID を構成するために、az identity show コマンドを使用して、ID のクライアント ID をシェル変数に格納します。

# Get client ID of the user-assigned identity
export CLIENT_ID=$(az identity show \
    --resource-group ${RESOURCE_GROUP_NAME} \
    --name myManagedIdentity \
    --query clientId \
    --output tsv)

マネージド ID のデータベース ユーザーの作成

次に、Microsoft Entra 管理者ユーザーとして MySQL データベースに接続し、マネージド ID 用の MySQL ユーザーを作成します。

まず、CLI クライアントから MySQL サーバーにアクセスするためのファイアウォール規則を作成する必要があります。 次のコマンドを実行し、現在の IP アドレスを取得します。

export MY_IP=$(curl http://whatismyip.akamai.com)

VPN が有効になっている Linux 用 Windows サブシステム (WSL) で作業している場合、以下のコマンドは正しくない IPv4 アドレスを返す可能性があります。 IPv4 アドレスを取得する 1 つの方法として、whatismyipaddress.com にアクセスできます。 いずれの場合も、データベースへの接続元 IPv4 アドレスとして環境変数 MY_IP を設定します。

az mysql flexible-server firewall-rule create を使用して一時的なファイアウォール規則を作成します。

az mysql flexible-server firewall-rule create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --rule-name AllowCurrentMachineToConnect \
    --start-ip-address ${MY_IP} \
    --end-ip-address ${MY_IP}

次に、マネージド ID のデータベース ユーザーを作成するために .sql ファイルを準備します。 次の例では、ログイン名 identity-contoso を持つユーザーを追加し、データベース contoso にアクセスする権限をそのユーザーに付与します。

export IDENTITY_LOGIN_NAME="identity-contoso"

cat <<EOF >createuser.sql
SET aad_auth_validate_oids_in_tenant = OFF;
DROP USER IF EXISTS '${IDENTITY_LOGIN_NAME}'@'%';
CREATE AADUSER '${IDENTITY_LOGIN_NAME}' IDENTIFIED BY '${CLIENT_ID}';
GRANT ALL PRIVILEGES ON ${DATABASE_NAME}.* TO '${IDENTITY_LOGIN_NAME}'@'%';
FLUSH privileges;
EOF

az mysql flexible-server execute コマンドを使って .sql ファイルを実行します。 アクセス トークンは、az account get-access-token コマンドを使って取得できます。

export RDBMS_ACCESS_TOKEN=$(az account get-access-token \
    --resource-type oss-rdbms \
    --query accessToken \
    --output tsv) 

az mysql flexible-server execute \
    --name ${MYSQL_NAME} \
    --admin-user ${CURRENT_USER} \
    --admin-password ${RDBMS_ACCESS_TOKEN} \
    --file-path "createuser.sql"

次の出力に示すように、rdbms-connect 拡張機能のインストールを求められることがあります。 y を押して続行します。 root ユーザーを使用していない場合、ユーザー パスワードを入力する必要があります。

The command requires the extension rdbms-connect. Do you want to install it now? The command will continue to run after the extension is installed. (Y/n): y
Run 'az config set extension.use_dynamic_install=yes_without_prompt' to allow installing extensions without prompt.
This extension depends on gcc, libpq-dev, python3-dev and they will be installed first.
[sudo] password for user:

.sql ファイルが正常に実行されると、次の例のような出力が表示されます。

Running *.sql* file 'createuser.sql'...
Successfully executed the file.
Closed the connection to mysql20221201

ユーザー名 identity-contoso を認証するとき、マネージド ID myManagedIdentity がデータベースにアクセスできるようになりました。

この IP アドレスからサーバーにアクセスする必要がなくなった場合、以下のコマンドを使用してファイアウォール規則を削除できます。

az mysql flexible-server firewall-rule delete \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $MYSQL_NAME \
    --rule-name AllowCurrentMachineToConnect \
    --yes

最後に、以下のコマンドを使用して、次のセクションで使用する接続文字列を取得します。

export CONNECTION_STRING="jdbc:mysql://${MYSQL_NAME}.mysql.database.azure.com:3306/${DATABASE_NAME}?useSSL=true"
echo ${CONNECTION_STRING}

Azure VM における Oracle WebLogic Server のパスワードレス データベース接続の構成

このセクションでは、Oracle WebLogic Server 用の Azure Marketplace オファーを使ってパスワードレス データ ソース接続を構成する方法について説明します。

まず、オファーをデプロイするプロセスを開始します。 以下のオファーでパスワードレス データベース接続がサポートされます。

機能を有効にする場合、[基本] ウィンドウと他のウィンドウに必要な情報を入力します。 [データベース] ウィンドウまで到達したら、次の手順に示すようにパスワードレス構成を入力します。

  1. [データベースに接続しますか?][はい] を選択します。
  2. [接続設定][データベースの種類の選択] でドロップダウン メニューを開き、[MySQL (パスワードレス接続をサポート)] を選択します。
  3. [JNDI 名] に、「testpasswordless」または予期される値を入力します。
  4. [DataSource 接続文字列] に、前回のセクションで取得した接続文字列を入力します。
  5. [データベース ユーザー名] に、マネージド ID のデータベース ユーザー名 (値 ${IDENTITY_LOGIN_NAME}) を入力します。 この例では、値は identity-contoso です。
  6. [パスワードレス データソース接続を使用する] を選択します。
  7. [ユーザーが割り当てたマネージド ID] で、前の手順で作成したマネージド ID を選択します。 この例では、その名前は myManagedIdentity です。

[接続設定] セクションは、次のスクリーンショットのようになります。VM 上の Oracle WebLogic Server Cluster を例として使用しています。

[VM での Oracle WebLogic Server の作成] ページの [データベースの構成] ペインが表示されている Azure portal のスクリーンショット。

これで、パスワードレス接続の構成が完了しました。 引き続き次のウィンドウに入力するか、[確認と作成] を選択した後 [作成] を選択してオファーをデプロイできます。

データベース接続の検証

オファーのデプロイがエラーなしで完了した場合、データベース接続は正常に構成されます。

引き続き、VM 上の Oracle WebLogic Server Cluster を例として使用します。デプロイが完了したら、Azure portal で次の手順に従って管理コンソール URL を見つけます。

  1. WLS をデプロイしたリソース グループを見つけます。
  2. [設定][デプロイ] を選択します。
  3. [期間] が最も長いデプロイを選択します。 このデプロイは、リストの一番下にあります。
  4. [出力] を選択します。
  5. WebLogic 管理コンソールの URL は adminConsoleUrl 出力の値です。
  6. 出力変数 adminConsoleUrl の値をコピーします。
  7. ブラウザーのアドレス バーに値を貼り付けて Enter キーを押すと、WebLogic 管理コンソールのサインイン ページが開きます。

次の手順を使って、データベース接続を検証できます。

  1. [基本] ウィンドウで指定したユーザー名とパスワードを使って、WebLogic 管理コンソールにサインインします。

  2. [ドメイン構造] で、[サービス][データ ソース][testpasswordless] の順に選択します。

  3. 次のスクリーンショットに示すように、データ ソースの状態が [実行中] になっている [監視] タブを選択します。

  4. [テスト] タブを選択し、目的のサーバーの横にあるラジオ ボタンをオンにします。

  5. [データ ソースのテスト] を選択します。 次のスクリーンショットに示すように、テストが成功したことを示すメッセージが表示されます。

    データソースのテストが成功したことを示す WebLogic Console ポータルのスクリーンショット。

リソースをクリーンアップする

これらのリソースが不要な場合は、以下のコマンドを実行することでこれらを削除できます。

az group delete --name ${RESOURCE_GROUP_NAME}
az group delete --name <resource-group-name-that-deploys-the-offer>

次のステップ

AKS または仮想マシンで WLS を実行する方法の詳細については、次のリンクを参照してください。