Şirket içinde barındırılan ağ geçidi için Microsoft Entra kimlik doğrulamasını kullanma

ŞUNLAR IÇIN GEÇERLIDIR: Geliştirici | Premium

Azure API Management şirket içinde barındırılan ağ geçidinin durumu raporlamak, yapılandırma güncelleştirmelerini denetlemek ve uygulamak, ölçümler ve olaylar göndermek için ilişkili bulut tabanlı API Management örneğiyle bağlantıya ihtiyacı vardır.

Bulut tabanlı API Management örneğine bağlanmak için bir ağ geçidi erişim belirteci (kimlik doğrulama anahtarı) kullanmanın yanı sıra, microsoft entra uygulamasını kullanarak şirket içinde barındırılan ağ geçidinin ilişkili bulut örneğinde kimlik doğrulaması yapmasını sağlayabilirsiniz. Microsoft Entra kimlik doğrulaması ile gizli diziler için daha uzun süre sonu süreleri yapılandırabilir ve Active Directory'de gizli dizileri yönetmek ve döndürmek için standart adımları kullanabilirsiniz.

Senaryoya genel bakış

Şirket içinde barındırılan ağ geçidi yapılandırma API'si, ağ geçidi yapılandırmasını okuma izinlerine sahip olan kişileri belirlemek için Azure RBAC'yi denetleyebilir. Bu izinlere sahip bir Microsoft Entra uygulaması oluşturduktan sonra, şirket içinde barındırılan ağ geçidi uygulamayı kullanarak API Management örneğinde kimlik doğrulaması yapabilir.

Microsoft Entra kimlik doğrulamasını etkinleştirmek için aşağıdaki adımları tamamlayın:

  1. şu iki özel rol oluşturun:
    • Yapılandırma API'sinin müşterinin RBAC bilgilerine erişmesine izin ver
    • Şirket içinde barındırılan ağ geçidi yapılandırmasını okuma izinleri verme
  2. API Management örneğinin yönetilen kimliğine RBAC erişimi verme
  3. Bir Microsoft Entra uygulaması oluşturma ve ağ geçidi yapılandırmasını okuması için erişim verme
  4. Ağ geçidini yeni yapılandırma seçenekleriyle dağıtma

Önkoşullar

Sınırlama notları

  • Yalnızca sistem tarafından atanan yönetilen kimlik desteklenir.

Özel roller oluşturma

Sonraki adımlarda atanan aşağıdaki iki özel rolü oluşturun. Azure portalı, Azure CLI, Azure PowerShell veya diğer Azure araçlarını kullanarak özel roller oluşturmak için aşağıdaki JSON şablonlarında listelenen izinleri kullanabilirsiniz.

Özel rolleri yapılandırırken, api Management örneğinizin dağıtıldığı abonelik gibi dizininiz için uygun kapsam değerleriyle özelliğini güncelleştirin AssignableScopes .

API Management Yapılandırma API'sinde Erişim Doğrulayıcı Hizmeti Rolü

{
  "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}"
  ]
}

API Management Ağ Geçidi Yapılandırma OkuyucuSu Rolü

{
  "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}"
  ]
}

Rol atamaları ekleme

API Management Yapılandırma API'si Erişim Doğrulayıcısı Hizmet Rolü Atama

API Management Yapılandırması API Erişim Doğrulayıcı Hizmeti Rolünü API Management örneğinin yönetilen kimliğine atayın. Rol atamaya yönelik ayrıntılı adımlar için bkz . Portalı kullanarak Azure rolleri atama.

  • Kapsam: API Management örneğinin dağıtıldığı kaynak grubu veya abonelik
  • Rol: API Management Yapılandırma API'si Erişim Doğrulayıcı Hizmeti Rolü
  • Erişim atama: API Management örneğinin yönetilen kimliği

API Management Ağ Geçidi Yapılandırma Okuyucusu Rolü Atama

1. Adım: Microsoft Entra uygulamasını kaydetme

Yeni bir Microsoft Entra uygulaması oluşturun. Adımlar için bkz . Kaynaklara erişebilen bir Microsoft Entra uygulaması ve hizmet sorumlusu oluşturma. Bu uygulama, API Management örneğinde kimlik doğrulaması yapmak için şirket içinde barındırılan ağ geçidi tarafından kullanılır.

  • İstemci gizli dizisi oluşturma
  • Şirket içinde barındırılan ağ geçidini dağıtırken sonraki bölümde kullanmak üzere aşağıdaki uygulama değerlerini not edin: uygulama (istemci) kimliği, dizin (kiracı) kimliği ve istemci gizli dizisi

2. Adım: API Management Ağ Geçidi Yapılandırma Okuyucu Hizmeti Rolü Atama

Uygulamaya API Management Ağ Geçidi Yapılandırma Okuyucu hizmeti rolünü atayın .

  • Kapsam: API Management örneği (veya dağıtıldığı kaynak grubu veya abonelik)
  • Rol: API Management Ağ Geçidi Yapılandırma OkuyucuSu Rolü
  • Erişim atama: Microsoft Entra uygulaması

Şirket içinde barındırılan ağ geçidini dağıtma

Şirket içinde barındırılan ağ geçidini Kubernetes'e dağıtın ve ağ geçitlerinin ConfigMapöğesine Microsoft Entra uygulama kayıt ayarlarını data ekleyin. Aşağıdaki örnek YAML yapılandırma dosyasında, ağ geçidi mygw ve dosya olarak adlandırılırmygw.yaml.

Önemli

Mevcut Kubernetes dağıtım kılavuzunu izliyorsanız:

  • komutunu kullanarak varsayılan kimlik doğrulama anahtarını depolama adımını atladığından kubectl create secret generic emin olun.
  • Aşağıdaki temel yapılandırma dosyasını Azure portalında sizin için oluşturulan varsayılan YAML dosyasıyla değiştirin. Aşağıdaki dosya, kimlik doğrulama anahtarı kullanmak üzere yapılandırma yerine Microsoft Entra yapılandırmasını ekler.
---
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

Aşağıdaki komutla ağ geçidini Kubernetes'e dağıtın:

kubectl apply -f mygw.yaml

Ağ geçidinin çalıştığını onaylayın

  1. Dağıtımın başarılı olup olmadığını denetlemek için aşağıdaki komutu çalıştırın. Tüm nesnelerin oluşturulması ve podların başlatılması biraz zaman alabilir.

    kubectl get deployments
    

    Döndürülmesi gerekir

    NAME             READY   UP-TO-DATE   AVAILABLE   AGE
    <gateway-name>   1/1     1            1           18s
    
  2. Hizmetlerin başarıyla oluşturulup oluşturulmadığını denetlemek için aşağıdaki komutu çalıştırın. Hizmet IP'leriniz ve bağlantı noktalarınız farklı olacaktır.

    kubectl get services
    

    Döndürülmesi gerekir

    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
    
  3. Azure portalına dönün ve Genel Bakış'ı seçin.

  4. Durum'un yeşil bir onay işareti ve ardından YAML dosyasında belirtilen çoğaltma sayısıyla eşleşen bir düğüm sayısı gösterdiğini onaylayın. Bu durum, dağıtılan şirket içinde barındırılan ağ geçidi podlarının API Management hizmetiyle başarıyla iletişim kurarak normal bir "sinyale" sahip olduğu anlamına gelir. Portalda şirket içinde barındırılan ağ geçidinin durumunu gösteren ekran görüntüsü.

İpucu

  • kubectl logs deployment/<gateway-name> Birden fazla pod varsa rastgele seçilen bir poddaki günlükleri görüntülemek için komutunu çalıştırın.
  • Belirli bir pod veya kapsayıcının günlüklerini görüntüleme gibi eksiksiz bir komut seçenekleri kümesi için komutunu çalıştırın kubectl logs -h .

Sonraki adımlar