Uwierzytelnianie wdrożeń w usłudze Azure App Service

Ukończone

Aby ukończyć ćwiczenia w tym module, zostałeś zalogowany do środowiska sandbox. Ponieważ to środowisko jest interaktywne, wszystkie wdrożenia zostały uwierzytelnione, korzystając z poświadczeń, których użyłeś, kiedy inicjowałeś piaskownicę. Jednak wdrożenia nie będą używać tego środowiska interaktywnego, jeśli automatyzujesz proces kompilacji. W scenariuszu automatyzacji należy skonfigurować projekt tak, aby używał jednej z obsługiwanych metod uwierzytelniania.

W tej lekcji dowiesz się, jak firma może skonfigurować narzędzie Maven do korzystania z uwierzytelniania platformy Azure.

Uwierzytelnianie aplikacji internetowej

Platforma Azure zapewnia elastyczność podejmowania decyzji o sposobie uwierzytelniania aplikacji. Wybrana opcja zależy od środowiska kompilacji firmy. Poniżej wymieniono trzy opcje uwierzytelniania kodu aplikacji za pomocą narzędzia Maven w kolejności złożoności (od najmniejszych do większości):

  • Uwierzytelnij się przy użyciu interfejsu wiersza polecenia platformy Azure lub użyj usługi Cloud Shell w witrynie Azure Portal.

  • Utwórz jednostkę usługi platformy Azure, utwórz plik JSON przy użyciu poświadczeń jednostki usługi i zmodyfikuj plik pom.xml projektu.

  • Utwórz jednostkę usługi platformy Azure, dodaj poświadczenia jednostki usługi do pliku konfiguracyjnego Maven settings.xml i zmodyfikuj plik pom.xml swojego projektu, aby użyć ustawień Maven.

Firma Microsoft zaleca trzecią opcję, ponieważ zapewnia najbardziej niezawodne, elastyczne i spójne podejście do uwierzytelniania. W rzeczywistym środowisku istniejące aplikacje internetowe Java firmy mogą być uruchomione na serwerach lokalnych, które nie mają zainstalowanych narzędzi interfejsu wiersza polecenia platformy Azure. Mając to na uwadze, prawdopodobnie zaimplementujesz zalecenie, aby dodać uwierzytelnianie przy użyciu jednostki usługi i pliku settings.xml Maven. Jednak w tym ćwiczeniu piaskownica nie posiada wystarczających uprawnień do tworzenia głównych usług.

Uwierzytelnianie przy użyciu interfejsu wiersza polecenia platformy Azure

Najprostszym sposobem uwierzytelniania narzędzia Maven jest zalogowanie się przy użyciu interfejsu wiersza polecenia platformy Azure. Wtyczka Maven dla usługi Azure App Service może następnie wdrożyć aplikację przy użyciu poświadczeń bez konieczności dodatkowej konfiguracji.

Jeśli używasz usługi Azure Cloud Shell, tak jak podczas wykonywania ćwiczeń w piaskownicy usługi Microsoft Learn w tym module, domyślnie logujesz się na platformie Azure; Nie trzeba uruchamiać więcej poleceń. Jeśli jednak używasz interfejsu wiersza polecenia platformy Azure z oddzielnego komputera, musisz zalogować się przy użyciu polecenia az login.

Uwierzytelnianie przy użyciu głównego konta usługi

Druga metoda uwierzytelniania aplikacji internetowej obejmuje utworzenie głównej usługi Azure i zapisanie poświadczeń tej usługi w pliku, do którego będziesz odwoływać się z ustawień projektu.

Aby utworzyć jednostkę usługi platformy Azure za pomocą Azure CLI, wykonaj następujące kroki.

  1. Uruchom następujące polecenie z poziomu interfejsu wiersza polecenia platformy Azure, aby utworzyć jednostkę usługi platformy Azure:

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    Gdzie https://mywebapp-1234567890.azurewebsites.net/ jest adresem URL aplikacji internetowej.

    To polecenie zwraca odpowiedź z obiektem JSON podobnym do następującego przykładu:

    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. Zmodyfikuj plik pom.xml aplikacji internetowej, aby użyć informacji w danych wyjściowych JSON.

    1. Otwórz plik pom.xml za pomocą edytora kodu:

      cd ~/MyWebApp
      code pom.xml
      
    2. Znajdź sekcję <configuration> dla azure-webapp-maven-plugin.

    3. Dodaj następujący kod XML po wierszu zawierającym element <region> i użyj informacji w danych wyjściowych 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>
      

      Sekcja azure-webapp-maven-plugin powinna teraz wyglądać podobnie do poniższego przykładu:

      <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. Zapisz zmiany, wpisując Ctrl+S.

    5. Zamknij edytor kodu, wpisując Ctrl+Q.

  3. Użyj narzędzia Maven, aby skompilować i wdrożyć aplikację internetową w usłudze Azure App Service:

    mvn azure-webapp:deploy
    

    Program Maven wyświetla serię komunikatów kompilacji, a końcowy komunikat powinien wskazywać pomyślne wdrożenie na platformie 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] ------------------------------------------------------------------------
    

    Wiersz Auth type: SERVICE_PRINCIPAL w odpowiedzi wskazuje, że główna usługa została użyta do opublikowania aplikacji internetowej na platformie Azure.

Uwierzytelnianie przy użyciu pliku Maven settings.xml

Trzecia metoda uwierzytelniania aplikacji internetowej polega na utworzeniu jednostki usługi platformy Azure, utworzeniu pliku settings.xml maven zawierającego poświadczenia jednostki usługi i zmodyfikowaniu pliku pom.xml projektu w celu użycia ustawień narzędzia Maven.

Kroki tworzenia głównego węzła usługi Azure za pomocą Azure CLI są takie same jak w poprzedniej sekcji tej jednostki.

  1. Uruchom następujące polecenie z poziomu interfejsu wiersza polecenia platformy Azure, aby utworzyć jednostkę usługi platformy Azure:

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    Gdzie https://mywebapp-1234567890.azurewebsites.net/ jest adresem URL aplikacji internetowej.

    To polecenie zwraca odpowiedź z obiektem JSON podobnym do następującego przykładu:

    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. Utwórz wersję użytkownika pliku settings.xml do użycia przez program Maven.

    1. Utwórz nowy plik XML dla ustawień narzędzia Maven za pomocą edytora kodu:

      code ~/.m2/settings.xml
      
    2. Wklej następujący kod XML do pliku:

      <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>
      

      Gdzie:

      Parametr Opis
      client Określa wartość appId jednostki usługi
      key Określa wartość password jednostki usługi
      tenant Określa wartość tenant jednostki usługi
    3. Zapisz zmiany, wpisując Ctrl+S.

    4. Zamknij edytor kodu, wpisując Ctrl+Q.

  3. Zmodyfikuj plik pom.xml aplikacji internetowej, aby odwoływać się do pliku uwierzytelniania.

    1. Otwórz plik pom.xml za pomocą edytora kodu:

      cd ~/MyWebApp
      code pom.xml
      
    2. Znajdź sekcję <configuration> dla azure-webapp-maven-plugin.

    3. Dodaj następujący kod XML po wierszu zawierającym element <region>:

      <auth>
        <type>service_principal</type>
        <serverId>azure-auth</serverId>
      </auth>
      

      Sekcja azure-webapp-maven-plugin powinna teraz wyglądać podobnie do poniższego przykładu:

      <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. Zapisz zmiany, wpisując Ctrl+S.

    5. Zamknij edytor kodu, wpisując Ctrl+Q.

  4. Użyj narzędzia Maven, aby skompilować i wdrożyć aplikację internetową w usłudze Azure App Service:

    mvn azure-webapp:deploy
    

    Program Maven wyświetla serię komunikatów kompilacji, a końcowy komunikat powinien wskazywać pomyślne wdrożenie na platformie 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] ------------------------------------------------------------------------
    

    Wiersz Auth type: SERVICE_PRINCIPAL w odpowiedzi wskazuje, że poświadczenia jednostki usługi zostały użyte do opublikowania aplikacji internetowej na platformie Azure.