Aracılığıyla paylaş


Yönetilen kimlikleri kullanarak Azure Spring Apps'i Key Vault'a Bağlan

Not

Azure Spring Apps, Azure Spring Cloud hizmetinin yeni adıdır. Hizmetin yeni bir adı olsa da, ekran görüntüleri, videolar ve diyagramlar gibi varlıkları güncelleştirmek için çalışırken bazı yerlerde eski adı bir süre görürsünüz.

Bu makale şunlar için geçerlidir: ✔️ Java ❌ C#

Bu makalede, Azure Spring Apps'e dağıtılan bir uygulama için sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen kimliğin nasıl oluşturulacağı ve Azure Key Vault'a erişmek için nasıl kullanılacağı gösterilmektedir.

Azure Key Vault, uygulamanız için belirteçlere, parolalara, sertifikalara, API anahtarlarına ve diğer gizli dizilere erişimi güvenli bir şekilde depolamak ve sıkı bir şekilde denetlemek için kullanılabilir. Microsoft Entra Id'de yönetilen kimlik oluşturabilir ve kodunuzda kimlik bilgilerini görüntülemek zorunda kalmadan Key Vault dahil olmak üzere Microsoft Entra kimlik doğrulamasını destekleyen herhangi bir hizmette kimlik doğrulaması yapabilirsiniz.

Aşağıdaki videoda Azure Key Vault kullanarak gizli dizilerin nasıl yönetileceğini açıklanmaktadır.


Önkoşullar

  • Azure aboneliği. Aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Hedef abonelikte ilk kez bir Azure Spring Apps Kurumsal plan örneği dağıtıyorsanız Azure Market'deki Kurumsal plan'ın Gereksinimler bölümüne bakın.
  • Azure CLI, sürüm 2.55.0 veya üzeri.
  • Azure aboneliği. Aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Azure CLI, sürüm 2.55.0 veya üzeri.

Her kaynak için ad sağlayın

Aşağıdaki komutları kullanarak kaynak adlarını tutmak için değişkenler oluşturun. Yer tutucuları kendi değerlerinizle değiştirmeyi unutmayın.

export LOCATION=<location>
export RESOURCE_GROUP=myresourcegroup
export SPRING_APPS=myasa
export APP=springapp-system
export KEY_VAULT=<your-keyvault-name>

Kaynak grubu oluşturma

Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. Aşağıdaki örnekte gösterildiği gibi az group create komutunu kullanarak hem Key Vault'u hem de Spring Cloud'u içerecek bir kaynak grubu oluşturun:

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

Key Vault'unuzu ayarlama

Key Vault oluşturmak için aşağıdaki örnekte gösterildiği gibi az keyvault create komutunu kullanın:

Önemli

Her Key Vault'un benzersiz bir adı olmalıdır.

az keyvault create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT}

Uygulama URL'sini göstermek için aşağıdaki komutu kullanın ve ardından biçimindeki https://${KEY_VAULT}.vault.azure.netdöndürülen URL'yi not edin. Aşağıdaki adımda bu değeri kullanın.

az keyvault show \
    --resource-group ${RESOURCE_GROUP} \
    --name ${KEY_VAULT} \
    --query properties.vaultUri --output tsv

Artık aşağıdaki örnekte gösterildiği gibi az keyvault secret set komutunu kullanarak Key Vault'unuza gizli dizi yerleştirebilirsiniz:

az keyvault secret set \
    --vault-name ${KEY_VAULT} \
    --name "connectionString" \
    --value "jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;"

Azure Spring Apps hizmeti ve uygulaması oluşturma

Karşılık gelen tüm uzantıları yükledikten sonra aşağıdaki komutu kullanarak bir Azure Spring Apps örneği oluşturun:

az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --sku Enterprise \
    --name ${SPRING_APPS}

Aşağıdaki örnek, parametresi tarafından --system-assigned istendiği gibi sistem tarafından atanan yönetilen kimlikle uygulamayı oluşturur:

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)
az extension add --upgrade --name spring
az spring create \
    --resource-group ${RESOURCE_GROUP} \
    --name ${SPRING_APPS}

Aşağıdaki örnek, parametresi tarafından --system-assigned istendiği gibi sistem tarafından atanan yönetilen kimlikle adlı springapp bir uygulama oluşturur.

az spring app create \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --assign-endpoint true \
    --runtime-version Java_17 \
    --system-assigned
export MANAGED_IDENTITY_PRINCIPAL_ID=$(az spring app show \
    --resource-group ${RESOURCE_GROUP} \
    --service ${SPRING_APPS} \
    --name ${APP} \
    --query identity.principalId --output tsv)

Uygulamanıza Key Vault erişimi verme

Uygulamanız için Key Vault'ta düzgün erişim vermek için aşağıdaki komutu kullanın:

az keyvault set-policy \
    --name ${KEY_VAULT} \
    --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} \
    --secret-permissions set get list

Not

Sistem tarafından atanan yönetilen kimlik için, sistem tarafından atanan yönetilen kimlik devre dışı bırakıldıktan sonra uygulamanızın erişimini kaldırmak için kullanın az keyvault delete-policy --name ${KEY_VAULT} --object-id ${MANAGED_IDENTITY_PRINCIPAL_ID} .

Spring Boot starter ile örnek bir Spring Boot uygulaması oluşturma

Bu uygulama, Azure Key Vault'tan gizli dizi alma erişimine sahiptir. Azure Key Vault Gizli Dizileri Spring önyükleme başlatıcısını kullanın. Azure Key Vault, Spring PropertySource örneği olarak eklenir. Azure Key Vault'ta depolanan gizli dizilere kolayca erişilebilir ve dosyalardaki özellikler gibi herhangi bir dışlaştırılmış yapılandırma özelliği gibi kullanılabilir.

  1. Azure Key Vault Spring Starter ile örnek start.spring.io proje oluşturmak için aşağıdaki komutu kullanın.

    curl https://start.spring.io/starter.tgz -d dependencies=web,azure-keyvault -d baseDir=springapp -d bootVersion=3.2.1 -d javaVersion=17 -d type=maven-project | tar -xzvf -
    
  2. Uygulamanızda Key Vault'unuzu belirtin.

    cd springapp
    vim src/main/resources/application.properties
    
  3. Azure Spring Apps'e dağıtılan bir uygulamada yönetilen kimliği kullanmak için src/main/resources/application.properties dosyasına aşağıdaki içeriğe sahip özellikler ekleyin.

    spring.cloud.azure.keyvault.secret.property-sources[0].endpoint=<your-keyvault-url>
    spring.cloud.azure.keyvault.secret.property-sources[0].credential.managed-identity-enabled=true
    

    Not

    Daha önce gösterildiği gibi key vault URL'sini application.properties dosyasına eklemeniz gerekir. Aksi takdirde, anahtar kasası URL'si çalışma zamanı sırasında yakalanamayabilir.

  4. src/main/java/com/example/demo/DemoApplication.java aşağıdaki kod örneğiyle güncelleştirin. Bu kod bağlantı dizesi Key Vault'tan alır.

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class DemoApplication implements CommandLineRunner {
    
        @Value("${connectionString}")
        private String connectionString;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @GetMapping("get")
        public String get() {
            return connectionString;
        }
    
        public void run(String... args) throws Exception {
            System.out.println(String.format("\nConnection String stored in Azure Key Vault:\n%s\n",connectionString));
        }
    }
    

    pom.xml dosyasını açarsanız, aşağıdaki örnekte gösterildiği gibi bağımlılığı görebilirsinizspring-cloud-azure-starter-keyvault:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault</artifactId>
    </dependency>
    
  1. Uygulamanızı Azure Spring Apps'e dağıtmak için aşağıdaki komutu kullanın:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path
    
  1. Uygulamanızı Azure Spring Apps'e dağıtmak için aşağıdaki komutu kullanın:

    az spring app deploy \
        --resource-group ${RESOURCE_GROUP} \
        --service ${SPRING_APPS} \
        --name ${APP} \
        --source-path \
        --build-env BP_JVM_VERSION=17
    
  1. Uygulamanızı test etmek için aşağıdaki komutu kullanarak genel uç noktaya veya test uç noktasına erişin:

    curl https://${SPRING_APPS}-${APP}.azuremicroservices.io/get
    

    Yanıt gövdesinde aşağıdaki ileti döndürülür: jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;.

Kaynakları temizleme

Yeni oluşturulan hizmet örneği de dahil olmak üzere kaynak grubunun tamamını silmek için aşağıdaki komutu kullanın:

az group delete --name ${RESOURCE_GROUP} --yes

Sonraki adımlar