Freigeben über


Benutzerdefinierte Domäne mit TLS/SSL in Azure Container Apps

Hinweis

Die Pläne "Basic", "Standard" und "Enterprise" sind am 17. März 2025 in einen Ruhestandszeitraum eingetreten. Weitere Informationen finden Sie in der Ankündigung zur Ausmusterung von Azure Spring Apps.

Dieser Artikel gilt für:✅ Basic/Standard ✅ Enterprise

Die Migration Ihrer benutzerdefinierten Domäne mit TLS/SSL von Azure Spring Apps zu Azure Container Apps umfasst mehrere Schritte, um einen reibungslosen Übergang sicherzustellen. Dieser Artikel führt Sie durch den Prozess, der den Clientdatenverkehr, den Datenverkehr zwischen Anwendungen und den Datenverkehr zu externen Diensten abdeckt.

Voraussetzungen

Clientdatenverkehr zur Anwendung

Standardmäßig verwendet der gesamte eingehende Datenverkehr in der Container-App HTTPS, es sei denn, Sie aktivieren den HTTP-Datenverkehr manuell, den Sie mit dem folgenden Befehl ausführen können:

az containerapp ingress update \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --allow-insecure

Weitere Informationen zum Konfigurieren des Eingangs für Ihre App finden Sie unter Konfigurieren des Eingangs für Ihre App in Azure Container Apps.

Benutzerdefinierte Domäne

Um benutzerdefinierte DNS-Namen (Domain Name System) in Azure Container Apps zu sichern, können Sie digitale Sicherheitszertifikate hinzufügen. Dies unterstützt die sichere Kommunikation zwischen Ihren Apps.

Wenn Sie Ihre benutzerdefinierte Domäne in Azure Container Apps sichern müssen, können Sie ein privates Zertifikat verwenden, das kostenlos und einfach zu verwenden ist. Weitere Informationen finden Sie unter Benutzerdefinierte Domänennamen und kostenlose verwaltete Zertifikate in Azure Container Apps.

Wenn Sie ein privates Zertifikat lokal gespeichert haben, können Sie es hochladen. Weitere Informationen finden Sie unter Benutzerdefinierte Domänennamen und Verwenden eigener Zertifikate in Azure Container Apps.

Wenn Ihr Zertifikat aus Azure Key Vault stammt, können Sie Zertifikate direkt in Azure-Container-Apps importieren. Weitere Informationen finden Sie unter Importieren von Zertifikaten aus Azure Key Vault in Azure-Container-Apps.

Wenn Sie weiterhin das ursprüngliche Zertifikat und den Domänennamen von Azure Spring Apps verwenden möchten, können Sie das Zertifikat in Container-Apps oder Azure Key Vault hochladen. Außerdem können Sie den A-Eintrag oder CNAME in Ihrem DNS-Anbieter aktualisieren, um den ursprünglichen Domänennamen an die IP- oder URL der Container-App umzuleiten.

Aktivieren von mTLS zwischen Client- und Container-Apps

Führen Sie die folgenden Schritte aus, um gegenseitiges TLS (mTLS) zwischen Client- und Container-Apps zu aktivieren:

  1. Verwenden Sie den folgenden Befehl, um die Container-App-Konfiguration im YAML-Format zu exportieren:

    az containerapp show \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --output yaml > app.yaml
    
  2. Aktualisieren Sie den clientCertificateMode-Wert in app.yaml, wie im folgenden Beispiel gezeigt:

    properties:
      configuration:
        ingress:
          clientCertificateMode: require
    

    Sie können diese Eigenschaft auf einen der folgenden Werte festlegen:

    • require: Das Clientzertifikat ist für alle Anforderungen an die Container-App erforderlich.
    • accept: Das Clientzertifikat ist optional. Wenn das Clientzertifikat nicht angegeben wird, wird die Anforderung trotzdem akzeptiert.
    • ignore: Das Clientzertifikat wird ignoriert.
  3. Verwenden Sie den folgenden Befehl, um die clientCertificateMode Änderung auf die Container-App anzuwenden:

    az containerapp update \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --yaml app.yaml
    

Weitere Informationen finden Sie unter Konfigurieren der Clientzertifikatauthentifizierung in Azure Container Apps.

Sie müssen die Clientzertifikatüberprüfung in Ihrem Code behandeln.

Datenverkehr zwischen Anwendungen

Standardmäßig verwendet datenverkehr zwischen Container-Apps in derselben Umgebung HTTP. Um diesen Datenverkehr zu schützen, aktivieren Sie die Peer-to-Peer-Verschlüsselung mit den folgenden Befehlen:

# enable when creating the container app
az containerapp env create \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --location "location" \
    --enable-peer-to-peer-encryption

# enable for the existing container app
az containerapp env update \
    --resource-group "my-resource-group" \
    --name "my-app" \
    --enable-peer-to-peer-encryption

Nach der Aktivierung sichert Azure Container Apps automatisch den HTTP-Datenverkehr über die integrierte transparente Proxying-Funktion. Ihre Anwendung muss in der Regel nicht darauf achten, ob der Datenverkehr verschlüsselt ist oder nicht.

Wenn Sie HTTPS für die interne Kommunikation zwischen Apps verwenden möchten, müssen Sie die Zertifikatüberprüfung übernehmen. Dies liegt daran, dass der Domänenname möglicherweise nicht mit dem Common Name (CN) oder dem Subject Alternative Name (SAN) des Zertifikats übereinstimmt.

Weitere Informationen finden Sie im Abschnitt zur Peer-to-Peer-Verschlüsselung im Dokument Ingress in einer Azure Container Apps Umgebung konfigurieren.

Datenverkehr zu externen Diensten

In diesem Beispiel wird gezeigt, wie TLS und mTLS für den Datenverkehr zu externen Diensten durch Laden des Zertifikats aus Azure Key Vault mithilfe der spring-cloud-azure-starter-keyvault-jca Bibliothek aktiviert werden. Ihr Java-Projekt muss Spring Boot 3.1+ verwenden und die folgende Abhängigkeit in ihre pom.xml Datei einschließen:

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-jca</artifactId>
    <version>5.23.0</version>
</dependency>

Ein Zertifikat aus dem Key Vault mit SSL-Bundle in den Truststore laden

Führen Sie die folgenden Schritte aus, um ein Zertifikat mithilfe der spring-cloud-azure-starter-keyvault-jca Bibliothek in den Truststore aus Azure Key Vault zu laden:

  1. Generieren oder Importieren von Zertifikaten in Azure Key Vault. Weitere Informationen finden Sie unter Erstellen und Importieren von Zertifikaten in Azure Key Vault.

  2. Aktivieren Sie die verwaltete Identität in Ihrer Container-App. Informationen zum Aktivieren der verwalteten Identität in Ihrer Container-App finden Sie unter Verwaltete Identitäten in Azure Container Apps.

  3. Gewähren Sie der verwalteten Identität die Key Vault Certificate User Rolle in Ihrem Key Vault. Weitere Informationen finden Sie unter Bewährte Methoden für einzelne Schlüssel, geheime Schlüssel und Zertifikatrollenzuweisungen.

  4. Fügen Sie ihrer application.yml Datei die folgende Konfiguration hinzu:

    spring:
      ssl:
        bundle:
          keyvault:
            tlsClientBundle:
              truststore:
                keyvault-ref: keyvault1
    cloud:
      azure:
        keyvault:
          jca:
            vaults:
              keyvault1:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
    
  5. Um das Schlüsseltresor-SSL-Bundle anzuwenden, aktualisieren Sie Ihre RestTemplate- oder WebClient-Bean-Konfiguration, wie im folgenden Beispiel gezeigt.

    // For RestTemplate
    @Bean
    RestTemplate restTemplateWithTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) {
      return restTemplateBuilder.sslBundle(sslBundles.getBundle("tlsClientBundle")).build();
    }
    
    // For WebClient
    @Bean
    WebClient webClientWithTLS(WebClientSsl ssl) {
      return WebClient.builder().apply(ssl.fromBundle("tlsClientBundle")).build();
    }
    

Aktivieren der mTLS-Kommunikation

Führen Sie die folgenden Schritte aus, um mTLS für die bidirektionale Authentifizierung zwischen Client und Server einzurichten:

  1. Generieren oder Importieren von Client- und Serverzertifikaten in Azure Key Vault. Weitere Informationen finden Sie unter Erstellen und Importieren von Zertifikaten in Azure Key Vault.

  2. Aktivieren Sie die verwaltete Identität für Ihre Container-App. Informationen zum Aktivieren der verwalteten Identität in Ihrer Container-App finden Sie unter Verwaltete Identitäten in Azure Container Apps.

  3. Gewähren Sie der verwalteten Identität die Rolle Key Vault Certificate User für beide Schlüssel-Tresore. Weitere Informationen finden Sie unter Bewährte Methoden für einzelne Schlüssel, geheime Schlüssel und Zertifikatrollenzuweisungen.

  4. Fügen Sie der application.yml-Datei für mTLS die folgende Konfiguration hinzu:

    spring:
      ssl:
        bundle:
          keyvault:
            mtlsClientBundle:
              key:
                alias: client
              for-client-auth: true
              keystore:
                keyvault-ref: keyvault2
              truststore:
                keyvault-ref: keyvault1
    cloud:
      azure:
        keyvault:
          jca:
            vaults:
              keyvault1:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_01}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
              keyvault2:
                endpoint: ${KEY_VAULT_SSL_BUNDLES_KEYVAULT_URI_02}
                credential:
                  client-id: ${KEY_VAULT_SSL_BUNDLES_CLIENT_ID}  # Required for user-assigned managed identity
                  managed-identity-enabled: true
    
  5. Um das Schlüsseltresor-SSL-Bundle anzuwenden, aktualisieren Sie Ihre RestTemplate- oder WebClient-Bean-Konfiguration, wie im folgenden Beispiel gezeigt.

    // For RestTemplate
    @Bean
    RestTemplate restTemplateWithMTLS(RestTemplateBuilder restTemplateBuilder, SslBundles sslBundles) {
      return restTemplateBuilder.sslBundle(sslBundles.getBundle("mtlsClientBundle")).build();
    }
    
    // For WebClient
    @Bean
    WebClient webClientWithMTLS(WebClientSsl ssl) {
      return WebClient.builder().apply(ssl.fromBundle("mtlsClientBundle")).build();
    }
    

Weitere Informationen zur Verwendung der Bibliothek in Ihrer Spring Boot-Anwendung finden Sie in spring-cloud-azure-starter-keyvault-jca.

Indem Sie diese Schritte ausführen, können Sie Ihre benutzerdefinierte Domäne erfolgreich mit TLS/SSL von Azure Spring Apps zu Azure Container Apps migrieren, um eine sichere und effiziente Kommunikation über alle Datenverkehrstypen hinweg aufrechtzuerhalten.