Microservices Engine (MSE) のマイクロサービスレジストリの設定データは、プレーンテキストで保存されます。MSE は Key Management Service (KMS) と統合されており、データソース、トークン、ユーザー名、パスワードなどの設定データを暗号化および復号できます。これにより、機密データの漏洩リスクを低減できます。
前提条件
Developer Edition、Professional Edition、または Serverless Edition を使用する Nacos エンジンが作成されていること。詳細については、「インスタンスの作成」をご参照ください。
Key Management Service (KMS) が有効化されていること。
KMS インスタンスが購入され、有効化されていること。KMS インスタンスのイメージバージョンは dkms-3.0.0 以降であること。詳細については、「KMSインスタンスの購入と有効化」および「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 コンソールで暗号化された設定を作成するには、次の手順を実行します。
[MSE コンソール] にログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービスの登録 > インスタンス を選択します。
インスタンス ページで、インスタンスの名前をクリックします。
左側のナビゲーションウィンドウで設定管理> 設定を選択します。
設定 ページの左上隅にある 名前空間 ドロップダウンリストから名前空間を選択し、設定の追加 をクリックします。
[Create Configuration] パネルで、[Data ID] と [Group] を入力します。次に、[Data Encryption] スイッチをオンにし、[KMS Key] を選択します。[KMS Key] を作成していない場合は、[Create] をクリックします。Key Management Service コンソールでキーを作成できます。キーを作成した後、[Create Configuration] パネルを更新して、新しい KMS キーを表示します。
重要2022 年 3 月 31 日以降に専用 KMS を有効化した場合、暗号化に使用されるキーの ID を選択し、そのキーを MSE Nacos インスタンスに関連付ける必要があります。これにより、後続のすべての設定がそのキーを使用して暗号化されます。
2022 年 3 月 31 日より前に KMS を有効化した場合、専用 KMS インスタンスのキー ID をバインドするプロンプトは表示されず、共有 KMS を使用できます。アプリケーションが共有 KMS にアクセスするための設定方法は異なります。
専用 KMS を使用するユーザーには、[KMS AES-256] が表示されます。共有 KMS を使用するユーザーには、バージョンの互換性を考慮して 3 つの暗号化方法が表示されます。[KMS] または [KMS AES-128] は選択しないことを推奨します。
KMS AES-256:KMS のエンベロープ暗号化および復号方式。この方法では、暗号化強度の高い 256 ビットキーを使用します。暗号化された設定コンテンツは 50 KB を超えることはできません。プレーンテキストの設定データは KMS に送信されません。より高いセキュリティを確保するために、このオプションを選択することを推奨します。ビジネス要件に基づいて暗号化方法を選択してください。
KMS AES-128:128 ビットキーを使用する暗号化方式で、中程度の暗号化強度です。暗号化された設定コンテンツのサイズは 50 KB を超えることはできません。
KMS: 特殊文字によって互換性の問題が発生する可能性があるため、このオプションを選択しないことを推奨します。 たとえば、
アンパサンド (&)は\u0026としてエスケープされます。 暗号化された設定内容のサイズは 6 KB を超えることはできません。
バインド後、キーは変更できません。キーを削除すると、暗号化された設定にアクセスできなくなります。
設定フォーマット セクションでデータ形式を選択し、右側の 設定内容 エディターに設定内容を入力してから、公開 をクリックします。
Nacos SDK for Java での暗号化された設定の使用
プロジェクトの 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
V1.4.3 以降
V1.0.6 以降
2.x
V2.1.1 以降
V1.0.6 以降
重要暗号化・復号プラグインのバージョンが Nacos クライアントのバージョンと一致しない場合、安定性の問題が発生する可能性があります。推奨バージョンを使用してください。
使用するフレームワークの種類に応じて、適切なコードを選択してください。
Nacos クライアントフレームワークの使用
Nacos クライアントフレームワークを使用して設定を取得する場合、次のサンプルコードを設定する必要があります。
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 内にある場合、kmsEndpoint にはインスタンスの VPC エンドポイントを指定します。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint にはパブリックゲートウェイのパブリックエンドポイントまたは VPC エンドポイントを指定します。エンドポイントの取得方法の詳細については、「KMSインスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。
AccessKey ペアを認証情報として使用して KMS インスタンスにアクセスする場合は、次の設定を置き換えてください。
properties.put("ramRoleName", "{ramRoleName}");次の設定を使用してください。
properties.put("accessKey", "{accessKey}"); properties.put("secretKey", "{secretKey}");Nacos SDK for Java は、Security Token Service (STS) トークンや RAM ロールの Alibaba Cloud Resource Name (ARN) など、複数のアクセス認証情報を使用して暗号化された設定を使用できます。サポートされているアクセス認証情報とクライアント設定方法の詳細については、「Nacos SDK for Javaの設定暗号化でサポートされているアクセス認証情報」をご参照ください。
KMS が 2022 年 3 月 31 日以降に有効化され、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公式ウェブサイトのリリースノートをご参照ください。
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 内にある場合、kmsEndpoint にはインスタンスの VPC エンドポイントを指定します。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint にはパブリックゲートウェイのパブリックエンドポイントまたは VPC エンドポイントを指定します。エンドポイントの取得方法の詳細については、「KMSインスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。
AccessKey ペアを認証情報として使用して KMS インスタンスにアクセスする場合は、次の設定を置き換えてください。
spring.cloud.nacos.config.ramRoleName={ramRoleName}次の設定を使用してください。
spring.cloud.nacos.config.accesskey={accessKey} spring.cloud.nacos.config.secretkey={secretKey} # AccessKey ペアを使用して Nacos にアクセスする場合、その機密性の高さから # JVM パラメーターまたは環境変数を使用して指定することを推奨します。 # 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 は、Security Token Service (STS) トークンや RAM ロールの Alibaba Cloud Resource Name (ARN) など、複数のアクセス認証情報を使用して暗号化された設定を使用できます。サポートされているアクセス認証情報とクライアント設定方法の詳細については、「Nacos SDK for Javaの設定暗号化でサポートされているアクセス認証情報」をご参照ください。
KMS が 2022 年 3 月 31 日以降に有効化され、SDK で暗号化された設定をリリースしたい場合は、次のコードを追加してください。
spring.cloud.nacos.config.keyId={keyId}コード内の serverAddr、ramRoleName、accessKey、secretKey、kmsEndpoint、dataId、group、および keyId パラメーターを実際のサービスパラメーターに置き換えてください。
説明
次の表で各パラメーターについて説明します。設定する値が有効であることを確認してください。
パラメーター
説明
serverAddr
MSE インスタンスの IP アドレスです。例:
mse-*****.nacos-ans.mse.aliyuncs.com。ramRoleName
ECS インスタンスまたは ACK クラスターに割り当てられた RAM ロール。
accessKey と secretKey
RAM ユーザーの AccessKey ID と AccessKey シークレット。
accessKey と secretKey、または ramRoleName のいずれかを指定する必要があります。
kmsEndpoint
KMS インスタンスのエンドポイント。アクセス環境と KMS インスタンスが同じ VPC 内にある場合、kmsEndpoint にはインスタンスの VPC エンドポイントを指定します。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint にはパブリックゲートウェイのパブリックエンドポイントまたは VPC エンドポイントを指定します。エンドポイントの取得方法の詳細については、「KMSインスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。
dataId
暗号化された設定のデータ ID。 例:
cipher-kms-aes-256-****.properties。group
暗号化された設定のグループ名。
keyId
設定の暗号化に使用される KMS キーの ID。コンソールで KMS キーを作成して使用できます。
例:
alia/***またはkey-***。
Nacos SDK for Go での暗号化された設定の使用
go getコマンドを実行して、Nacos client SDK for Goの依存関係をダウンロードします。go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8Nacos クライアントの初期設定を変更します。
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 内にある場合、kmsEndpoint にはインスタンスの VPC エンドポイントを指定します。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint にはパブリックゲートウェイのパブリックエンドポイントまたは VPC エンドポイントを指定します。エンドポイントの取得方法の詳細については、「KMSインスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。
暗号化された設定を公開します。
keyId: 設定を暗号化するために使用される KMS キーの ID。configParam := vo.ConfigParam{ DataId: "{dataId}", Group: "{group}", Content: "content", KmsKeyId: "{keyId}", // 暗号化用の KMS キーの ID。 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 インスタンスの IP アドレスです。例: |
accessKey と secretKey | RAM ユーザーの AccessKey ID と AccessKey シークレット。 |
kmsEndpoint | KMS インスタンスのエンドポイント。アクセス環境と KMS インスタンスが同じ VPC 内にある場合、kmsEndpoint にはインスタンスの VPC エンドポイントを指定します。インターネット経由で KMS インスタンスにアクセスする場合、kmsEndpoint にはパブリックゲートウェイのパブリックエンドポイントまたは VPC エンドポイントを指定します。エンドポイントの取得方法の詳細については、「KMSインスタンスのエンドポイントを取得するにはどうすればよいですか?」をご参照ください。 |
dataId | 暗号化された設定のデータ ID。 例: |
group | 暗号化された設定のグループ名。 |
keyId | 設定の暗暗号化に使用される KMS キーの ID。KMS コンソールで KMS キーを作成して使用できます。 例: |
Nacos SDK for Java の設定暗号化でサポートされているアクセス認証情報
Nacos SDK for Java は、設定を暗号化するために複数のアクセス認証情報をサポートしています。ビジネスシナリオの認証および認可要件に基づいて、認証情報プロバイダーを初期化する方法を選択できます。
サポートされているアクセス認証情報:
- 説明
Serverless App Engine (SAE) 環境では、STS トークンを使用して MSE の暗号化された設定にアクセスすることを推奨します。詳細については、「Nacosクライアントによるアクセス認証」の「STSトークンの使用」セクションをご参照ください。
- 説明
この方法 (ECSRAMRole) は、ECS、Elastic Container Instance (ECI)、および ACK 環境でのみ適用可能です。Serverless App Engine (SAE) は、ECS インスタンスの RAM ロールを使用した MSE の暗号化された設定へのアクセスをサポートしていません。
クライアントでアクセス認証情報を設定する方法の詳細については、「Nacosクライアントによるアクセス認証」の「クライアントでのアクセス認証情報の設定」セクションをご参照ください。次のシステムポリシーを選択して、アクセス認証情報に関連する権限を付与します。これにより、粗粒度の認可操作が実行され、すべての KMS インスタンスに対する読み取りおよび書き込み権限が付与されます。
ポリシー | 注 |
AliyunKMSFullAccess | KMS の管理に必要な権限。このポリシーがアタッチされた RAM ロールを使用すると、Alibaba Cloud アカウントを使用して KMS を管理するのと同じように、すべての機能を管理できます。 |
よくある質問
2022 年 3 月 31 日より前に有効化された共有 KMS を使用する場合、パラメーターをどのように設定しますか?
2022 年 3 月 31 日より前に共有 KMS を有効化した場合は、kmsEndpoint パラメーターを kmsRegionId に置き換えるだけで済みます。kmsRegionId は、KMS インスタンスが存在するリージョン (cn-hangzhou など) を示します。使用しているフレームワークに基づいてクライアント設定を変更するには、次の手順を実行します。
Nacos クライアント SDK for Java での暗号化された設定の使用
コード内の次の設定を置き換えてください。
properties.put("kmsEndpoint", "{kmsEndpoint}");次の設定を使用してください。
properties.put("kms_region_id", "{kmsRegionId}");Nacos SDK for Java の Spring Cloud Nacos Config フレームワークを使用した暗号化された設定の使用
コード内の次の設定を置き換えてください。
spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}次の設定を使用してください。
spring.cloud.nacos.config.kms_region_id={kmsRegionId}Nacos SDK for Go での暗号化された設定の使用
ClientConfig に RegionId パラメーターを追加します。コード内の次の設定を置き換えます:
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
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,
}次の設定を使用してください。
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 内にある場合、
kmsEndpointをインスタンスの VPC エンドポイントに設定します。KMS コンソールで、[インスタンス管理] ページに移動し、対象のインスタンスをクリックして詳細を表示し、[基本情報] セクションから [インスタンスの VPC エンドポイント] を取得します。インターネット経由で KMS インスタンスにアクセスする場合、KMS インスタンスの詳細ページで [Internet Access Status] スイッチをオンにする必要があります。
パブリックアクセスが有効化されると、パブリックゲートウェイのパブリックエンドポイントは
kms.cn-hangzhou.aliyuncs.comになり、パブリックゲートウェイの VPC エンドポイントはkms-vpc.cn-hangzhou.aliyuncs.comになります。 パブリックアクセスには KMS SDK が必要であり、対称暗号化および復号化のパフォーマンス制限は 1 秒あたり 750 操作です。 セキュリティを強化するために、きめ細かなアクセスコントロールポリシーを設定することを推奨します。VPC 経由で KMS インスタンスにアクセスする場合、kmsEndpoint の値はパブリックゲートウェイの VPC エンドポイントです。
トラブルシューティング
一般的なエラーのトラブルシューティング
次の点を確認してください。
アプリケーションの実行環境が、MSE インスタンスが存在する VPC と KMS インスタンスが存在する VPC に接続できるかどうかを確認してください。
説明MSE インスタンスと KMS インスタンス間の接続性を確保する必要はありません。
KMS
V1.0またはV3.0が使用されているかどうかを確認します。 KMS V1.0 を使用している場合、2022 年 3 月 31 日より前に KMS が有効化されたことを確認する必要があります。説明2022 年 3 月 31 日以降に KMS を有効化した場合、専用 KMS を購入する必要があります。KMS V1.0 の暗号化機能は、新規ユーザーには提供されなくなりました。
Nacos クライアントのバージョンが暗号化および復号プラグインのバージョンと一致しているかどうかを確認してください。詳細については、本トピック内のバージョンの説明をご参照ください。
Nacos SDK for Java の問題のトラブルシューティング
Nacos ログの例外スタックのキーワード | 原因 |
| 初期化パラメーター |
| 初期化パラメーター |
| 初期化パラメーター |
| 初期化パラメーター |
| 初期化パラメーター |
| 初期化パラメーター |
| 初期化パラメーター |
|
|
| 初期化パラメーター |
| 初期化パラメーター |