Menggunakan autentikasi Microsoft Entra untuk gateway yang dihost sendiri
BERLAKU UNTUK: Pengembang | Premium
Gateway yang dihost sendiri Azure API Management memerlukan konektivitas dengan instans API Management berbasis cloud terkait untuk status pelaporan, memeriksa dan menerapkan pembaruan konfigurasi, dan mengirim metrik dan peristiwa.
Selain menggunakan token akses gateway (kunci autentikasi) untuk terhubung dengan instans API Management berbasis cloud-nya, Anda dapat mengaktifkan gateway yang dihost sendiri untuk mengautentikasi ke instans cloud terkait dengan menggunakan aplikasi Microsoft Entra. Dengan autentikasi Microsoft Entra, Anda dapat mengonfigurasi waktu kedaluwarsa yang lebih lama untuk rahasia dan menggunakan langkah-langkah standar untuk mengelola dan memutar rahasia di Direktori Aktif.
Gambaran umum skenario
API konfigurasi gateway yang dihost sendiri dapat memeriksa Azure RBAC untuk menentukan siapa yang memiliki izin untuk membaca konfigurasi gateway. Setelah Anda membuat aplikasi Microsoft Entra dengan izin tersebut, gateway yang dihost sendiri dapat mengautentikasi ke instans API Management menggunakan aplikasi.
Untuk mengaktifkan autentikasi Microsoft Entra, selesaikan langkah-langkah berikut:
- Buat dua peran kustom untuk:
- Biarkan API konfigurasi mendapatkan akses ke informasi RBAC pelanggan
- Memberikan izin untuk membaca konfigurasi gateway yang dihost sendiri
- Memberikan akses RBAC ke identitas terkelola instans API Management
- Membuat aplikasi Microsoft Entra dan memberinya akses untuk membaca konfigurasi gateway
- Menyebarkan gateway dengan opsi konfigurasi baru
Prasyarat
- Instans API Management di tingkat layanan Pengembang atau Premium. Jika diperlukan, selesaikan mulai cepat berikut: Buat instans Azure API Management.
- Provisikan sumber daya gateway pada instans.
- Aktifkan identitas terkelola yang ditetapkan sistem pada instans.
- Gambar kontainer gateway yang dihost sendiri versi 2.2 atau yang lebih baru
Catatan batasan
- Hanya identitas terkelola yang ditetapkan sistem yang didukung.
Membuat peran kustom
Buat dua peran kustom berikut yang ditetapkan di langkah selanjutnya. Anda dapat menggunakan izin yang tercantum dalam templat JSON berikut untuk membuat peran kustom menggunakan portal Azure, Azure CLI, Azure PowerShell, atau alat Azure lainnya.
Saat mengonfigurasi peran kustom, perbarui AssignableScopes
properti dengan nilai cakupan yang sesuai untuk direktori Anda, seperti langganan tempat instans API Management Anda disebarkan.
Peran Layanan Validator Akses API Management Configuration API
{
"Description": "Can access RBAC permissions on the API Management resource to authorize requests in Configuration API.",
"IsCustom": true,
"Name": "API Management Configuration API Access Validator Service Role",
"Permissions": [
{
"Actions": [
"Microsoft.Authorization/*/read"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": []
}
],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/{subscriptionID}"
]
}
Peran Pembaca Konfigurasi GATEWAY API Management
{
"Description": "Can read self-hosted gateway configuration from Configuration API",
"IsCustom": true,
"Name": "API Management Gateway Configuration Reader Role",
"Permissions": [
{
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.ApiManagement/service/gateways/getConfiguration/action"
],
"NotDataActions": []
}
],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/{subscriptionID}"
]
}
Tambahkan penetapan peran
Menetapkan Peran Layanan Validator Akses API Management Configuration API
Tetapkan Peran Layanan Validator Akses API Management Configuration API ke identitas terkelola instans API Management. Untuk langkah-langkah terperinci untuk menetapkan peran, lihat Menetapkan peran Azure menggunakan portal.
- Cakupan: Grup sumber daya atau langganan tempat instans API Management disebarkan
- Peran: Peran Layanan Validator Akses API Management Configuration API
- Menetapkan akses ke: Identitas terkelola instans API Management
Menetapkan Peran Pembaca Konfigurasi GATEWAY API Management
Langkah 1: Daftarkan aplikasi Microsoft Entra
Buat aplikasi Microsoft Entra baru. Untuk langkah-langkahnya, lihat Membuat aplikasi Microsoft Entra dan perwakilan layanan yang dapat mengakses sumber daya. Aplikasi ini akan digunakan oleh gateway yang dihost sendiri untuk mengautentikasi ke instans API Management.
- Membuat rahasia klien
- Perhatikan nilai aplikasi berikut untuk digunakan di bagian berikutnya saat menyebarkan gateway yang dihost sendiri: ID aplikasi (klien), ID direktori (penyewa), dan rahasia klien
Langkah 2: Tetapkan Peran Layanan Pembaca Konfigurasi GATEWAY API Management
Tetapkan Peran Layanan Pembaca Konfigurasi GATEWAY API Management ke aplikasi.
- Cakupan: Instans API Management (atau grup sumber daya atau langganan tempatnya disebarkan)
- Peran: Peran Pembaca Konfigurasi Gateway API Management
- Menetapkan akses ke: Aplikasi Microsoft Entra
Menyebarkan gateway yang dihost sendiri
Sebarkan gateway yang dihost sendiri ke Kubernetes, menambahkan pengaturan pendaftaran aplikasi Microsoft Entra ke data
elemen gateway ConfigMap
. Dalam contoh file konfigurasi YAML berikut, gateway diberi nama mygw dan file diberi nama mygw.yaml
.
Penting
Jika Anda mengikuti panduan penyebaran Kubernetes yang ada:
- Pastikan untuk menghilangkan langkah untuk menyimpan kunci autentikasi default menggunakan
kubectl create secret generic
perintah . - Ganti file konfigurasi dasar berikut untuk file YAML default yang dihasilkan untuk Anda di portal Azure. File berikut menambahkan konfigurasi Microsoft Entra sebagai pengganti konfigurasi untuk menggunakan kunci autentikasi.
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mygw-env
labels:
app: mygw
data:
config.service.endpoint: "<service-name>.configuration.azure-api.net"
config.service.auth: azureAdApp
config.service.auth.azureAd.authority: "https://login.microsoftonline.com"
config.service.auth.azureAd.tenantId: "<Azure AD tenant ID>"
config.service.auth.azureAd.clientId: "<Azure AD client ID>"
config.service.auth.azureAd.clientSecret: "<Azure AD client secret>"
gateway.name: <gateway-id>
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mygw
labels:
app: mygw
spec:
replicas: 1
selector:
matchLabels:
app: mygw
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 25%
template:
metadata:
labels:
app: mygw
spec:
terminationGracePeriodSeconds: 60
containers:
- name: mygw
image: mcr.microsoft.com/azure-api-management/gateway:v2
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8081
# Container port used for rate limiting to discover instances
- name: rate-limit-dc
protocol: UDP
containerPort: 4290
# Container port used for instances to send heartbeats to each other
- name: dc-heartbeat
protocol: UDP
containerPort: 4291
readinessProbe:
httpGet:
path: /status-0123456789abcdef
port: http
scheme: HTTP
initialDelaySeconds: 0
periodSeconds: 5
failureThreshold: 3
successThreshold: 1
envFrom:
- configMapRef:
name: mygw-env
---
apiVersion: v1
kind: Service
metadata:
name: mygw-live-traffic
labels:
app: mygw
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- name: http
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8081
selector:
app: mygw
---
apiVersion: v1
kind: Service
metadata:
name: mygw-instance-discovery
labels:
app: mygw
annotations:
azure.apim.kubernetes.io/notes: "Headless service being used for instance discovery of self-hosted gateway"
spec:
clusterIP: None
type: ClusterIP
ports:
- name: rate-limit-discovery
port: 4290
targetPort: rate-limit-dc
protocol: UDP
- name: discovery-heartbeat
port: 4291
targetPort: dc-heartbeat
protocol: UDP
selector:
app: mygw
Sebarkan gateway ke Kubernetes dengan perintah berikut:
kubectl apply -f mygw.yaml
Konfirmasikan bahwa gateway sedang berjalan
Jalankan perintah berikut untuk memeriksa apakah penyebaran telah berhasil. Mungkin perlu sedikit waktu agar semua objek dibuat dan agar pod dapat diinisialisasi.
kubectl get deployments
Ini harus kembali
NAME READY UP-TO-DATE AVAILABLE AGE <gateway-name> 1/1 1 1 18s
Jalankan perintah berikut untuk memeriksa apakah layanan berhasil dibuat. IP dan port layanan Anda akan berbeda.
kubectl get services
Ini harus kembali
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE <gateway-name>-live-traffic ClusterIP None <none> 4290/UDP,4291/UDP 9m1s <gateway-name>-instance-discovery LoadBalancer 10.99.236.168 <pending> 80:31620/TCP,443:30456/TCP 9m1s
Kembali ke portal Microsoft Azure dan pilih Gambaran Umum.
Konfirmasikan bahwa Status menunjukkan tanda centang hijau, diikuti dengan jumlah node yang sesuai dengan jumlah replika yang ditentukan dalam file YAML. Status ini berarti pod gateway yang dihost sendiri yang disebarkan berhasil berkomunikasi dengan layanan API Management dan memiliki "heartbeat" reguler.
Tip
- Jalankan perintah
kubectl logs deployment/<gateway-name>
untuk melihat log dari pod yang dipilih secara acak jika ada lebih dari satu pod. - Jalankan
kubectl logs -h
untuk serangkaian opsi perintah lengkap, seperti cara melihat log untuk pod atau kontainer tertentu.
Langkah berikutnya
- Pelajari selengkapnya tentang gambaran umum gateway yang dihost sendiri API Management.
- Pelajari selengkapnya panduan untuk menjalankan gateway yang dihost sendiri di Kubernetes dalam produksi.
- Pelajari cara menyebarkan gateway API Management yang dihost sendiri ke kluster Kubernetes yang didukung Azure Arc.