Bagikan melalui


Autentikasi Spring Cloud Azure

Artikel ini menjelaskan semua metode autentikasi Spring Cloud Azure.

Autentikasi dan otorisasi dengan ID Microsoft Entra

Dengan MICROSOFT Entra ID, Anda dapat menggunakan kontrol akses berbasis peran Azure (Azure RBAC) untuk memberikan izin kepada prinsip keamanan, yang mungkin merupakan pengguna atau perwakilan layanan aplikasi. Saat prinsip keamanan (pengguna atau aplikasi) mencoba mengakses sumber daya Azure, misalnya sumber daya Azure Event Hubs, permintaan harus diotorisasi. Dengan ID Microsoft Entra, akses ke sumber daya adalah proses dua langkah:

  1. Pertama, identitas prinsip keamanan diautentikasi, dan token OAuth 2.0 dikembalikan.
  2. Selanjutnya, token diteruskan sebagai bagian dari permintaan ke layanan Azure untuk mengotorisasi akses ke sumber daya yang ditentukan.

Jenis kredensial

Spring Cloud Azure memungkinkan Anda mengonfigurasi berbagai jenis kredensial untuk autentikasi, termasuk DefaultAzureCredential, WorkloadIdentityCredential, ManagedIdentityCredential, ClientSecretCredential, AzureCliCredential, dan sebagainya.

DefaultAzureCredential

DefaultAzureCredential sesuai untuk sebagian besar skenario di mana aplikasi dimaksudkan untuk berjalan di Azure Cloud, karena menggabungkan kredensial berikut:

  • Kredensial yang umumnya digunakan untuk mengautentikasi saat disebarkan.
  • Kredensial yang digunakan untuk mengautentikasi di lingkungan pengembangan.

Nota

DefaultAzureCredential dimaksudkan untuk menyederhanakan memulai Azure SDK dengan menangani skenario umum dengan perilaku default yang wajar. Jika Anda menginginkan lebih banyak kontrol atau pengaturan default tidak mendukung skenario Anda, Anda harus menggunakan jenis kredensial lainnya.

DefaultAzureCredential mencoba mengautentikasi melalui mekanisme berikut secara berurutan:

Diagram memperlihatkan mekanisme autentikasi untuk 'DefaultAzureCredential'.

  • Lingkungan - DefaultAzureCredential mencoba membaca informasi akun yang ditentukan melalui variabel lingkungan dan menggunakannya untuk mengautentikasi.
  • Identitas Terkelola - Jika aplikasi disebarkan ke host Azure dengan Identitas Terkelola diaktifkan, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • Identitas Beban Kerja - Jika aplikasi disebarkan ke komputer virtual (VM), DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • Cache Token Bersama - Jika Anda mengautentikasi melalui Visual Studio, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • IntelliJ - Jika Anda mengautentikasi melalui Azure Toolkit untuk IntelliJ, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • Azure CLI - Jika Anda mengautentikasi akun melalui perintah azure CLI az login, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • Azure PowerShell - Jika Anda mengautentikasi melalui Azure PowerShell, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.
  • Azure Developer CLI - Jika Anda mengautentikasi melalui Azure Developer CLI, DefaultAzureCredential mencoba mengautentikasi dengan akun tersebut.

Ujung

Pastikan perwakilan keamanan memiliki izin yang memadai untuk mengakses sumber daya Azure. Untuk informasi selengkapnya, lihat Mengotorisasi akses dengan ID Microsoft Entra.

Nota

Karena Spring Cloud Azure AutoConfigure 4.1.0, Anda harus mendaftarkan kacang ThreadPoolTaskExecutor bernama springCloudAzureCredentialTaskExecutor untuk mengelola semua utas yang dibuat oleh Azure Identity. Nama setiap utas yang dikelola oleh kumpulan utas ini diawali dengan az-identity-. Kacang ThreadPoolTaskExecutor ini independen dari kacang Executor yang disediakan oleh Spring Boot.

Identitas terkelola

Tantangan umum adalah manajemen rahasia dan kredensial yang digunakan untuk mengamankan komunikasi antara komponen yang berbeda yang membentuk solusi. Identitas terkelola menghilangkan kebutuhan untuk mengelola kredensial. Identitas terkelola menyediakan identitas untuk digunakan aplikasi saat menyambungkan ke sumber daya yang mendukung autentikasi Microsoft Entra. Aplikasi dapat menggunakan identitas terkelola untuk mendapatkan token Microsoft Entra. Misalnya, aplikasi dapat menggunakan identitas terkelola untuk mengakses sumber daya seperti Azure Key Vault tempat Anda dapat menyimpan kredensial dengan cara yang aman atau untuk mengakses akun penyimpanan.

Kami mendorong penggunaan identitas terkelola alih-alih menggunakan string koneksi atau kunci di aplikasi Anda karena lebih aman dan menyimpan masalah dalam mengelola rahasia dan kredensial. Dalam hal ini, DefaultAzureCredential dapat melayani skenario pengembangan secara lokal dengan lebih baik menggunakan informasi akun yang disimpan secara lokal, lalu menyebarkan aplikasi ke Azure Cloud dan menggunakan identitas terkelola.

Jenis identitas terkelola

Ada dua jenis identitas terkelola:

  • yang ditetapkan sistem - Beberapa layanan Azure memungkinkan Anda mengaktifkan identitas terkelola langsung pada instans layanan. Saat Anda mengaktifkan identitas terkelola yang ditetapkan sistem, identitas dibuat di Microsoft Entra yang terikat dengan siklus hidup instans layanan tersebut. Jadi, saat sumber daya dihapus, Azure secara otomatis menghapus identitas untuk Anda. Secara desain, hanya sumber daya Azure yang dapat menggunakan identitas ini untuk meminta token dari ID Microsoft Entra.
  • yang ditetapkan pengguna - Anda juga dapat membuat identitas terkelola sebagai sumber daya Azure mandiri. Anda dapat membuat identitas terkelola yang ditetapkan pengguna dan menetapkannya ke satu atau beberapa instans layanan Azure. Dengan identitas terkelola yang ditetapkan pengguna, identitas dikelola secara terpisah dari sumber daya yang menggunakannya.

Nota

Saat menggunakan identitas terkelola yang ditetapkan pengguna, Anda dapat menentukan ID klien melalui spring.cloud.azure.credential.client-id atau spring.cloud.azure.<azure-service>.credential.client-id. Anda tidak memerlukan konfigurasi kredensial jika Anda menggunakan identitas terkelola yang ditetapkan sistem.

Ujung

Untuk mengakses sumber daya Azure, pastikan prinsip keamanan memiliki izin yang memadai. Untuk informasi selengkapnya, lihat Mengotorisasi akses dengan ID Microsoft Entra.

Untuk informasi selengkapnya tentang identitas terkelola, lihat Apa itu identitas terkelola untuk sumber daya Azure?.

Jenis kredensial lainnya

Jika Anda menginginkan lebih banyak kontrol daripada apa yang disediakan oleh DefaultAzureCredential, atau pengaturan default tidak mendukung skenario Anda, Anda harus menggunakan jenis kredensial lainnya.

Mengautentikasi dengan ID Microsoft Entra

Untuk menyambungkan aplikasi ke sumber daya yang mendukung autentikasi Microsoft Entra, Anda dapat mengatur konfigurasi berikut dengan awalan spring.cloud.azure.credential atau spring.cloud.azure.<azure-service>.credential

Tabel berikut ini mencantumkan properti autentikasi:

Harta benda Deskripsi
id klien ID klien yang akan digunakan saat melakukan autentikasi perwakilan layanan dengan Azure.
rahasia klien Rahasia klien untuk digunakan saat melakukan autentikasi perwakilan layanan dengan Azure.
jalur-sertifikat-klien Jalur file sertifikat PEM yang akan digunakan saat melakukan autentikasi perwakilan layanan dengan Azure.
kata sandi sertifikat-klien Kata sandi file sertifikat.
nama pengguna Nama pengguna yang akan digunakan saat melakukan autentikasi nama pengguna/kata sandi dengan Azure.
kata sandi Kata sandi yang digunakan saat melakukan autentikasi nama pengguna/kata sandi dengan Azure.
identitas terkelola diaktifkan Apakah akan mengaktifkan identitas terkelola.
token-credential-bean-name Nama kacang jenis TokenCredential untuk digunakan saat melakukan autentikasi dengan Azure.

Ujung

Untuk daftar semua properti konfigurasi Spring Cloud Azure, lihat properti konfigurasi Spring Cloud Azure.

Aplikasi ini mencari di beberapa tempat untuk menemukan kredensial yang tersedia. Setiap pabrik penyusun klien Azure SDK mengadopsi kacang kustom jenis TokenCredential terlebih dahulu jika properti token-credential-bean-name ditentukan, dan kembali menggunakan DefaultAzureCredential jika tidak ada properti info masuk yang dikonfigurasi.

Mengautentikasi menggunakan kacang TokenCredential yang dikustomisasi

Contoh berikut menunjukkan kepada Anda cara menentukan kacang TokenCredential kustom untuk melakukan autentikasi:

@Bean
TokenCredential myTokenCredential() {
    // Your concrete TokenCredential instance
}
spring.cloud.azure:
  credential:
    token-credential-bean-name: myTokenCredential

Mengautentikasi menggunakan identitas terkelola yang ditetapkan sistem

Contoh berikut menunjukkan kepada Anda cara mengautentikasi menggunakan identitas terkelola yang ditetapkan sistem:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

Mengautentikasi menggunakan identitas terkelola yang ditetapkan pengguna

Contoh berikut menunjukkan cara mengautentikasi menggunakan identitas terkelola yang ditetapkan pengguna:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
    client-id: ${AZURE_CLIENT_ID}

Mengautentikasi menggunakan perwakilan layanan dengan rahasia klien

Contoh berikut menunjukkan kepada Anda cara mengautentikasi menggunakan perwakilan layanan dengan rahasia klien:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: <tenant>

Nota

Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai-nilai ini, lihat bagian Menggunakan titik akhir yang salah (akun pribadi dan organisasi) dari AADSTS50020 Kesalahan - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang mengonversi aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa di ID Microsoft Entra.

Mengautentikasi menggunakan perwakilan layanan dengan sertifikat klien

Contoh berikut menunjukkan kepada Anda cara mengautentikasi menggunakan perwakilan layanan dengan sertifikat PFX klien:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
    client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
  profile:
    tenant-id: <tenant>

Nota

Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai-nilai ini, lihat bagian Menggunakan titik akhir yang salah (akun pribadi dan organisasi) dari AADSTS50020 Kesalahan - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang mengonversi aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa di ID Microsoft Entra.

Contoh berikut menunjukkan kepada Anda cara mengautentikasi menggunakan perwakilan layanan dengan sertifikat PEM klien:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
  profile:
    tenant-id: <tenant>

Nota

Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai-nilai ini, lihat bagian Menggunakan titik akhir yang salah (akun pribadi dan organisasi) dari AADSTS50020 Kesalahan - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang mengonversi aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa di ID Microsoft Entra.

Mengautentikasi menggunakan kredensial pengguna

Contoh berikut menunjukkan kepada Anda cara mengautentikasi menggunakan kredensial pengguna:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    username: ${AZURE_USER_USERNAME}
    password: ${AZURE_USER_PASSWORD}

Mengautentikasi layanan menggunakan kredensial yang berbeda dari yang lain

Contoh berikut menunjukkan kepada Anda cara mengautentikasi dengan Key Vault menggunakan perwakilan layanan yang berbeda. Contoh ini mengonfigurasi aplikasi dengan dua kredensial: satu identitas terkelola yang ditetapkan sistem dan satu perwakilan layanan. Klien Rahasia Key Vault menggunakan perwakilan layanan, tetapi komponen lain menggunakan identitas terkelola sebagai gantinya.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
  keyvault.secret:
    credential:
      client-id: ${AZURE_CLIENT_ID}
      client-secret: ${AZURE_CLIENT_SECRET}
    profile:
      tenant-id: <tenant>

Nota

Nilai yang diizinkan untuk tenant-id adalah: common, organizations, consumers, atau ID penyewa. Untuk informasi selengkapnya tentang nilai-nilai ini, lihat bagian Menggunakan titik akhir yang salah (akun pribadi dan organisasi) dari AADSTS50020 Kesalahan - Akun pengguna dari penyedia identitas tidak ada di penyewa. Untuk informasi tentang mengonversi aplikasi penyewa tunggal Anda, lihat Mengonversi aplikasi penyewa tunggal ke multipenyewa di ID Microsoft Entra.

Mengotorisasi akses dengan ID Microsoft Entra

Langkah otorisasi mengharuskan satu atau beberapa peran Azure ditetapkan ke prinsip keamanan. Peran yang ditetapkan ke prinsip keamanan menentukan izin yang dimiliki prinsipal.

Ujung

Untuk daftar semua peran bawaan Azure, lihat peran bawaan Azure.

Tabel berikut ini mencantumkan peran bawaan Azure untuk mengotorisasi akses ke layanan Azure yang didukung di Spring Cloud Azure:

Peranan Deskripsi
Pemilik Data App Configuration Memungkinkan akses penuh ke data App Configuration.
Pembaca Data App Configuration Memungkinkan akses baca ke data App Configuration.
Pemilik Data Azure Event Hubs Memungkinkan akses penuh ke sumber daya Azure Event Hubs.
Penerima Data Azure Event Hubs Memungkinkan menerima akses ke sumber daya Azure Event Hubs.
Pengirim Data Azure Event Hubs Memungkinkan pengiriman akses ke sumber daya Azure Event Hubs.
Pemilik Data Azure Service Bus Memungkinkan akses penuh ke sumber daya Azure Service Bus.
Penerima Data Azure Service Bus Memungkinkan akses penerimaan ke sumber daya Azure Service Bus.
Pengirim Data Azure Service Bus Memungkinkan pengiriman akses ke sumber daya Azure Service Bus.
Pemilik Data Blob Penyimpanan Menyediakan akses penuh ke kontainer dan data blob Azure Storage, termasuk menetapkan kontrol akses POSIX.
Pembaca Data Blob Penyimpanan Membaca dan mencantumkan kontainer dan blob Azure Storage.
Pembaca Data Antrean Penyimpanan Membaca dan mencantumkan antrean dan pesan antrean Azure Storage.
Kontributor Cache Redis Mengelola cache Redis.

Nota

Saat menggunakan Spring Cloud Azure Resource Manager untuk mendapatkan string koneksi untuk Event Hubs, Service Bus, dan Storage Queue, atau properti Cache for Redis, tetapkan peran bawaan Azure Contributor. Azure Cache for Redis bersifat khusus, dan Anda juga dapat menetapkan peran Redis Cache Contributor untuk mendapatkan properti Redis.

Nota

Kebijakan akses Key Vault menentukan apakah prinsip keamanan tertentu, yaitu pengguna, aplikasi, atau grup pengguna, dapat melakukan operasi yang berbeda pada rahasia, kunci, dan sertifikat Key Vault. Anda dapat menetapkan kebijakan akses menggunakan portal Microsoft Azure, Azure CLI, atau Azure PowerShell. Untuk informasi selengkapnya, lihat Menetapkan kebijakan akses Key Vault.

Penting

Azure Cosmos DB mengekspos dua definisi peran bawaan: Cosmos DB Built-in Data Reader dan Cosmos DB Built-in Data Contributor. Namun, dukungan portal Microsoft Azure untuk manajemen peran belum tersedia. Untuk informasi selengkapnya tentang model izin, definisi peran, dan penetapan peran, lihat Mengonfigurasi kontrol akses berbasis peran dengan ID Microsoft Entra untuk akun Azure Cosmos DB Anda.

Mengautentikasi menggunakan token SAS

Anda juga dapat mengonfigurasi layanan untuk autentikasi dengan Tanda Tangan Akses Bersama (SAS). spring.cloud.azure.<azure-service>.sas-token adalah properti untuk dikonfigurasi. Misalnya, gunakan spring.cloud.azure.storage.blob.sas-token untuk mengautentikasi ke layanan Blob Penyimpanan.

Mengautentikasi menggunakan string koneksi

Beberapa layanan Azure mendukung string koneksi untuk memberikan informasi koneksi dan kredensial. Untuk menyambungkan ke layanan Azure tersebut menggunakan string koneksi, cukup konfigurasikan spring.cloud.azure.<azure-service>.connection-string. Misalnya, konfigurasikan spring.cloud.azure.eventhubs.connection-string untuk menyambungkan ke layanan Azure Event Hubs.