Config Server とサービス レジストリにアクセスする

Note

Azure Spring Apps は、Azure Spring Cloud サービスの新しい名前です。 サービスの名前は新しくなりましたが、スクリーンショット、ビデオ、図などの資産の更新に取り組んでいる間、場所によってはしばらく古い名前が表示されます。

この記事の適用対象: ✔️ Basic または Standard ❌ Enterprise

この記事では、AMicrosoft Entra のロールベースのアクセス制御 (RBAC) を使用して、Azure Spring Apps によって管理されている Spring Cloud Config Server と Spring Cloud Service Registry にアクセスする方法について説明します。

Note

Azure Spring Apps サービス内でデプロイされ実行されているアプリケーションは、管理対象の Spring Cloud Config Server および Service Registry にアクセスするとき、証明書ベースの認証と承認を使用して自動的に接続されます。 これらのアプリケーションについては、このガイダンスに従う必要はありません。 関連する証明書は Azure Spring Apps プラットフォームによって完全に管理されているため、Config Server および Service Registry に接続したときにアプリケーションに自動的に挿入されます。

Microsoft Entra ユーザーまたはグループ、MSI、サービス プリンシパルのいずれかへのアクセスの割り当て

[管理グループ | サブスクリプション | リソース グループ | リソース] スコープでロールを [ユーザー | グループ | サービス プリンシパル | マネージド ID] に割り当てます。

ロール名 説明
Azure Spring Apps Config Server 閲覧者 Azure Spring Apps Config Server への読み取りアクセスを許可します。
Azure Spring Apps Config Server 共同作成者 Azure Spring Apps Config Server への読み取り、書き込み、削除アクセスを許可します。
Azure Spring Apps Service Registry 閲覧者 Azure Spring Apps Service Registry への読み取りアクセスを許可します。
Azure Spring Apps Service Registry 共同作成者 Azure Spring Apps Service Registry への読み取り、書き込み、削除アクセスを許可します。

詳細な手順については、「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 Service Registry の既定のエンドポイントがサポートされています。

    • $
    • $

    Note

    21Vianet が運営する Microsoft Azure を使用している場合は、*.azuremicroservices.io*.microservices.azure.cn で置き換えます。 詳細については、「21Vianet によって運営される Microsoft Azure 開発者ガイド」のセクション「Azure でエンドポイントを確認する」を参照してください。

  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 操作に関するページを参照してください。

構成サーバー エンドポイントと詳細なパス情報については、ResourceController.javaEncryptionController.java に関するページを参照してください。

Spring Boot アプリを Azure Spring Apps によって管理されている Spring Cloud Config Server と Service Registry に登録する

ロールが割り当てられた後、Microsoft Entra トークン認証を使用して、Spring Boot アプリを Azure Spring Apps によって管理されている Spring Cloud Config Server と Service Registry に登録できます。 Config Server と Service Registry の両方で、認証用のベアラー トークンを挿入するためのカスタム REST テンプレートがサポートされています。

詳細については、Azure Spring Apps によって管理されている Config Server へのアクセスおよび Azure Spring Apps によって管理されている Service Registry へのアクセスに関するページのサンプルを参照してください。 次のセクションでは、これらのサンプルの重要な詳細について説明します。

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);

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;
    }

}

CustomRestTemplateTransportClientFactories.java 内:

前の 2 つのクラスは、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

次のステップ