빠른 시작: Java용 Azure Key Vault 인증서 클라이언트 라이브러리(인증서)

Java용 Azure Key Vault 인증서 클라이언트 라이브러리를 시작합니다. 아래 단계에 따라 패키지를 설치하고 기본 작업에 대한 예제 코드를 사용해 봅니다.

Spring 애플리케이션에서 Azure Key Vault 인증서 리소스로 작업하는 경우 대안으로 Spring Cloud Azure를 고려하는 것이 좋습니다. Spring Cloud Azure는 Azure 서비스와 원활한 Spring 통합을 제공하는 오픈 소스 프로젝트입니다. Spring Cloud Azure에 대해 자세히 알아보고 Key Vault 인증서를 사용하는 예제를 보려면 Azure Key Vault 인증서를 사용하여 Spring Boot에서 HTTPS 사용을 참조하세요.

추가 리소스:

필수 조건

이 빠른 시작에서는 Linux 터미널 창에서 Azure CLIApache Maven을 실행하고 있다고 가정합니다.

설정

이 빠른 시작에서는 Azure CLI와 함께 Azure ID 라이브러리를 사용하여 사용자를 Azure Services에 인증합니다. 개발자는 Visual Studio 또는 Visual Studio Code를 사용하여 해당 호출을 인증할 수도 있습니다. 자세한 내용은 Azure ID 클라이언트 라이브러리를 사용하여 클라이언트 인증을 참조하세요.

Azure에 로그인

  1. login 명령을 실행합니다.

    az login
    

    CLI는 기본 브라우저를 열 수 있으면 기본 브라우저를 열고 Azure 로그인 페이지를 로드합니다.

    그렇지 않으면 https://aka.ms/devicelogin 에서 브라우저 페이지를 열고 터미널에 표시된 권한 부여 코드를 입력합니다.

  2. 브라우저에서 계정 자격 증명으로 로그인합니다.

새 Java 콘솔 앱 만들기

콘솔 창에서 mvn 명령을 사용하여 akv-certificates-java이라는 새 Java 콘솔 앱을 만듭니다.

mvn archetype:generate -DgroupId=com.keyvault.certificates.quickstart
                       -DartifactId=akv-certificates-java
                       -DarchetypeArtifactId=maven-archetype-quickstart
                       -DarchetypeVersion=1.4
                       -DinteractiveMode=false

프로젝트를 생성하는 출력은 다음과 같습니다.

[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-certificates-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------

새로 만든 akv-certificates-java/ 폴더로 디렉터리를 변경합니다.

cd akv-certificates-java

패키지 설치

텍스트 편집기에서 pom.xml 파일을 엽니다. 종속성 그룹에 다음 종속성 요소를 추가합니다.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-security-keyvault-certificates</artifactId>
      <version>4.1.3</version>
    </dependency>

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
      <version>1.2.0</version>
    </dependency>

리소스 그룹 및 키 자격 증명 모음 만들기

이 빠른 시작에서는 미리 만든 Azure Key Vault를 사용합니다. Azure CLI 빠른 시작, Azure PowerShell 빠른 시작 또는 Azure Portal 빠른 시작의 단계에 따라 키 자격 증명 모음을 만들 수 있습니다.

또는 아래의 Azure CLI 또는 Azure PowerShell 명령을 실행하기만 하면 됩니다.

Important

각 Key Vault마다 고유한 이름이 있어야 합니다. 다음 예제에서는 <your-unique-keyvault-name>을 키 자격 증명 모음의 이름으로 바꿉니다.

az group create --name "myResourceGroup" -l "EastUS"

az keyvault create --name "<your-unique-keyvault-name>" -g "myResourceGroup"

키 자격 증명 모음에 대한 액세스 권한 부여

인증서 권한을 사용자 계정에 부여하는 키 자격 증명 모음에 대한 액세스 정책을 만듭니다.

az keyvault set-policy --name <your-key-vault-name> --upn user@domain.com --certificate-permissions delete get list create purge

환경 변수 설정

이 애플리케이션은 키 자격 증명 모음 이름을 KEY_VAULT_NAME이라는 환경 변수로 사용합니다.

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS 또는 Linux

export KEY_VAULT_NAME=<your-key-vault-name>

개체 모델

Java용 Azure Key Vault 인증서 클라이언트 라이브러리를 사용하면 인증서를 관리할 수 있습니다. 코드 예제 섹션에서는 클라이언트를 만들고, 인증서를 만들고, 인증서를 검색하고, 인증서를 삭제하는 방법을 보여 줍니다.

전체 콘솔 앱은 아래에 있습니다.

코드 예제

지시문 추가

다음 지시문을 코드 위쪽에 추가합니다.

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

클라이언트 인증 및 만들기

대부분의 Azure 서비스에 대한 애플리케이션 요청은 승인되어야 합니다. DefaultAzureCredential을 사용하는 것은 코드에서 Azure 서비스에 대한 암호 없는 연결을 구현하는 데 권장되는 접근 방식입니다. DefaultAzureCredential은 여러 인증 방법을 지원하고 런타임에 사용해야 하는 방법을 결정합니다. 이 방법을 사용하면 앱에서 환경별 코드를 구현하지 않고도 다양한 환경(로컬 및 프로덕션)에서 다양한 인증 방법을 사용할 수 있습니다.

이 빠른 시작에서 DefaultAzureCredential은 Azure CLI에 로그인한 로컬 개발 사용자의 자격 증명을 사용하여 키 자격 증명 모음에 인증합니다. 애플리케이션이 Azure에 배포되면 동일한 DefaultAzureCredential 코드에서 App Service, 가상 머신 또는 기타 서비스에 할당된 관리 ID를 자동으로 검색하고 사용할 수 있습니다. 자세한 내용은 관리 ID 개요를 참조하세요.

이 예제에서 키 자격 증명 모음 이름은 https://<your-key-vault-name>.vault.azure.net 형식의 키 자격 증명 모음 URI로 확장됩니다. 키 자격 증명 모음 인증에 대한 자세한 내용은 개발자 가이드를 참조하세요.

String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

CertificateClient certificateClient = new CertificateClientBuilder()
    .vaultUrl(keyVaultUri)
    .credential(new DefaultAzureCredentialBuilder().build())
    .buildClient();

비밀 저장

이제 애플리케이션이 인증되었으므로 certificateClient.beginCreateCertificate 메서드를 사용하여 키 자격 증명 모음에 인증서를 만들 수 있습니다. 이를 위해서는 인증서 이름과 인증서 정책이 필요합니다. 이 샘플에서는 certificateName 변수에 "myCertificate" 값을 할당하고 기본 정책을 사용합니다.

인증서 만들기는 장기 실행 작업으로, 진행률을 폴링하거나 완료될 때까지 기다릴 수 있습니다.

SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
    certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();

만들기가 완료되면 다음 호출을 통해 인증서를 가져올 수 있습니다.

KeyVaultCertificate createdCertificate = certificatePoller.getFinalResult();

인증서 검색

이제 이전에 certificateClient.getCertificate 메서드로 만든 인증서를 검색할 수 있습니다.

KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

이제 retrievedCertificate.getName, retrievedCertificate.getProperties 등과 같은 작업으로 검색된 인증서의 세부 정보에 액세스할 수 있습니다. 해당 콘텐츠 retrievedCertificate.getCer에도 액세스할 수 있습니다.

인증서 삭제

마지막으로, 역시 장기 실행 작업인 certificateClient.beginDeleteCertificate 메서드를 사용하여 키 자격 증명 모음에서 인증서를 삭제해 보겠습니다.

SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();

리소스 정리

더 이상 필요하지 않은 경우 Azure CLI 또는 Azure PowerShell을 사용하여 키 자격 증명 모음 및 해당 리소스 그룹을 제거할 수 있습니다.

az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"

샘플 코드

package com.keyvault.certificates.quickstart;

import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;

import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;

public class App {
    public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
        String keyVaultName = System.getenv("KEY_VAULT_NAME");
        String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";

        System.out.printf("key vault name = %s and kv uri = %s \n", keyVaultName, keyVaultUri);

        CertificateClient certificateClient = new CertificateClientBuilder()
            .vaultUrl(keyVaultUri)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();

        String certificateName = "myCertificate";

        System.out.print("Creating a certificate in " + keyVaultName + " called '" + certificateName + " ... ");

        SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
            certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
        certificatePoller.waitForCompletion();

        System.out.print("done.");
        System.out.println("Retrieving certificate from " + keyVaultName + ".");

        KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);

        System.out.println("Your certificate's ID is '" + retrievedCertificate.getId() + "'.");
        System.out.println("Deleting your certificate from " + keyVaultName + " ... ");

        SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
        deletionPoller.waitForCompletion();

        System.out.print("done.");
    }
}

다음 단계

이 빠른 시작에서는 키 자격 증명 모음을 만들고, 인증서를 만든 후 해당 인증서를 삭제했습니다. Key Vault 및 이를 애플리케이션과 통합하는 방법에 대해 자세히 알아보려면 아래 문서로 계속 진행하세요.