Config Server 및 서비스 레지스트리에 액세스

참고 항목

Azure Spring Apps는 Azure Spring Cloud 서비스의 새 이름입니다. 서비스에 새 이름이 지정되었지만, 자산을 업데이트하는 동안 스크린샷, 비디오, 다이어그램과 같은 일부 위치에서는 당분간 이전 이름이 표시됩니다.

이 문서의 적용 대상: ✔️ 기본/표준 ❌ 엔터프라이즈

이 문서에서는 Microsoft Entra RBAC(역할 기반 액세스 제어)를 사용하여 Azure Spring Apps에서 관리하는 Spring Cloud Config Server 및 Spring Cloud 서비스 레지스트리에 액세스하는 방법을 설명합니다.

참고 항목

Azure Spring Apps 서비스 내에서 배포되고 실행되는 애플리케이션은 관리되는 Spring Cloud Config Server 및 서비스 레지스트리에 액세스할 때 인증서 기반 인증 및 권한 부여로 자동으로 연결됩니다. 이러한 애플리케이션에 대해서는 이 지침을 따를 필요가 없습니다. 관련 인증서는 Azure Spring Apps 플랫폼에서 완전히 관리되며 Config Server 및 서비스 레지스트리에 연결되면 애플리케이션에 자동으로 삽입됩니다.

Microsoft Entra 사용자/그룹, MSI 또는 서비스 주체에 역할 할당

[management-group | subscription | resource-group | resource] 범위에서 [user | group | service-principal | managed-identity]에 역할을 할당합니다.

역할 이름 설명
Azure Spring Apps Config Server 읽기 권한자 Azure Spring Apps Config Server에 대한 읽기 액세스를 허용합니다.
Azure Spring Apps Config Server 기여자 Azure Spring Apps Config Server에 대한 읽기, 쓰기 및 삭제 액세스를 허용합니다.
Azure Spring Apps 서비스 레지스트리 읽기 권한자 Azure Spring Apps 서비스 레지스트리에 대한 읽기 액세스를 허용합니다.
Azure Spring Apps 서비스 레지스트리 기여자 Azure Spring Apps 서비스 레지스트리에 대한 읽기, 쓰기 및 삭제 액세스를 허용합니다.

세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

Config Server 및 서비스 레지스트리 엔드포인트에 액세스

역할이 할당된 후 담당자는 다음 절차를 사용하여 Spring Cloud Config Server 및 Spring Cloud Service Registry 엔드포인트에 액세스할 수 있습니다.

  1. 액세스 토큰을 가져옵니다. Microsoft Entra 사용자에게 역할이 할당되면 다음 명령을 사용하여 사용자, 서비스 주체 또는 관리 ID로 Azure CLI에 로그인하여 액세스 토큰을 가져올 수 있습니다. 자세한 내용은 Azure CLI 인증을 참조하세요.

    az login
    az account get-access-token
    
  2. 엔드포인트를 작성합니다. Azure Spring Apps에서 관리되는 Spring Cloud Config Server 및 Spring Cloud 서비스 레지스트리의 기본 엔드포인트를 지원합니다.

    • 'https://SERVICE_NAME.svc.azuremicroservices.io/eureka/{path}'
    • 'https://SERVICE_NAME.svc.azuremicroservices.io/config/{path}'

    참고 항목

    21Vianet에서 운영하는 Microsoft Azure를 사용하는 경우 *.azuremicroservices.io(을)를 *.microservices.azure.cn(으)로 대체합니다. 자세한 내용은 21Vianet 개발자 가이드에서 운영하는 Microsoft AzureAzure에서 엔드포인트 확인 섹션을 참조하세요.

  3. 액세스 토큰을 사용하여 구성된 엔드포인트에 액세스합니다. 액세스 토큰을 헤더에 배치하여 권한 부여를 제공합니다.--header 'Authorization: Bearer {TOKEN_FROM_PREVIOUS_STEP}'

    예시:

    a. https://SERVICE_NAME.svc.azuremicroservices.io/config/actuator/health와 같은 엔드포인트에 액세스하여 Config Server의 상태를 확인합니다.

    b. https://SERVICE_NAME.svc.azuremicroservices.io/eureka/eureka/apps와 같은 엔드포인트에 액세스하여 Spring Cloud Service Registry(여기서는 Eureka)에 등록된 앱을 확인합니다.

    응답이 401 Unauthorized인 경우 역할이 성공적으로 할당되었는지 확인합니다. 역할이 적용되거나 액세스 토큰이 만료되지 않았는지 확인하는 데 몇 분 정도가 걸립니다.

작동기 엔드포인트에 대한 자세한 내용은 프로덕션 준비 엔드포인트를 참조하세요.

Eureka 엔드포인트는 Eureka-REST-operations를 참조하세요.

Config Server 엔드포인트 및 자세한 경로 정보는 ResourceController.javaEncryptionController.java를 참조하세요.

Azure Spring Apps에서 관리되는 Spring Cloud Config Server 및 서비스 레지스트리에 Spring Boot 앱 등록

역할이 할당된 후 Microsoft Entra 토큰 인증을 사용하여 Azure Spring Apps에서 관리하는 Spring Cloud Config Server 및 서비스 레지스트리에 Spring Boot 앱을 등록할 수 있습니다. Config Server와 Service Registry는 모두 인증을 위한 전달자 토큰을 삽입하기 위해 사용자 지정 REST 템플릿을 지원합니다.

자세한 내용은 샘플 Azure Spring Apps 관리되는 Config Server 액세스Azure Spring Apps 관리되는 서비스 레지스트리 액세스를 참조하세요. 다음 섹션에서는 이러한 샘플의 몇 가지 중요한 세부 정보를 설명합니다.

In AccessTokenManager.java:

AccessTokenManager(은)는 Microsoft Entra ID에서 액세스 토큰을 가져오는 역할을 담당합니다. application.properties 파일에서 서비스 주체의 로그인 정보를 구성하고 ApplicationTokenCredentials를 초기화하여 토큰을 가져옵니다. 두 샘플에서 이 파일을 찾을 수 있습니다.

prop.load(in);
tokenClientId = prop.getProperty("access.token.clientId");
String tenantId = prop.getProperty("access.token.tenantId");
String secret = prop.getProperty("access.token.secret");
String clientId = prop.getProperty("access.token.clientId");
credentials = new ApplicationTokenCredentials(
    clientId, tenantId, secret, AzureEnvironment.AZURE);

In CustomConfigServiceBootstrapConfiguration.java:

CustomConfigServiceBootstrapConfiguration(은)는 Config Server에 대한 사용자 지정 REST 템플릿을 구현하고 Microsoft Entra ID의 토큰을 Authorization 헤더로 삽입합니다. 이 파일은 Config Server 샘플에서 찾을 수 있습니다.

public class RequestResponseHandlerInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        String accessToken = AccessTokenManager.getToken();
        request.getHeaders().remove(AUTHORIZATION);
        request.getHeaders().add(AUTHORIZATION, "Bearer " + accessToken);

        ClientHttpResponse response = execution.execute(request, body);
        return response;
    }

}

In CustomRestTemplateTransportClientFactories.java:

이전 두 클래스는 Spring Cloud Service Registry에 대한 사용자 지정 REST 템플릿 구현을 위한 것입니다. intercept 부분은 위의 Config Server와 동일합니다. 메시지 변환기에 factory.mappingJacksonHttpMessageConverter()를 추가해야 합니다. 이 파일은 Spring Cloud Service Registry 샘플에서 찾을 수 있습니다.

private RestTemplate customRestTemplate() {
    /*
     * Inject your custom rest template
     */
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.getInterceptors()
        .add(new RequestResponseHandlerInterceptor());
    RestTemplateTransportClientFactory factory = new RestTemplateTransportClientFactory();

    restTemplate.getMessageConverters().add(0, factory.mappingJacksonHttpMessageConverter());

    return restTemplate;
}

Kubernetes 클러스터에서 애플리케이션을 실행하는 경우 액세스를 위해 IP 주소를 사용하여 Spring Cloud Service Registry를 등록하는 것이 좋습니다.

eureka.instance.prefer-ip-address=true

다음 단계