Sdílet prostřednictvím


Vlastní doména s protokolem TLS/SSL v Azure Container Apps

Poznámka:

Plány Basic, Standarda Enterprise vstoupily do důchodového období 17. března 2025. Další informace najdete v oznámení o vyřazení Azure Spring Apps.

Tento článek se vztahuje na:✅ Basic/Standard ✅ Enterprise

Migrace vlastní domény pomocí protokolu TLS/SSL z Azure Spring Apps do Azure Container Apps zahrnuje několik kroků, které zajistí hladký přechod. Tento článek vás provede procesem zahrnujícím klientský provoz, provoz mezi aplikacemi a provoz do externích služeb.

Požadavky

Klientský provoz do aplikace

Ve výchozím nastavení veškerý příchozí provoz v aplikaci kontejneru používá protokol HTTPS, pokud ručně nepovolíte provoz HTTP, který můžete provést pomocí následujícího příkazu:

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

Další informace o konfiguraci příchozího přenosu dat pro vaši aplikaci najdete v tématu Konfigurace příchozího přenosu dat pro vaši aplikaci v Azure Container Apps.

Vlastní doména

Pokud chcete zabezpečit vlastní názvy DNS (Domain Name System) v Azure Container Apps, můžete přidat digitální certifikáty zabezpečení. To podporuje zabezpečenou komunikaci mezi vašimi aplikacemi.

Pokud potřebujete zabezpečit vlastní doménu ve službě Azure Container Apps, můžete použít privátní certifikát, který je bezplatný a snadno použitelný. Další informace najdete v tématu Vlastní názvy domén a bezplatné spravované certifikáty v Azure Container Apps.

Pokud máte uložený privátní certifikát místně, můžete ho nahrát. Další informace najdete v tématu Vlastní názvy domén a používání vlastních certifikátů v Azure Container Apps.

Pokud je váš certifikát ze služby Azure Key Vault, můžete certifikáty importovat přímo do Azure Container Apps. Další informace najdete v tématu Import certifikátů ze služby Azure Key Vault do azure Container Apps.

Pokud chcete dál používat původní certifikát a název domény z Azure Spring Apps, můžete certifikát nahrát do kontejnerových aplikací nebo do služby Azure Key Vault. Můžete také aktualizovat záznam A nebo CNAME ve vašem poskytovateli DNS a přesměrovat původní název domény na IP adresu nebo adresu URL aplikace kontejneru.

Povolení mTLS mezi klientskými a kontejnerovými aplikacemi

Pokud chcete povolit vzájemné tls (mTLS) mezi klientem a kontejnerovými aplikacemi, postupujte následovně:

  1. Pomocí následujícího příkazu exportujte konfiguraci aplikace kontejneru ve formátu YAML:

    az containerapp show \
        --resource-group "my-resource-group" \
        --name "my-app" \
        --output yaml > app.yaml
    
  2. clientCertificateMode Aktualizujte hodnotu v souboru app.yaml, jak je znázorněno v následujícím příkladu:

    properties:
      configuration:
        ingress:
          clientCertificateMode: require
    

    Tuto vlastnost můžete nastavit na jednu z následujících hodnot:

    • require: Klientský certifikát se vyžaduje pro všechny požadavky na aplikaci kontejneru.
    • accept: Klientský certifikát je volitelný. Pokud není zadaný klientský certifikát, žádost se stále přijme.
    • ignore: Klientský certifikát se ignoruje.
  3. Pomocí následujícího příkazu aplikujte clientCertificateMode změnu na kontejnerovou aplikaci:

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

Další informace najdete v tématu Konfigurace ověřování klientských certifikátů v Azure Container Apps.

V kódu musíte zpracovat ověření klientského certifikátu.

Provoz mezi aplikacemi

Ve výchozím nastavení používá provoz mezi aplikacemi kontejnerů ve stejném prostředí protokol HTTP. Pokud chcete tento provoz zabezpečit, povolte šifrování peer-to-peer pomocí následujících příkazů:

# 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

Jakmile je služba Azure Container Apps povolená, automaticky zabezpečuje provoz HTTP prostřednictvím integrované funkce transparentního proxy serveru. Vaše aplikace obvykle nemusí zajímat, jestli je provoz zašifrovaný nebo ne.

Pokud chcete pro interní komunikaci mezi aplikacemi používat protokol HTTPS, musíte zpracovat ověření certifikátu. Důvodem je to, že název domény nemusí odpovídat běžnému názvu certifikátu (CN) nebo alternativnímu názvu subjektu (SAN).

Další informace najdete v části Šifrování peer-to-peer v sekci Konfigurace ingressu v prostředí Azure Container Apps.

Přenos dat směrem k externím službám

Tato ukázka ukazuje, jak povolit tls a mTLS pro provoz do externích služeb načtením certifikátu ze služby Azure Key Vault pomocí spring-cloud-azure-starter-keyvault-jca knihovny. Projekt Java musí používat Spring Boot 3.1 nebo novější a zahrnout do souboru pom.xml následující závislost:

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

Načtení certifikátu do úložiště důvěryhodnosti ze služby Key Vault s využitím sady SSL

Pomocí následujících kroků načtěte certifikát do úložiště důvěryhodnosti ze služby Azure Key Vault pomocí spring-cloud-azure-starter-keyvault-jca knihovny:

  1. Generování nebo import certifikátů ve službě Azure Key Vault Další informace najdete v tématu Vytváření a import certifikátů ve službě Azure Key Vault.

  2. Povolte spravovanou identitu v aplikaci kontejneru. Pokud chcete ve své aplikaci kontejneru povolit spravovanou identitu, přečtěte si téma Spravované identity v Azure Container Apps.

  3. Udělte roli Key Vault Certificate User spravované identitě ve službě Key Vault. Další informace najdete v tématu Osvědčené postupy pro jednotlivá přiřazení rolí klíčů, tajných klíčů a certifikátů.

  4. Do souboru application.yml přidejte následující konfiguraci:

    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. Pokud chcete použít sadu SSL služby Key Vault, aktualizujte RestTemplate nebo WebClient konfiguraci beanu, jak je znázorněno v následujícím příkladu:

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

Povolení komunikace mTLS

Pomocí následujících kroků nastavte MTLS pro obousměrné ověřování mezi klientem a serverem:

  1. Vygenerujte nebo importujte certifikáty klienta i serveru do služby Azure Key Vault. Další informace najdete v tématu Vytváření a import certifikátů ve službě Azure Key Vault.

  2. Povolte spravovanou identitu pro vaši aplikaci kontejneru. Pokud chcete ve své aplikaci kontejneru povolit spravovanou identitu, přečtěte si téma Spravované identity v Azure Container Apps.

  3. Udělte roli Key Vault Certificate User spravované identitě pro oba trezory klíčů. Další informace najdete v tématu Osvědčené postupy pro jednotlivá přiřazení rolí klíčů, tajných klíčů a certifikátů.

  4. Do souboru application.yml pro mTLS přidejte následující konfiguraci:

    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. Pokud chcete použít sadu SSL služby Key Vault, aktualizujte RestTemplate nebo WebClient konfiguraci beanu, jak je znázorněno v následujícím příkladu:

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

Další informace o používání spring-cloud-azure-starter-keyvault-jca knihovny v aplikaci Spring Boot najdete v tématu Představení Spring Cloudu Azure Starter Key Vault JCA: Zjednodušené tls a mTLS pro Spring Boot.

Pomocí těchto kroků můžete úspěšně migrovat vlastní doménu pomocí protokolu TLS/SSL z Azure Spring Apps do Azure Container Apps a zajistit tak zabezpečenou a efektivní komunikaci napříč všemi typy přenosů.