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 サービス プリンシパルを作成するには、次の手順を行います。

  1. 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"
    }
    
  2. JSON 出力の情報を使うように Web アプリの pom.xml ファイルを変更します。

    1. コード エディターを使用して pom.xml ファイルを開きます。

      cd ~/MyWebApp
      code pom.xml
      
    2. azure-webapp-maven-plugin<configuration> セクションを見つけます。

    3. <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>
      
      
    4. Ctrl+Sキーを押して変更を保存します。

    5. Ctrl+Qキーを押してコード エディターを終了します。

  3. 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 サービス プリンシパルを作成する手順は、このユニットの前のセクションと同じです。

  1. 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"
    }
    
  2. Maven で使用される settings.xml ファイルのユーザー バージョンを作成します。

    1. コード エディターを使用して、Maven 設定用の新しい XML ファイルを作成します。

      code ~/.m2/settings.xml
      
    2. 次の 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 値を指定します
    3. Ctrl+Sキーを押して変更を保存します。

    4. Ctrl+Qキーを押してコード エディターを終了します。

  3. 認証ファイルを参照するように Web アプリの pom.xml ファイルを変更します。

    1. コード エディターを使用して pom.xml ファイルを開きます。

      cd ~/MyWebApp
      code pom.xml
      
    2. azure-webapp-maven-plugin<configuration> セクションを見つけます。

    3. <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> 
      
    4. Ctrl+Sキーを押して変更を保存します。

    5. Ctrl+Qキーを押してコード エディターを終了します。

  4. 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 に発行するためにサービス プリンシパルの資格情報が使用されたことを示します。

自分の知識をチェックする

1.

Azure App Service 用 Maven プラグインを使ったデプロイの認証でサポートされていない方法は、次のうちどれですか?

2.

正誤問題:ファイルに Azure サービス プリンシパルを作成するときに返される JSON を保存し、そのファイルを、Azure App Service 用の Maven プラグインでの認証に使用することができます。

3.

Azure App Service 用の Maven プラグインを使用するデプロイの認証で推奨されていない方法は、次のうちどれですか?