Azure App Service へのデプロイを認証する
このモジュールの演習を行うために、サンドボックス環境にログインしています。 この環境は対話型であるため、すべてのデプロイは、サンドボックスを初期化したときに使用した資格情報を使用して認証されています。 しかし、ビルド プロセスを自動化する場合、ご使用のデプロイでこの対話型環境は使用されません。 自動化シナリオでは、サポートされている認証方法を使用するようにプロジェクトを構成する必要があります。
このユニットでは、お客様の会社で、Azure 認証を使用するように Maven を構成するための方法を学習します。
Web アプリの認証
Azure では、アプリの認証方法を柔軟に決定できます。 選択するオプションは、お客様の会社のビルド環境によって異なります。 ここでは Maven でアプリケーション コードを認証するための 3 つのオプションを示します。最も簡単な方法から最も複雑な方法の順にリストしています。
Azure CLI を使用して認証するか、Azure portal で Cloud Shell を使用する。
Azure サービス プリンシパルを作成し、サービス プリンシパルの資格情報を使って JSON ファイルを作成し、プロジェクトの
pom.xml
ファイルを変更する。Azure サービス プリンシパルを作成し、サービス プリンシパルの資格情報を Maven
settings.xml
ファイルに追加し、Maven 設定を使用するようにプロジェクトのpom.xml
ファイルを変更する。
Microsoft では、3 番目のオプションを推奨しています。これは、信頼性、柔軟性、一貫性が最も高い認証方法を提供します。 実際の設定では、お客様の会社の既存の Java Web アプリが、Azure CLI ツールをインストールしていないローカル サーバーで実行されている可能性があります。 サービス プリンシパルと Maven settings.xml
ファイルを使用する認証を追加するには、この点を考慮して、推奨事項を実装します。 ただし、この演習のサンドボックスには、サービス プリンシパルを作成するための十分な特権がありません。
Azure CLI による認証
Maven を認証する最も簡単な方法は、Azure CLI を使用してサインインすることです。 この場合、Azure App Service 用の Maven プラグインにより、資格情報を使用してアプリがデプロイされ、追加の構成は必要ありません。
Azure Cloud Shell を使用する場合は、このモジュールで Microsoft Learn サンドボックスを使用して演習を行う場合と同様、既定で Azure にログインしています。さらにコマンドを実行する必要はありません。 ただし、別のコンピューターから Azure CLI を使用する場合は、az login
コマンドを使用してサインインする必要があります。
サービス プリンシパルを使った認証
Web アプリを認証するための 2 番目の方法では、Azure サービス プリンシパルを作成し、プロジェクト設定から参照するファイルにサービス プリンシパルの資格情報を保存する必要があります。
Azure CLI を使用して Azure サービス プリンシパルを作成するには、次の手順を行います。
Azure CLI から次のコマンドを実行して、Azure サービス プリンシパルを作成します。
az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
ここで、
https://mywebapp-1234567890.azurewebsites.net/
は、Web アプリの URL です。このコマンドは、次の例のような JSON オブジェクトを含む応答を返します。
Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "displayName": "mywebapp-1234567890.azurewebsites.net/", "name": "https://mywebapp-1234567890.azurewebsites.net/", "password": "...", "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt" }
JSON 出力の情報を使うように Web アプリの
pom.xml
ファイルを変更します。コード エディターを使用して
pom.xml
ファイルを開きます。cd ~/MyWebApp code pom.xml
azure-webapp-maven-plugin
の<configuration>
セクションを見つけます。<region>
要素を含む行の後に次の XML を追加し、JSON 出力の情報を使います。<auth> <type>service_principal</type> <client>value-of-appId</client> <tenant>value-of-tenant</tenant> <key>value-of-password</key> <environment>azure</environment> </auth>
azure-webapp-maven-plugin
セクションは、次の例のようになります。<plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>2.13.0</version> <configuration> <schemaVersion>v2</schemaVersion> <resourceGroup>MyWebApp-1714654093047-rg</resourceGroup> <appName>MyWebApp-1714654093047</appName> <pricingTier>S1</pricingTier> <region>centralus</region> <auth> <type>service_principal</type> <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client> <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant> <key>abcdefghijklmnopqrstuvwxyz1234567890</key> <environment>azure</environment> </auth> <runtime> <os>Linux</os> <javaVersion>Java 17</javaVersion> <webContainer>Tomcat 10.0</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.war</include> </includes> </resource> </resources> </deployment> </configuration> </plugin>
Ctrl+Sキーを押して変更を保存します。
Ctrl+Qキーを押してコード エディターを終了します。
Maven を使用して Web アプリをビルドし、Azure App Service にデプロイします。
mvn azure-webapp:deploy
Maven では一連のビルド メッセージが表示され、最後に、Azure へのデプロイが成功したことを示すメッセージが表示されます。
[INFO] Scanning for projects... [INFO] [INFO] -------------------< com.microsoft.example:MyWebApp >------------------- [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp --- [INFO] Auth type: SERVICE_PRINCIPAL [INFO] Username: 74d82376-184f-400e-a08e-27cd522d7559 [INFO] There is only one subscription '...' in your account, will use it automatically. [INFO] Subscription: ... [INFO] Failed to get version of your artifact, skip artifact compatibility test [INFO] Trying to deploy external resources to MyWebApp-1714654093047... [INFO] Successfully deployed the resources to MyWebApp-1714654093047 [INFO] Trying to deploy artifact to MyWebApp-1714654093047... [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war] ... [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 47.052 s [INFO] Finished at: 2024-05-02T13:10:54Z [INFO] ------------------------------------------------------------------------
応答の
Auth type: SERVICE_PRINCIPAL
行は、Web アプリを Azure に発行するために、サービス プリンシパルが使われたことを示しています。
Maven settings.xml
ファイルによる認証
Web アプリを認証するための 3 番目の方法では、Azure サービス プリンシパルを作成し、サービス プリンシパルの資格情報を含む Maven settings.xml
ファイルを作成し、Maven 設定を使用するようにプロジェクトの pom.xml
ファイルを変更する必要があります。
Azure CLI を使用して Azure サービス プリンシパルを作成する手順は、このユニットの前のセクションと同じです。
Azure CLI から次のコマンドを実行して、Azure サービス プリンシパルを作成します。
az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
ここで、
https://mywebapp-1234567890.azurewebsites.net/
は、Web アプリの URL です。このコマンドは、次の例のような JSON オブジェクトを含む応答を返します。
Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "displayName": "mywebapp-1234567890.azurewebsites.net/", "name": "https://mywebapp-1234567890.azurewebsites.net/", "password": "...", "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt" }
Maven で使用される
settings.xml
ファイルのユーザー バージョンを作成します。コード エディターを使用して、Maven 設定用の新しい XML ファイルを作成します。
code ~/.m2/settings.xml
次の XML をファイルに貼り付けます。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>azure-auth</id> <configuration> <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client> <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant> <key>pppppppp-pppp-pppp-pppp-pppppppppppp</key> </configuration> </server> </servers> </settings>
条件:
パラメーター 説明 client
サービス プリンシパルの appId
値を指定しますkey
サービス プリンシパルの password
値を指定しますtenant
サービス プリンシパルの tenant
値を指定しますCtrl+Sキーを押して変更を保存します。
Ctrl+Qキーを押してコード エディターを終了します。
認証ファイルを参照するように Web アプリの
pom.xml
ファイルを変更します。コード エディターを使用して
pom.xml
ファイルを開きます。cd ~/MyWebApp code pom.xml
azure-webapp-maven-plugin
の<configuration>
セクションを見つけます。<region>
要素を含む行の後に次の XML を追加します。<auth> <type>service_principal</type> <serverId>azure-auth</serverId> </auth>
azure-webapp-maven-plugin
セクションは、次の例のようになります。<plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>2.13.0</version> <configuration> <schemaVersion>V2</schemaVersion> <resourceGroup>maven-publish</resourceGroup> <appName>MyWebApp-1234567890</appName> <pricingTier>S1</pricingTier> <region>centralus</region> <auth> <type>service_principal</type> <serverId>azure-auth</serverId> </auth> <runtime> <os>Linux</os> <javaVersion>Java 17</javaVersion> <webContainer>Tomcat 10.0</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.war</include> </includes> </resource> </resources> </deployment> </configuration> </plugin>
Ctrl+Sキーを押して変更を保存します。
Ctrl+Qキーを押してコード エディターを終了します。
Maven を使用して Web アプリをビルドし、Azure App Service にデプロイします。
mvn azure-webapp:deploy
Maven では一連のビルド メッセージが表示され、最後に、Azure へのデプロイが成功したことを示すメッセージが表示されます。
[INFO] -------------------< com.microsoft.example:MyWebApp >------------------- [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT [INFO] --------------------------------[ war ]--------------------------------- [INFO] [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp --- [INFO] Auth type: SERVICE_PRINCIPAL [INFO] Username: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa [INFO] There is only one subscription '...' in your account, will use it automatically. [INFO] Subscription: ... [INFO] Failed to get version of your artifact, skip artifact compatibility test [INFO] Trying to deploy external resources to MyWebApp-1714654093047... [INFO] Successfully deployed the resources to MyWebApp-1714654093047 [INFO] Trying to deploy artifact to MyWebApp-1714654093047... [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war] ... [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 53.611 s [INFO] Finished at: 2024-05-02T13:53:31Z [INFO] ------------------------------------------------------------------------
応答の
Auth type: SERVICE_PRINCIPAL
行は、Web アプリを Azure に発行するためにサービス プリンシパルの資格情報が使用されたことを示します。