Udostępnij za pośrednictwem


Obsługa rozwiązania Spring Cloud Azure MySQL

Ten artykuł dotyczy: ✔️ wersja 4.14.0 ✔️ w wersji 5.8.0

Azure Database for MySQL to usługa relacyjnej bazy danych obsługiwana przez program MySQL Community Edition. Do hostowania bazy danych MySQL na platformie Azure można użyć pojedynczego serwera lub serwera elastycznego. Jest to w pełni zarządzana oferta bazy danych jako usługi, która może obsługiwać obciążenia o krytycznym znaczeniu z przewidywalną wydajnością i dynamiczną skalowalnością.

W wersji platforma 4.5.0Spring Cloud pomoc techniczna platformy Azure różne typy poświadczeń na potrzeby uwierzytelniania na serwerze elastycznym usługi Azure Database for MySQL.

Obsługiwana wersja programu MySQL

Bieżąca wersja startera powinna używać wersji 5.7 serwera elastycznego usługi Azure Database for MySQL lub 8.0.

Podstawowe funkcje

Połączenie bez hasła

Połączenie bez hasła używa uwierzytelniania Entra firmy Microsoft do nawiązywania połączenia z usługami platformy Azure bez przechowywania poświadczeń w aplikacji, jej plikach konfiguracji lub zmiennych środowiskowych. Uwierzytelnianie entra firmy Microsoft to mechanizm nawiązywania połączenia z usługą Azure Database for MySQL przy użyciu tożsamości zdefiniowanych w identyfikatorze Entra firmy Microsoft. Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługi firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.

Jak to działa

Platforma Spring Cloud Azure najpierw utworzy jeden z następujących typów poświadczeń w zależności od konfiguracji uwierzytelniania aplikacji:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Jeśli żaden z tych typów poświadczeń nie zostanie znaleziony, DefaultAzureCredential poświadczenia zostaną uzyskane z właściwości aplikacji, zmiennych środowiskowych, tożsamości zarządzanych lub środowiska IDE. Aby uzyskać więcej informacji, zobacz Spring Cloud Azure authentication (Uwierzytelnianie platformy Azure w usłudze Spring Cloud).

Poniższy diagram wysokiego poziomu podsumowuje sposób działania uwierzytelniania przy użyciu uwierzytelniania OAuth w usłudze Azure Database for MySQL. Strzałki wskazują ścieżki komunikacyjne.

Diagram showing Microsoft Entra authentication for MySQL.

Konfigurowanie

Platforma Spring Cloud Azure for MySQL obsługuje następujące dwa poziomy opcji konfiguracji:

  1. Globalne opcje konfiguracji uwierzytelniania i credentialprofile z prefiksami .spring.cloud.azure

  2. Spring Cloud Azure for MySQL — typowe opcje konfiguracji.

W poniższej tabeli przedstawiono typowe opcje konfiguracji platformy Spring Cloud azure for MySQL:

Nazwa/nazwisko opis
spring.datasource.azure.passwordless-enabled Czy włączyć połączenia bez hasła z bazami danych platformy Azure przy użyciu poświadczeń tokenu OAuth2 Firmy Microsoft Entra.
spring.datasource.azure.credential.client-certificate-password Hasło pliku certyfikatu.
spring.datasource.azure.credential.client-certificate-path Ścieżka pliku certyfikatu PEM do użycia podczas przeprowadzania uwierzytelniania jednostki usługi na platformie Azure.
spring.datasource.azure.credential.client-id Identyfikator klienta do użycia podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. Jest to starsza właściwość.
spring.datasource.azure.credential.client-secret Klucz tajny klienta używany podczas przeprowadzania uwierzytelniania jednostki usługi za pomocą platformy Azure. Jest to starsza właściwość.
spring.datasource.azure.credential.managed-identity-enabled Czy włączyć tożsamość zarządzaną do uwierzytelniania za pomocą platformy Azure. Jeśli wartość true i client-id jest ustawiona, użyje identyfikatora klienta jako identyfikatora klienta tożsamości zarządzanej przypisanej przez użytkownika. Domyślna wartość to false.
spring.datasource.azure.credential.password Hasło do użycia podczas przeprowadzania uwierzytelniania nazwy użytkownika/hasła na platformie Azure.
spring.datasource.azure.credential.username Nazwa użytkownika do użycia podczas przeprowadzania uwierzytelniania nazwy użytkownika/hasła na platformie Azure.
spring.datasource.azure.profile.cloud-type Nazwa chmury platformy Azure do nawiązania połączenia.
spring.datasource.azure.profile.environment.active-directory-endpoint Punkt końcowy firmy Microsoft Entra do nawiązania połączenia.
spring.datasource.azure.profile.tenant-id Identyfikator dzierżawy dla zasobów platformy Azure. Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy.

Konfiguracja zależności

Dodaj następującą zależność do projektu. Spowoduje to automatyczne uwzględnienie spring-boot-starter zależności w projekcie przechodnio.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>

Uwaga

Połączenia bez hasła są obsługiwane od wersji 4.5.0.

Pamiętaj, aby dodać element BOM spring-cloud-azure-dependencies wraz z powyższą zależnością. Aby uzyskać więcej informacji, zobacz sekcję Wprowadzenie w przewodniku deweloperów platformy Azure platformy Spring Cloud.

Podstawowy sposób użycia

W poniższych sekcjach przedstawiono klasyczne scenariusze użycia aplikacji Spring Boot.

Ważne

Połączenie bez hasła korzysta z uwierzytelniania firmy Microsoft Entra. Aby użyć uwierzytelniania firmy Microsoft Entra, należy najpierw ustawić użytkownika administratora firmy Microsoft Entra. Tylko użytkownik administracyjny firmy Microsoft Entra może tworzyć i włączać użytkowników na potrzeby uwierzytelniania opartego na identyfikatorze Entra firmy Microsoft. Aby uzyskać więcej informacji, zobacz Use Spring Data JDBC with Azure Database for MySQL (Używanie rozwiązania Spring Data JDBC z usługą Azure Database for MySQL).

Połączenie do usługi Azure MySQL lokalnie bez hasła

  1. Aby utworzyć użytkowników i przyznać uprawnienia, zobacz sekcję Tworzenie użytkownika niebędącego administratorem programu MySQL i udzielanie uprawnień w temacie Use Spring Data JDBC with Azure Database for MySQL (Używanie rozwiązania Spring Data JDBC z usługą Azure Database for MySQL).

  2. Skonfiguruj następujące właściwości w pliku application.yml :

    spring:
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME}
        azure:
          passwordless-enabled: true
    

Połączenie do usługi Azure MySQL przy użyciu jednostki usługi

  1. Utwórz użytkownika entra firmy Microsoft dla jednostki usługi i przyznaj uprawnienie.

    1. Najpierw użyj następujących poleceń, aby skonfigurować niektóre zmienne środowiskowe.

      export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \
          --display-name <service_principal-name> \
          --query '[0].appId' 
          --output tsv)
      export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME>
      export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME>
      export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME>
      export CURRENT_USERNAME=$(az ad signed-in-user show \
          --query userPrincipalName \
          --output tsv)
      
    2. Następnie utwórz skrypt SQL o nazwie create_ad_user_sp.sql na potrzeby tworzenia użytkownika niebędącego administratorem. Dodaj następującą zawartość i zapisz ją lokalnie:

      cat << EOF > create_ad_user_sp.sql
      SET aad_auth_validate_oids_in_tenant = OFF;
      CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID';
      GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%';
      FLUSH privileges;
      EOF
      
    3. Użyj następującego polecenia, aby uruchomić skrypt SQL, aby utworzyć użytkownika innego niż administrator firmy Microsoft:

      mysql -h $AZURE_MYSQL_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user_sp.sql
      
    4. Teraz użyj następującego polecenia, aby usunąć tymczasowy plik skryptu SQL:

      rm create_ad_user_sp.sql
      
  2. Skonfiguruj następujące właściwości w pliku application.yml :

    spring:
      cloud:
        azure:
          credential:
            client-id: ${AZURE_CLIENT_ID}
            client-secret: ${AZURE_CLIENT_SECRET}
          profile:
            tenant-id: <tenant>
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_SP_USERNAME}
        azure:
          passwordless-enabled: true
    

Uwaga

Dozwolone tenant-id wartości to: common, organizations, consumerslub identyfikator dzierżawy. Aby uzyskać więcej informacji na temat tych wartości, zobacz sekcję Użycie nieprawidłowego punktu końcowego (konta osobiste i konta organizacji) w sekcji Błąd AADSTS50020 — konto użytkownika od dostawcy tożsamości nie istnieje w dzierżawie. Aby uzyskać informacje na temat konwertowania aplikacji z jedną dzierżawą, zobacz Konwertowanie aplikacji z jedną dzierżawą na wielodostępny w usłudze Microsoft Entra ID.

Połączenie do usługi Azure MySQL przy użyciu tożsamości zarządzanej w usłudze Azure Spring Apps

  1. Aby włączyć tożsamość zarządzaną, zobacz sekcję Przypisywanie tożsamości zarządzanej przy użyciu witryny Azure Portal w temacie Migrowanie aplikacji do używania połączeń bez hasła z usługą Azure Database for MySQL.

  2. Aby udzielić uprawnień, zobacz sekcję Przypisywanie ról do tożsamości zarządzanej w sekcji Migrowanie aplikacji w celu używania połączeń bez hasła z usługą Azure Database for MySQL.

  3. Skonfiguruj następujące właściwości w pliku application.yml :

    spring:
      datasource:
        url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME}
        username: ${AZURE_MYSQL_AD_MI_USERNAME}
        azure:
          passwordless-enabled: true
    

Przykłady

Zobacz repozytorium azure-spring-boot-samples w witrynie GitHub.