Azure App Service へのデプロイを認証する
- 10 分
このモジュールの演習を完了するには、サンドボックス環境にログインしました。 この環境は対話型であるため、サンドボックスの初期化時に使用した資格情報を使用して、すべてのデプロイが認証されています。 ただし、ビルド プロセスを自動化する場合、デプロイではこの対話型環境は使用されません。 自動化シナリオでは、サポートされている認証方法のいずれかを使用するようにプロジェクトを構成する必要があります。
このユニットでは、会社が Azure 認証を使用するように Maven を構成する方法について説明します。
Web アプリの認証
Azure では、アプリの認証方法を柔軟に決定できます。 選択するオプションは、会社のビルド環境によって異なります。 Maven を使用してアプリケーション コードを認証するための 3 つのオプションを、複雑さの順に示します (少なくとも 3 つ)。
Azure CLI を使用して認証するか、Azure portal で Cloud Shell を使用します。
Azure サービス プリンシパルを作成し、サービス プリンシパルの資格情報を使用して JSON ファイルを作成し、プロジェクトの
pom.xml
ファイルを変更します。Azure サービス プリンシパルを作成し、Maven
settings.xml
ファイルにサービス プリンシパルの資格情報を追加し、Maven 設定を使用するようにプロジェクトのpom.xml
ファイルを変更します。
Microsoft では、認証に対して最も信頼性が高く、柔軟性が高く、一貫性のあるアプローチを提供するため、3 番目のオプションをお勧めします。 実際の設定では、Azure CLI ツールがインストールされていないローカル サーバーで会社の既存の Java Web アプリが実行されている可能性があります。 これを念頭に置いて、サービス プリンシパルと Maven settings.xml
ファイルを使用して認証を追加する推奨事項を実装する可能性があります。 ただし、この演習では、サンドボックスにはサービス プリンシパルを作成するための十分な特権がありません。
Azure CLI を使用した認証
Maven を認証する最も簡単な方法は、Azure CLI を使用してサインインすることです。 Azure App Service 用の Maven プラグインは、追加の構成を必要とせず、資格情報を使用してアプリをデプロイできます。
Azure Cloud Shell を使用している場合は、このモジュールの Microsoft Learn Sandbox で演習を完了したときと同じように、既定で 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 に発行するために使用されたことを示します。