すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:構成の暗号化

最終更新日:Nov 09, 2025

構成サービス内の構成データは、通常プレーンテキストで保存されます。データソース、トークン、ユーザー名、パスワードなどの機密データのセキュリティを強化するために、Microservices Engine (MSE) は Key Management Service (KMS) と統合して構成データを暗号化および復号します。この統合により、機密データの漏洩リスクを低減できます。

前提条件

重要
  • データセキュリティを確保するため、MSE は Alibaba Cloud KMS を使用してデータを暗号化および復号します。KMS には共有 KMS と専用 KMS があります。共有 KMS は利用できなくなりました。詳細については、「[お知らせ] 共有 KMS の EOFS と EOS」をご参照ください。共有 KMS を使用している場合は、共有 KMS を専用 KMS にアップグレードすることをお勧めします。2022 年 3 月 31 日以降に KMS を有効化した場合は、専用 KMS を購入する必要があります。詳細については、「[アップグレードのお知らせ] KMS は専用 KMS にアップグレードされます」をご参照ください。KMS の課金の詳細については、「KMS 1.0 の課金」をご参照ください。

  • このトピックでは、専用 KMS を例として使用します。2022 年 3 月 31 日より前に共有 KMS を有効化した場合は、構成の詳細について「よくある質問」セクションをご参照ください。

暗号化された構成の作成

MSE コンソールで暗号化された構成を作成するには、次の手順を実行します。

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、マイクロサービスの登録 > インスタンス を選択します。

  3. インスタンス ページで、インスタンスの名前をクリックします。

  4. 左側のナビゲーションウィンドウで、Configuration Management > Configurations を選択します。

  5. Configurations ページの左上隅で、名前空間 ドロップダウンリストから名前空間を選択し、Add Configuration をクリックします。

  6. [Create Configuration] パネルで、[Data ID][Group] を入力し、[Data Encryption] スイッチを有効にしてから、[KMS Key] を選択します。[KMS Key] がない場合は、[Create] をクリックします。Key Management Service コンソールでキーを作成できます。キーを作成した後、[Create Configuration] パネルを更新して、新しい KMS キーを表示できます。

    重要
    • 2022 年 3 月 31 日以降に専用 KMS を有効化した場合は、暗号化に使用する Key ID を選択し、その Key ID を Nacos インスタンスに関連付ける必要があります。以降のすべての構成は、このキーを使用して暗号化されます。

    • 専用 KMS インスタンスのキー ID の関連付けを求めるプロンプトが表示されない場合、2022 年 3 月 31 日より前に KMS を有効化しており、引き続き共有 KMS を使用できます。アプリケーションが共有 KMS にアクセスするための構成方法は異なります。

    • 専用 KMS を使用するユーザーには、KMS AES-256 暗号化が表示されます。下位互換性のために、以前のバージョンの共有 KMS を使用するユーザーには 3 つの暗号化方式が表示されます。ただし、KMS 暗号化または KMS AES-128 暗号化は使用しないことをお勧めします。

      • KMS AES-256 暗号化: この方式は、256 ビットキーを使用する KMS エンベロープ暗号化および復号方式を使用し、高い暗号化強度を提供します。暗号化された構成コンテンツのサイズは 50 KB を超えることはできません。プレーンテキストの構成データは KMS システムに送信されません。この方式はより高いセキュリティを提供するため、推奨されます。ニーズに基づいて暗号化方式を選択してください。

      • KMS AES-128 暗号化: この方式は 128 ビットキーを使用し、中程度の暗号化強度を提供します。暗号化された構成コンテンツのサイズは 50 KB を超えることはできません。

      • KMS 暗号化: この方式は、特殊文字との互換性の問題 (たとえば、& 記号が \u0026 としてエスケープされる) があり、暗号化された構成コンテンツのサイズが 6 KB を超えることができないため、推奨されません。

    • キーが関連付けられると、MSE Nacos インスタンスのキーを変更することはできません。キーを削除すると、暗号化された構成にアクセスできなくなります。

  7. Configuration Format セクションでデータ形式を選択し、右側の Configuration Content テキストボックスにコンテンツを入力してから、Release をクリックします。

Nacos SDK for Java で暗号化された構成を使用する

  1. プロジェクトの pom.xml ファイルに次の依存関係を追加します。

    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client</artifactId>
        <version>{nacos-client-version}</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba.nacos</groupId>
        <artifactId>nacos-client-mse-extension</artifactId>
        <version>{nacos-client-mse-extension-version}</version>
    </dependency>

    バージョンガイド

    Nacos クライアントのメジャーバージョン

    Nacos クライアントのバージョン

    推奨プラグインバージョン

    1.x

    1.4.3 以降

    1.0.6 以降

    2.x

    2.1.1 以降

    1.0.6 以降

    重要

    暗号化および復号プラグインのバージョンが Nacos クライアントのバージョンと一致しない場合、安定性の問題が発生する可能性があります。推奨バージョンを使用することをお勧めします。

  2. 使用するフレームワークに基づいてコードを構成します。

    Nacos Client を直接使用する

    Nacos Client フレームワークを使用して構成を取得する場合は、次のサンプルコードを使用します。

    try {
        Properties properties = new Properties();
        // Nacos クラスターのエンドポイント。
        properties.put("serverAddr", "{serverAddr}");
        // ECS インスタンスの RAM ロールをアクセス資格情報として構成します。
        properties.put("ramRoleName", "{ramRoleName}");
        // KMS インスタンスのエンドポイント。
        properties.put("kmsEndpoint", "{kmsEndpoint}");
        ConfigService configService = NacosFactory.createConfigService(properties);
        System.out.println("content:::"+configService.getConfig("{dataId}", "{group}", 6000));
    } catch (Exception e) {
        e.printStackTrace();
    }

    kmsEndpoint パラメーターは、KMS インスタンスのエンドポイントを指定します。アプリケーションと KMS インスタンスが同じ VPC 内にある場合、このパラメーターをインスタンスの VPC エンドpoint に設定します。インターネット経由で KMS インスタンスにアクセスする場合は、このパラメーターをパブリックエンドポイントまたはパブリックゲートウェイの VPC エンドポイントに設定します。エンドポイントの取得方法の詳細については、「KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。

    AccessKey ペアを認証に使用する場合は、次の構成を置き換えます。

    properties.put("ramRoleName", "{ramRoleName}");

    以下の構成で:

    properties.put("accessKey", "{accessKey}"); 
    properties.put("secretKey", "{secretKey}");

    Nacos SDK for Java は、セキュリティトークンサービス (STS) トークンや RAM ロールの Alibaba Cloud リソースネーム (ARN) など、暗号化された構成のための複数のアクセス資格情報をサポートしています。サポートされているアクセス資格情報とクライアント構成方法の詳細については、「構成暗号化でサポートされているアクセス資格情報」をご参照ください。

    2022 年 3 月 31 日以降に KMS を有効化し、SDK から暗号化された構成を公開する場合は、次のコードを追加します。

    properties.put("keyId", "{keyId}");

    コード内の serverAddr、ramRoleName、accessKey、secretKey、kmsEndpoint、dataId、group、および keyId パラメーターを実際のサービスパラメーターに置き換えてください。

    Spring Cloud Nacos Config フレームワークを使用する
    説明
    • Spring Cloud Alibaba 2022.x または 2023.x を使用している場合は、バージョンを 2023.0.1.2 にアップグレードしてください。

    • Spring Cloud Alibaba 2021.x を使用している場合は、バージョンを 2021.0.6.1 にアップグレードしてください。

    • Spring Cloud Alibaba 2.x を使用している場合は、バージョンを 2.2.10 にアップグレードしてください。

    • Spring Cloud Alibaba、Spring Cloud、Spring Boot 間のバージョンマッピングが正しいことを確認してください。バージョンマッピングの詳細については、Spring Cloud Alibaba 公式 Web サイトの関連ブランチのリリースノートをご参照ください。

    Spring Cloud Nacos Config フレームワークを使用して構成を取得する場合は、次の構成を追加します。

    spring.cloud.nacos.config.server-addr={serverAddr}
    spring.config.import=nacos:{dataId}?group={group}&refreshEnabled=true
    # ECS インスタンスの RAM ロールをアクセス資格情報として構成します。
    spring.cloud.nacos.config.ramRoleName={ramRoleName}
    spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}

    kmsEndpoint パラメーターは、KMS インスタンスのエンドポイントを指定します。アプリケーションと KMS インスタンスが同じ VPC 内にある場合、このパラメーターをインスタンスの VPC エンドpoint に設定します。インターネット経由で KMS インスタンスにアクセスする場合は、このパラメーターをパブリックエンドポイントまたはパブリックゲートウェイの VPC エンドポイントに設定します。エンドポイントの取得方法の詳細については、「KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。

    AccessKey ペアを認証に使用する場合は、次の構成を置き換えます。

    spring.cloud.nacos.config.ramRoleName={ramRoleName}

    を次の構成に置き換えます。

    spring.cloud.nacos.config.accesskey={accessKey}
    spring.cloud.nacos.config.secretkey={secretKey}
    
    # AccessKey ペアを使用して Nacos インスタンスにアクセスする場合、パラメーターの特殊性のため、JVM パラメーターまたは環境変数を使用して AccessKey ペアを指定することをお勧めします。
    # JVM パラメーター
    -Dspring.cloud.nacos.config.accessKey={accessKey}
    -Dspring.cloud.nacos.config.secretKey={secretKey}
    # 環境変数
    spring_cloud_nacos_config_accessKey={accessKey}
    spring_cloud_nacos_config_secretKey={secretKey}

    Nacos SDK for Java は、セキュリティトークンサービス (STS) トークンや RAM ロールの Alibaba Cloud リソースネーム (ARN) など、暗号化された構成のための複数のアクセス資格情報をサポートしています。サポートされているアクセス資格情報とクライアント構成方法の詳細については、「構成暗号化でサポートされているアクセス資格情報」をご参照ください。

    2022 年 3 月 31 日以降に KMS を有効化し、SDK から暗号化された構成を公開する場合は、次の構成を追加します。

    spring.cloud.nacos.config.keyId={keyId}

    コード内の serverAddr、ramRoleName、accessKey、secretKey、kmsEndpoint、dataId、group、および keyId パラメーターを実際のサービスパラメーターに置き換えてください。

    パラメーターの説明

    次のパラメーターが正しく設定されていることを確認してください。

    パラメーター

    説明

    serverAddr

    MSE クラスターのエンドポイント。例: mse-*****.nacos-ans.mse.aliyuncs.com

    ramRoleName

    ECS インスタンスまたは ACK クラスターにアタッチされている RAM ロール。

    accessKey, secretKey

    Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret。

    ramRoleName パラメーター、または accessKey と secretKey パラメーターのいずれかを指定できます。

    kmsEndpoint

    KMS インスタンスのエンドポイント。アクセス環境と KMS インスタンスが同じ VPC 内にある場合、kmsEndpoint の値はインスタンスの VPC エンドポイントです。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint の値はパブリックエンドポイントまたはパブリックゲートウェイの VPC エンドポイントです。エンドポイントの取得方法の詳細については、「KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。

    dataId

    暗号化された構成のデータ ID。例: cipher-kms-aes-256-****.properties

    group

    暗号化された構成のグループ名。

    keyId

    構成の暗号化に使用される KMS キーの ID。KMS コンソールで KMS キーを作成して使用できます。

    例: alia/*** または key-***

Nacos SDK for Go で暗号化された構成を使用する

  1. go get コマンドを実行して、Nacos Client Go SDK の依存関係をダウンロードします。

    go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8
  2. Nacos クライアントの初期化構成を変更します。

    Nacos SDK for Go は、KMS インスタンスにアクセスするための資格情報として AccessKey ペアの使用のみをサポートします。コード内で、serverAddr、accessKey、secretKey、および kmsEndpoint パラメーターをビジネスパラメーターに置き換え、OpenKMS: true パラメーターが設定されて構成の暗号化が有効になっていることを確認します。

    sc := []constant.ServerConfig{
      {
        IpAddr: "{serverAddr}", // 値を MSE インスタンスのエンドポイントに置き換えます。
        Port:   8848,
      },
    }
    var accessKey = "{accessKey}" 
    var secretKey = "{secretKey}" 
    
    cc := constant.ClientConfig{
      NamespaceId:         "public", // 名前空間の ID。
      OpenKMS:              true, // 構成の KMS ベースの暗号化を有効にします。
      AccessKey:            accessKey, 
      SecretKey:            secretKey,
      KMSConfig:            &constant.KMSConfig{Endpoint: "{kmsEndpoint}",},
      TimeoutMs:           5000,
      NotLoadCacheAtStart: true,
      LogDir:              "/tmp/nacos/log",
      CacheDir:            "/tmp/nacos/cache",
      RotateTime:          "1h",
      MaxAge:              3,
    }

    kmsEndpoint パラメーターは、KMS インスタンスのエンドポイントを指定します。アプリケーションと KMS インスタンスが同じ VPC 内にある場合、このパラメーターをインスタンスの VPC エンドpoint に設定します。インターネット経由で KMS インスタンスにアクセスする場合は、このパラメーターをパブリックエンドポイントまたはパブリックゲートウェイの VPC エンドポイントに設定します。エンドポイントの取得方法の詳細については、「KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。

  3. 暗号化された構成を公開します。

    keyId: 構成の暗号化に使用される KMS キーの ID。

    configParam := vo.ConfigParam{
        DataId:   "{dataId}",
        Group:    "{group}",
        Content:  "content",
        KmsKeyId: "{keyId}",  // 構成の暗号化に使用される KMS キーの ID。KMS コンソールで KMS キーを作成して使用できます。
    }
    
    published, err := client.PublishConfig(configParam)
    
    if published && err == nil {
    	fmt.Printf("successfully publish: group[%s], dataId[%s], data[%s]\n", configParam.Group, configParam.DataId, configParam.Content)
    } else {
      fmt.Printf("failed to publish: group[%s], dataId[%s], data[%s]\n with error: %s\n",
        configParam.Group, configParam.DataId, configParam.Content, err)
    }
パラメーターの説明

次のパラメーターが正しく設定されていることを確認してください。

パラメーター

説明

serverAddr

MSE クラスターのエンドポイント。例: mse-*****.nacos-ans.mse.aliyuncs.com

accessKey, secretKey

RAM ユーザーの AccessKey ID と AccessKey Secret。

kmsEndpoint

KMS インスタンスのエンドポイント。アクセス環境と KMS インスタンスが同じ VPC 内にある場合、kmsEndpoint の値はインスタンスの VPC エンドポイントです。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint の値はパブリックエンドポイントまたはパブリックゲートウェイの VPC エンドポイントです。エンドポイントの取得方法の詳細については、「KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。

dataId

暗号化された構成のデータ ID。例: cipher-kms-aes-256-****.properties

group

暗号化された構成のグループ名。

keyId

構成の暗号化に使用される KMS キーの ID。KMS コンソールで KMS キーを作成して使用できます。

例: alia/*** または key-***

構成暗号化でサポートされているアクセス資格情報

Nacos SDK for Java は、構成暗号化のために複数のタイプのアクセス資格情報をサポートしています。シナリオの認証および権限付与の要件に基づいて、資格情報プロバイダーの初期化方法を選択できます。

Nacos SDK for Java は、次のタイプのアクセス資格情報をサポートしています。

クライアントでアクセス資格情報を構成する方法の詳細については、「Nacos Client のアクセス認証」の構成センターセクションをご参照ください。次のシステムポリシーを選択して、アクセス資格情報に必要な権限を付与します。この操作は、すべての KMS インスタンスに対する読み取りおよび書き込み権限を付与する粗粒度の権限付与です。

アクセスポリシー名

説明

AliyunKMSFullAccess

KMS を管理する権限。このポリシーがアタッチされた RAM ユーザーは、すべての機能に対するすべての操作を実行する権限を持ちます。これは Alibaba Cloud アカウントの権限と同等です。

よくある質問

2022 年 3 月 31 日より前に有効化された共有 KMS を使用する場合、パラメーターをどのように構成すればよいですか?

2022 年 3 月 31 日より前に共有 KMS を有効化した場合は、前述の構成で kmsEndpoint パラメーターを kmsRegionId に置き換えるだけで済みます。kmsRegionId パラメーターは、KMS インスタンスが存在するリージョン (例: cn-hangzhou) を指定します。使用するフレームワークに基づいてクライアント構成を変更します。

Java SDK 用 Nacos クライアントで暗号化された構成を使用する

コード内の次の構成を置き換えます。

properties.put("kmsEndpoint", "{kmsEndpoint}");

次のように置き換えます

properties.put("kms_region_id", "{kmsRegionId}");

Java SDK 用 Spring Cloud Nacos Config フレームワークを使用して暗号化された構成を使用する

構成ファイル内の次の構成を置き換えます。

spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}

構成は次のとおりです。

spring.cloud.nacos.config.kms_region_id={kmsRegionId}

Go SDK で暗号化された構成を使用する

ClientConfig で、RegionId パラメーターを構成します。次の構成を置き換えます。

cc := constant.ClientConfig{
  NamespaceId:         "public", 
  OpenKMS:              true, 
  AccessKey:            accessKey, GPT-3.5-Turbo-0125
  SecretKey:            secretKey,
  KMSConfig:            &constant.KMSConfig{Endpoint: "{kmsEndpoint}",},
  TimeoutMs:            5000,
  NotLoadCacheAtStart:  true,
  LogDir:               "/tmp/nacos/log",
  CacheDir:             "/tmp/nacos/cache",
  RotateTime:           "1h",
  MaxAge:               3,
}

次のように置き換えます

cc := constant.ClientConfig{
  NamespaceId:         "public", 
  OpenKMS:              true, 
  AccessKey:            accessKey, 
  SecretKey:            secretKey,
  TimeoutMs:            5000,
  NotLoadCacheAtStart:  true,
  LogDir:               "/tmp/nacos/log",
  CacheDir:             "/tmp/nacos/cache",
  RotateTime:           "1h",
  MaxAge:                3,
  RegionId:             "{kmsRegionId}",	
}

KMS インスタンスのエンドポイントを取得するにはどうすればよいですか?

  • アプリケーションと KMS インスタンスが同じ VPC 内にある場合は、KMS インスタンス管理ページに表示される VPC エンドポイントを kmsEndpoint の値として使用します。image

  • インターネット経由で KMS インスタンスにアクセスする場合は、KMS インスタンス管理ページで対応する UID のパブリックアクセスを有効にする必要があります。

    image

    image

  • アプリケーションが Alibaba Cloud VPC 内にある場合は、パブリックゲートウェイの VPC エンドポイントを kmsEndpoint の値として使用します。

トラブルシューティング

一般的なエラーのトラブルシューティング

エラーをトラブルシューティングするには、次のチェックを実行します。

  • アプリケーション実行環境が MSE および KMS インスタンスの VPC エンドポイントにアクセスできることを確認します。

    説明

    MSE インスタンスと KMS インスタンスは、ネットワーク経由で相互にアクセスする必要はありません。

  • KMS v1.0 または v3.0 を使用しているかどうかを確認します。KMS v1.0 を使用している場合は、2022 年 3 月 31 日より前に KMS を有効化している必要があります。

    説明

    2022 年 3 月 31 日以降に KMS を有効化した場合は、専用 KMS を購入する必要があります。KMS 1.0 の暗号化機能は、新規ユーザーは利用できなくなりました。

  • Nacos クライアントのバージョンが暗号化および復号プラグインのバージョンと一致していることを確認します。詳細については、このトピックのバージョンガイドをご参照ください。

Nacos Java SDK の問題のトラブルシューティング

Nacos ログの例外キーワード

原因

keyId is not set up yet

keyId 初期化パラメーターが空であるか、指定されていません。

Forbidden.KeyNotFound : The specified Key is not found.

keyId 初期化パラメーターで指定されたキー ID が KMS インスタンスに存在しません。

kmsEndpoint is empty

kmsEndpoint 初期化パラメーターが空です。

test-kst-xxxx.cryptoservice.kms.aliyuncs.com: unknown name or service

kmsEndpoint 初期化パラメーターで指定されたネットワークに到達できません。

kmsPasswordKey is empty

kmsPasswordKey 初期化パラメーターが空です。

keystore password was incorrect

kmsPasswordKey 初期化パラメーターが正しくありません。

SDK.ServerUnreachable : Server unreachable: connection https://kst-xxx.cryptoservice.kms.aliyuncs.com

kmsVersion 初期化パラメーターが v3.0 として指定されていません。

None of the TrustManagers trust this certificate chain

  1. kmsVersion 初期化パラメーターが v3.0 として指定されていません。

  2. kmsCaFilePath 初期化パラメーターが空です。

kmsClientKeyFilePath is empty

kmsClientKeyFilePath 初期化パラメーターが空です。

unable to find valid certification path to requested target

kmsCaFilePath 初期化パラメーターで指定されたファイルが見つかりません。

参照