Anpassad domän med TLS/SSL i Azure Container Apps

Kommentar

Planerna Basic, Standardoch Enterprise gick in i en pensionsperiod den 17 mars 2025. Mer information finns i meddelandet om azure Spring Apps-pensionering.

Den här artikeln gäller för:✅ Basic/Standard ✅ Enterprise

Att migrera din anpassade domän med TLS/SSL från Azure Spring Apps till Azure Container Apps innebär flera steg för att säkerställa en smidig övergång. Den här artikeln beskriver processen som omfattar klienttrafik, trafik mellan program och trafik till externa tjänster.

Förutsättningar

Klienttrafik till programmet

Som standard använder all inkommande trafik i containerappen HTTPS om du inte aktiverar HTTP-trafik manuellt, vilket du kan göra med hjälp av följande kommando:

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

Mer information om hur du konfigurerar ingress för din app finns i Konfigurera ingress för din app i Azure Container Apps.

Anpassad domän

Om du vill skydda anpassade DNS-namn (Domain Name System) i Azure Container Apps kan du lägga till digitala säkerhetscertifikat. Detta stöder säker kommunikation mellan dina appar.

Om du behöver skydda din anpassade domän i Azure Container Apps kan du använda ett privat certifikat som är kostnadsfritt och enkelt att använda. Mer information finns i Anpassade domännamn och kostnadsfria hanterade certifikat i Azure Container Apps.

Om du har ett privat certifikat som lagras lokalt kan du ladda upp det. Mer information finns i Anpassade domännamn och ta med egna certifikat i Azure Container Apps.

Om certifikatet kommer från Azure Key Vault kan du importera certifikat till Azure Container Apps direkt. Mer information finns i Importera certifikat från Azure Key Vault till Azure Container Apps.

Om du vill fortsätta använda det ursprungliga certifikatet och domännamnet från Azure Spring Apps kan du ladda upp certifikatet till containerappar eller Azure Key Vault. Du kan också uppdatera A-posten eller CNAME i DNS-providern för att omdirigera det ursprungliga domännamnet till containerappens IP-adress eller URL.

Aktivera mTLS mellan klient- och containerappar

Använd följande steg för att aktivera ömsesidig TLS (mTLS) mellan klient- och containerappar:

  1. Använd följande kommando för att exportera konfigurationen av containerappen i YAML-format:

    az containerapp show \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --output yaml > app.yaml
    
  2. clientCertificateMode Uppdatera värdet i app.yaml enligt följande exempel:

    properties:
      configuration:
        ingress:
          clientCertificateMode: require
    

    Du kan ange den här egenskapen till något av följande värden:

    • require: Klientcertifikatet krävs för alla begäranden till containerappen.
    • accept: Klientcertifikatet är valfritt. Om klientcertifikatet inte tillhandahålls godkänns fortfarande begäran.
    • ignore: Klientcertifikatet ignoreras.
  3. Använd följande kommando för att tillämpa clientCertificateMode ändringen på containerappen:

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

Mer information finns i Konfigurera klientcertifikatautentisering i Azure Container Apps.

Du måste hantera verifiering av klientcertifikat i koden.

Trafik mellan program

Som standard använder trafik mellan containerappar i samma miljö HTTP. För att skydda den här trafiken aktiverar du peer-to-peer-kryptering med följande kommandon:

# 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

När det är aktiverat skyddar Azure Container Apps automatiskt HTTP-trafik via den inbyggda transparenta proxyfunktionen. Ditt program behöver vanligtvis inte bry sig om huruvida trafiken är krypterad eller inte.

Om du vill använda HTTPS för kommunikation mellan appar internt måste du hantera certifikatverifiering. Det beror på att domännamnet kanske inte matchar certifikatets eget namn (CN) eller alternativt namn på certifikatmottagare (SAN).

Mer information finns i avsnittet Peer-to-peer-krypteringi Konfigurera ingress i en Azure Container Apps-miljö.

Trafik till externa tjänster

Det här exemplet visar hur du aktiverar TLS och mTLS för trafik till externa tjänster genom att läsa in certifikatet från Azure Key Vault med hjälp av spring-cloud-azure-starter-keyvault-jca biblioteket. Java-projektet måste använda Spring Boot 3.1+ och inkludera följande beroende i dinpom.xml-fil :

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

Ladda ett certifikat i förtroendelagret från Key Vault med SSL-certifikatpaket

Använd följande steg för att läsa in ett certifikat i förtroendearkivet från Azure Key Vault med hjälp av spring-cloud-azure-starter-keyvault-jca biblioteket:

  1. Generera eller importera certifikat i Azure Key Vault. Mer information finns i Skapa och importera certifikat i Azure Key Vault.

  2. Aktivera hanterad identitet i containerappen. Information om hur du aktiverar hanterad identitet i containerappen finns i Hanterade identiteter i Azure Container Apps.

  3. Key Vault Certificate User Bevilja rollen till den hanterade identiteten i ditt Key Vault. Mer information finns i Metodtips för enskilda nycklar, hemligheter och certifikatrolltilldelningar.

  4. Lägg till följande konfiguration i din application.yml-fil :

    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. Om du vill använda Key Vault SSL-paketet uppdaterar du din RestTemplate- eller WebClient-bean-konfiguration enligt följande exempel:

    // 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();
    }
    

Aktivera mTLS-kommunikation

Använd följande steg för att konfigurera mTLS för dubbelriktad autentisering mellan klient och server:

  1. Generera eller importera både klient- och servercertifikat till Azure Key Vault. Mer information finns i Skapa och importera certifikat i Azure Key Vault.

  2. Aktivera hanterad identitet för din containerapp. Information om hur du aktiverar hanterad identitet i containerappen finns i Hanterade identiteter i Azure Container Apps.

  3. Bevilja rollen Key Vault Certificate User till den hanterade identiteten för båda nyckelvalven. Mer information finns i Metodtips för enskilda nycklar, hemligheter och certifikatrolltilldelningar.

  4. Lägg till följande konfiguration i din application.yml-fil för mTLS:

    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. Om du vill använda Key Vault SSL-paketet uppdaterar du din RestTemplate- eller WebClient-bean-konfiguration enligt följande exempel:

    // 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();
    }
    

Mer information om hur du använder spring-cloud-azure-starter-keyvault-jca biblioteket i ditt Spring Boot-program finns i Introduktion till Spring Cloud Azure Starter Key Vault JCA: Streamlined TLS och mTLS for Spring Boot.

Genom att följa dessa steg kan du migrera din anpassade domän med TLS/SSL från Azure Spring Apps till Azure Container Apps och upprätthålla säker och effektiv kommunikation mellan alla trafiktyper.