Azure Key Vault

Adam·2024년 7월 26일
0

개발일지

목록 보기
5/15

회사에서 클라우드 서비스를 기존에 쓰던 AWS에서 Azure로 변경을 진행하기로 했다.
기존에는 AWS SecretManager을 사용해서 시크릿 들을 관리했는데, Azure로 인프라를 변경하면서 Azure Key Vault라는 Azure의 서비스를 이용해야 할 것으로 보인다
그렇기에 해당 서비스에 대해서 간단히 조사를 해보려고 한다

What is Azure Key Vault?

Azure Key Vault는 Microsoft Azure 클라우드 플랫폼에서 제공하는 서비스로, 중요한 데이터를 안전하게 저장하고 관리하는 데 사용됩니다.

이를 통해 API 키, 비밀번호, 인증서와 같은 비밀 정보를 중앙에서 관리하고 보호할 수 있습니다.

Azure Key Vault는 데이터 암호화, 액세스 제어, 감사 로그 등의 보안 기능을 제공하여 민감한 정보를 보호합니다.

개발자는 애플리케이션에서 직접 비밀 정보를 사용하지 않고 Key Vault를 통해 안전하게 접근할 수 있습니다. 이를 통해 보안 취약성을 줄이고 관리의 편의성을 높일 수 있습니다.

1. Azure Key Vault 설정

Key Vault 생성:

  1. Azure 포털에 로그인합니다.

  2. “리소스 만들기”로 이동하여 “Key Vault”를 검색합니다.

  3. “Key Vault”를 선택하고 “생성”을 클릭합니다.

  4. 필요한 정보를 입력하고 Key Vault를 생성합니다.

비밀 추가:

  1. Azure 포털에서 Key Vault로 이동합니다.

  2. “설정” 섹션에서 “Secrets”를 선택합니다.

  3. “생성/가져오기”를 클릭하여 새 비밀을 추가합니다.

  4. 비밀의 이름과 값을 입력하고 “생성”을 클릭합니다.

2. Java Spring 애플리케이션 구성

의존성 추가:

build.gradle 파일에 다음과 같은 Azure SDK 의존성을 추가

implementation 'com.azure:azure-security-keyvault-secrets:4.5.2'
implementation 'com.azure:azure-identity:1.6.3'

3. Azure 인증 구성

관리 ID (Azure 서비스용 권장):

애플리케이션이 Azure에서 실행 중인 경우, 관리 ID를 사용하여 인증을 설정할 수 있습니다. 이를 통해 클라이언트 비밀을 사용하지 않아도 됩니다.

1. Azure 리소스에 대해 관리 ID 활성화:

• Azure 포털에서 관리 ID를 활성화합니다.

2. Key Vault 접근 권한 부여:

• Key Vault에서 “Access policies”를 선택하고 “Access Policy 추가”를 클릭합니다.

• 비밀에 대한 “Get” 권한을 선택하고 관리 ID를 설정합니다.

서비스 주체 (클라이언트 비밀):

서비스 주체를 사용하려면 Azure AD 애플리케이션과 서비스 주체를 생성해야 합니다.

1. Azure AD에서 애플리케이션 등록:

• 클라이언트 ID, 테넌트 ID, 클라이언트 비밀을 기록합니다.

2. Key Vault 접근 정책 설정:

• 서비스 주체에 Key Vault 접근 권한을 부여합니다.

4. Key Vault에서 비밀 정보 가져오기

다음은 비밀을 가져오는 코드 예제

import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.secrets.SecretClient;
import com.azure.security.keyvault.secrets.SecretClientBuilder;
import com.azure.security.keyvault.secrets.models.KeyVaultSecret;

public class KeyVaultService {
    private final SecretClient secretClient;

    public KeyVaultService(String keyVaultUrl) {
        this.secretClient = new SecretClientBuilder()
            .vaultUrl(keyVaultUrl)
            .credential(new DefaultAzureCredentialBuilder().build())
            .buildClient();
    }

    public String getSecretValue(String secretName) {
        KeyVaultSecret secret = secretClient.getSecret(secretName);
        return secret.getValue();
    }
}

사용 예

KeyVaultService keyVaultService = new KeyVaultService("https://<your-key-vault-name>.vault.azure.net/");
String secretValue = keyVaultService.getSecretValue("<your-secret-name>");
System.out.println("비밀 값: " + secretValue);
profile
Keep going하는 개발자

0개의 댓글