Microservices Engine (MSE) の Nacos インスタンスの認証を有効にすることで、インスタンスデータへの不正アクセスや変更を防止します。Nacos インスタンスの認可されたアクセスを設定し、Nacos クライアントからのアクセスを認証できます。
前提条件
アクセス方法
エンジン直接接続 方式で認証を設定できます。権限付与後、Nacos クライアントは RAM ユーザーまたは RAM ロールで MSE Nacos インスタンスにアクセスできます。
エンジン直接接続:SDK またはクライアント で Nacos エンジンに直接アクセスします。この方法は、プログラムによるアクセス用です。
コンソールベースのエンジン接続:MSE コンソール で Nacos エンジンを管理および監視します。RAM ユーザーに MSE コンソールへのアクセス権を付与する方法の詳細については、「レジストリと設定センターの権限付与」をご参照ください。
認証の有効化
デフォルトでは、新しい Nacos エンジンの認証は無効になっており、すべてのリクエストに応答します。
オープンソース Nacos コンソールのログイン機能は、ユーザー情報を記録するのみで、リクエストの認証や遮断は行いません。Nacos インスタンスの認証を有効にすると、オープンソース Nacos コンソールからアクセスできなくなるため、MSE コンソールを使用する必要があります。
Nacos 2.x および一部の後続バージョンでは、コンソールパスワードの変更がサポートされていません。認証を有効にした後、MSE コンソールから Nacos パスワードのリセットや変更はできません。クライアント認証を設定するには、AccessKey (AK) と SecretKey (SK) を使用する必要があります。詳細については、本トピックの「方法 6: AccessKey の使用」をご参照ください。
[MSE コンソール] にログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、マイクロサービスの登録 > インスタンス を選択します。
インスタンス ページで、インスタンスの名前をクリックします。
左側のナビゲーションペインで、[パラメーター設定] をクリックします。パラメーター設定ページで、Edit をクリックします。
ConfigAuthEnabled または NamingAuthEnabled パラメーターを選択し、Value 列で Yes をクリックし、次に Save and Restart Instance をクリックします。
重要設定センターまたはレジストリの認証を有効にする前に、クライアント側でアクセス認証情報を設定する必要があります。設定しない場合、クライアントは設定やサービスを取得できません。詳細については、「クライアントでのアクセス認証情報の設定」をご参照ください。
これら 2 つのパラメーターは互いに独立して機能し、それぞれのモジュールを制御します。
パラメーター
説明
ConfigAuthEnabled
設定センターの認証を有効にします。Basic Edition V1.2.1 以降のインスタンス、および Professional Edition と Developer Edition のすべてのバージョンでサポートされています。
NamingAuthEnabled
レジストリの認証を有効にします。V2.0.4 以降の Professional Edition または Developer Edition のインスタンスでサポートされています。
クライアント認証情報の設定
MSE Nacos は、複数の認証情報プロバイダー初期化メソッドに対応しています。ご自身の要件に最も適したメソッドを選択してください。
初期化方法 | シナリオ | 前提条件 | 基盤となる認証情報 | 有効期間 | ローテーションと更新 |
Alibaba Cloud のコンピューティングリソース (Elastic Compute Service (ECS) インスタンス、Elastic Container Instance (ECI) インスタンス、Container Service for Kubernetes (ACK) のワーカーノードなど) にデプロイされたアプリケーション。 | なし | STS トークン | 一時的 | 自動更新 | |
ACK のワーカーノードにデプロイされた、信頼されていないアプリケーション。 | なし | STS トークン | 一時的 | 自動更新 | |
信頼されていない環境にあり、認証情報の有効期間とアクセス権限のコントロールが必要なアプリケーション。 | あり | STS トークン | 一時的 | 手動更新 | |
外部システムから認証情報を取得するアプリケーション。 | なし | STS トークン | 一時的 | 自動更新 | |
クラウドサービスへの委任されたアクセス (クロスアカウントアクセスなど) が必要なアプリケーション。 | あり | STS トークン | 一時的 | 自動更新 | |
セキュアな環境にあり、認証情報の頻繁なローテーションを必要とせず、クラウドサービスへの長期的なアクセスが必要なアプリケーション。 | あり | アクセスキー (AK) | 長期的 | 手動ローテーション | |
アクセスキー (AK) の漏洩リスクがあり、クラウドサービスへ長期的にアクセスするために認証情報の頻繁なローテーションが必要な環境のアプリケーション。 | あり | アクセスキー (AK) | 長期的 | 自動ローテーション |
方法 1:RAM ロールによる認証
RAM ロールを ECS インスタンスまたは ACK クラスターに関連付けることで、アプリケーションに MSE へのアクセスを許可します。アプリケーションは RAM ロール名を Nacos クライアントに提供して認証を行います。これにより、静的な AccessKey 認証情報が不要になります。きめ細かなアクセス制御のために、異なるロールとポリシーを定義できます。詳細については、「ECS インスタンスの RAM ロール」、「権限付与の概要」、および「RAM ロールの概要」をご参照ください。
ステップ 1:RAM ロールの作成とポリシーの設定
ECS インスタンスへの MSE アクセスの許可
(オプション) Alibaba Cloud サービスを信頼されたエンティティとして使用する RAM ロールを作成します。詳細については、「Alibaba Cloud サービス用の RAM ロールの作成」をご参照ください。
次のいずれかの システムポリシー をアタッチして、RAM ロールに権限を付与します。これらのポリシーは、すべての Nacos インスタンス設定とサービスに対して、粗粒度の読み取り/書き込みまたは読み取り専用アクセスを提供します。詳細については、「RAM ロールへの権限付与」をご参照ください。
ポリシー名
説明
AliyunMSEFullAccess
MSE の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。
AliyunMSEReadOnlyAccess
MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースを表示できます。
説明一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
インスタンスにきめ細かな権限を付与するには、カスタムポリシーを作成してください。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタムポリシーの例」をご参照ください。
ECS コンソールにログオンします。左側のナビゲーションペインで、[インスタンスとイメージ] > インスタンス を選択します。
ページの左上隅で、ターゲットリージョンとリソースグループを選択します。
例えば、[すべてのリソース] ドロップダウンリストからリソースグループを選択し、リージョンセレクターから [中国 (杭州)] などのリージョンを選択します。
管理したい ECS インスタンスを見つけ、
> [インスタンス設定] > [RAM ロールのアタッチ/デタッチ]を選択します。ダイアログボックスで、作成したインスタンス RAM ロールを選択し、[OK] をクリックします。
ACK ワーカー RAM ロールへの権限付与
ACK クラスターを作成すると、ワーカー RAM ロールが自動的に作成されます。新しいロールを作成せずに、このロールに直接権限を付与できます。
カスタムポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。
MSE の完全な管理権限を付与する場合:
{ "Action": "mse:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }MSE の読み取り専用権限を付与する場合:
{ "Action": [ "mse:Query*", "mse:List*", "mse:Get*" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }
説明特定の MSE インスタンスにきめ細かな権限を付与するには、カスタムポリシーを作成してください。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタムポリシーの例」をご参照ください。
カスタムポリシーをクラスターのワーカー RAM ロールにアタッチします。詳細については、「クラスターのワーカー RAM ロールへの権限付与」をご参照ください。
ステップ 2:クライアント認証の設定
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
RAM ロールを認証に使用するには、サポートされているバージョンにクライアントをアップグレードしてください。詳細については、「認証と暗号化/復号化をサポートする Nacos クライアントバージョン」をご参照ください。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}");
// レジストリ
NamingService naming = NamingFactory.createNamingService(properties);
// 設定センター
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba フレームワーク
Spring Cloud Alibaba フレームワークを使用する場合、アプリケーションの設定ファイルに次の設定を追加します。
Spring Cloud Alibaba フレームワークをバージョン 2.2.9.RELEASE 以降にアップグレードしてください。
Nacos クライアントをバージョン 2.2.0 以降にアップグレードしてください。
## レジストリ
spring.cloud.nacos.discovery.ramRoleName=${roleName}
## 設定センター
spring.cloud.nacos.config.ramRoleName=${roleName}Dubbo フレームワーク
Dubbo フレームワークを使用する場合、Dubbo 設定ファイルのレジストリ URL に次のパラメーターを追加します。
Nacos クライアントをバージョン 2.2.0 以降にアップグレードしてください。
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?ramRoleName=${roleName}Go SDK
Go 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
バージョン 2.3.3 以降を推奨します。
// ServerConfig を作成
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RamRoleName: "${roleName}",
}
// ClientConfig を作成
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアントを作成
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアントを作成
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)方法2:OIDC ロール ARN の使用
Container Service for Kubernetes (ACK) のワーカーノードに RAM ロールが設定されている場合 (方法1を参照)、そのノード上の Pod はメタデータサーバーから STS トークンを取得できます。ただし、クラスターで信頼されていないアプリケーションをホストしている場合、それらがメタデータサーバーにアクセスしてワーカーノードの RAM ロール STS トークンを取得することは望ましくない場合があります。
Pod レベルの最小権限を適用するには、RRSA (RAM Roles for Service Account) 機能を使用します。ACK クラスターは、各 Pod にサービスアカウントの OIDC トークンファイルをマウントし、その設定を環境変数に注入します。Nacos クライアントはこれらの変数を読み取り、AssumeRoleWithOIDC API を呼び出して、OIDC トークンを、指定された RAM ロールに関連付けられた STS トークンと交換します。これにより、アクセスキーペアや手動での STS トークン管理が不要になります。
ステップ1:ACK クラスターでの RRSA の有効化
ACK クラスターで RRSA 機能を有効にするには、「RRSA を使用してサービスアカウントに RAM 権限を付与し、Pod レベルのアクセス制御を実現する」をご参照ください。
ステップ2:RAM ロールへの権限付与
ステップ1の RAM ロール (例えば、「RRSA を使用してサービスアカウントに RAM 権限を付与し、Pod レベルのアクセス制御を実現する」の demo-role-for-rrsa) に、次のいずれかの システムポリシー をアタッチして MSE Nacos へのアクセスを許可します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対して、粗粒度の読み取り/書き込み権限、または読み取り専用権限を RAM ロールに付与します。詳細な手順については、「RAM ロールの権限管理」をご参照ください。
ポリシー名 | 説明 |
AliyunMSEFullAccess | MSE の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ権限で、すべての操作を実行できます。 |
AliyunMSEReadOnlyAccess | MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースを表示できます。 |
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
インスタンスにきめ細かい MSE アクセス権限を付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタムポリシーの例」をご参照ください。
ステップ3:クライアント認証の設定
この方法では、RoleSessionName のみを設定する必要があります。ACK の RRSA 機能は、注入された環境変数を通じてその他の一時的な認証情報を提供します。
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
Nacos クライアントは、バージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
// ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で上書き可能です。
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
// 以下のパラメーターはオプションです。
// ALIBABA_CLOUD_POLICY 環境変数で上書き可能です。
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${policy-with-limited-permissions}");
// ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数で上書き可能です。
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba framework
Spring Cloud Alibaba framework を使用する場合、必要な依存関係とアプリケーションの設定ファイルに次の設定を追加します。
Spring Cloud Alibaba framework をバージョン 2.2.9.RELEASE 以降にアップグレードしてください。
Nacos クライアントは、バージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>## レジストリ
spring.cloud.nacos.discovery.server-addr=${nacos-server-address}
# ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で上書き可能です。
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## 設定センター
spring.cloud.nacos.config.server-addr=${nacos-server-address}
# ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で上書き可能です。
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## 以下のパラメーターはオプションです。
# ALIBABA_CLOUD_POLICY 環境変数で上書き可能です。
spring.cloud.nacos.discovery.alibabaCloudPolicy=${policy-with-limited-permissions}
spring.cloud.nacos.config.alibabaCloudPolicy=${policy-with-limited-permissions}
# ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数で上書き可能です。
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}Dubbo framework
Dubbo framework を使用する場合、必要な依存関係と Dubbo 設定ファイルのレジストリ URL に次のパラメーターを追加します。
Nacos クライアントは、バージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency># ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数で上書き可能です。
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudRoleSessionName=${custom-role-session-name}
## 以下のオプションパラメーターは URL に追加でき、ALIBABA_CLOUD_POLICY および ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数で上書き可能です。
&alibabaCloudPolicy=${policy-with-limited-permissions}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}Go SDK
Go 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
バージョン 2.3.3 以降を使用してください。
// ServerConfig を作成します
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RoleSessionName: "${custom-role-session-name}",
}
// 以下のパラメーターはオプションです。
ramConfig.Policy = "${policy-with-limited-permissions}"
ramConfig.RoleSessionExpiration = 3600
// ClientConfig を作成します
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアント (ConfigClient) を作成します
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアント (NamingClient) を作成します
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)方法 3:STS トークンの使用
アプリケーションが MSE Nacos インスタンスへの一時的なアクセスを必要とする場合、Security Token Service (STS) からの一時的な認証情報を使用して認証情報プロバイダーを初期化します。これらの認証情報は、AccessKey ID、AccessKey Secret、およびセキュリティトークンで構成されています。
この方法では、STS トークンを手動で管理する必要があり、メンテナンスが複雑になります。アプリケーションが MSE Nacos インスタンスへの一時的なアクセスを繰り返し必要とする場合、STS トークンを手動で更新する必要があります。
ステップ 1 (オプション):RAM ユーザーと RAM ロールの作成
RAM ユーザーを作成する必要がある場合は、「RAM ユーザーの作成」をご参照ください。
Alibaba Cloud アカウントを信頼できるエンティティとして RAM ロールを作成する必要がある場合は、「Alibaba Cloud アカウント用の RAM ロールの作成」をご参照ください。
ステップ 2:権限の付与
ステップ 1 の RAM ユーザーに、ロールを引き受ける権限を付与します。詳細については、「AssumeRole - ロールの一時的なアクセス認証情報の取得」をご参照ください。
次のいずれかのシステムポリシーをアタッチして、ステップ 1 の RAM ロールに権限を付与します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対して、粗い読み取り/書き込みまたは読み取り専用アクセスを RAM ロールに付与します。詳細については、「RAM ロールの権限管理」をご参照ください。
ポリシー名 | 説明 |
AliyunMSEFullAccess | MSE を管理する完全な権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
AliyunMSEReadOnlyAccess | MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべてのリソースへの読み取り専用アクセスを持ちます。 |
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
インスタンスにきめ細かい権限を付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタムポリシーの例」をご参照ください。
ステップ 3:STS トークンの取得
ステップ 1 の RAM ロールの一時的なアクセス認証情報 (STS トークン) を取得します。詳細については、「AssumeRole - ロールの一時的なアクセス認証情報の取得」をご参照ください。
ステップ 4:クライアント認証の設定
一時的なアクセス認証情報には、AccessKey ID、AccessKey Secret、およびセキュリティトークンが含まれており、これらは一緒に使用する必要があります。
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、必要なディペンデンシーを追加し、次のようにアプリケーションコードを設定します。
Nacos クライアントはバージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートする Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>properties.put(PropertyKeyConst.SERVER_ADDR, "YOUR_MSE_NACOS_INSTANCE_DOMAIN");
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに使用できます。
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "YOUR_TEMP_ACCESSKEY_ID");
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに使用できます。
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "YOUR_TEMP_ACCESSKEY_SECRET");
# ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を代わりに使用できます。
properties.put(ExtensionAuthPropertyKey.SECURITY_TOKEN_KEY.getKey(), "YOUR_TEMP_SECURITY_TOKEN");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba フレームワーク
Spring Cloud Alibaba フレームワークを使用する場合、必要なディペンデンシーを追加し、アプリケーション設定ファイルに次の設定を追加します。
Spring Cloud Alibaba フレームワークはバージョン 2.2.9.RELEASE 以降が必要です。
Nacos クライアントはバージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートする Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>## レジストリ
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに使用できます。
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに使用できます。
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を代わりに使用できます。
spring.cloud.nacos.discovery.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
## 設定センター
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに使用できます。
spring.cloud.nacos.config.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに使用できます。
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を代わりに使用できます。
spring.cloud.nacos.config.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKENDubbo フレームワーク
Dubbo フレームワークを使用する場合、必要なディペンデンシーを追加し、Dubbo 設定ファイルのレジストリ URL に次のパラメーターを追加します。
Nacos クライアントはバージョン 2.1.0 以降が必要です。詳細については、「認証と暗号化/復号をサポートする Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency># ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、および ALIBABA_CLOUD_SECURITY_TOKEN 環境変数を代わりに使用できます。
dubbo.registry.address=nacos://YOUR_MSE_NACOS_INSTANCE_DOMAIN:8848?alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID&alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET&alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKENGo SDK
Go 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
バージョン 2.3.3 以降を推奨します。
// ServerConfig を作成します。
sc := []constant.ServerConfig{
*constant.NewServerConfig("YOUR_MSE_NACOS_INSTANCE_DOMAIN", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecurityToken: "YOUR_TEMP_SECURITY_TOKEN",
}
// ClientConfig を作成します。
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithAccessKey("YOUR_TEMP_ACCESSKEY_ID"),
constant.WithSecretKey("YOUR_TEMP_ACCESSKEY_SECRET"),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアントを作成します。
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアントを作成します。
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)方法 4:認証情報 URI の使用
キーを直接管理することなく外部システムから認証情報を取得するには、認証情報 URI を使用して認証情報プロバイダーを初期化します。Nacos クライアントは、指定された URI から STS トークンを取得するため、AccessKey や STS トークンを手動で管理する必要がありません。
認証情報 URI のバックエンドサービスは、アプリケーションが常に有効な認証情報を使用できるように、STS トークンを自動的に更新する必要があります。
ステップ 1:認証情報 URI レスポンスの検証
Nacos クライアントが STS トークンを正しく解析して使用できるように、認証情報 URI は次の形式でレスポンスを返す必要があります。
レスポンスステータスコード: 200
レスポンスボディ構造:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
ステップ 2:RAM ロールへの権限付与
次のいずれかの システムポリシー をアタッチして、STS トークンを生成する RAM ロールに MSE Nacos へのアクセスを許可します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対して、粗粒度の読み取り/書き込みまたは読み取り専用アクセスを RAM ロールに付与します。詳細な手順については、「RAM ロールの権限管理」をご参照ください。
ポリシー | 説明 |
AliyunMSEFullAccess | MSE の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
AliyunMSEReadOnlyAccess | MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースを表示できます。 |
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
インスタンスにきめ細かい権限を付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタム認可の例」をご参照ください。
ステップ 3:クライアント認証の設定
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、必要な依存関係を追加し、次のようにアプリケーションを設定します。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証、暗号化、および復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# または、ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
properties.put(ExtensionAuthPropertyKey.CREDENTIALS_URI.getKey(), "${credentials-service-uri}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba フレームワーク
Spring Cloud Alibaba フレームワークを使用する場合、必要な依存関係を追加し、アプリケーションの設定ファイルに次のプロパティを追加します。
Spring Cloud Alibaba フレームワークはバージョン 2.2.9.RELEASE 以降である必要があります。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証、暗号化、および復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>## レジストリ
# または、ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
spring.cloud.nacos.discovery.alibabaCloudCredentialsUri=${credentials-service-uri}
## 設定センター
# または、ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
spring.cloud.nacos.config.alibabaCloudCredentialsUri=${credentials-service-uri}Dubbo フレームワーク
Dubbo フレームワークを使用する場合、必要な依存関係を追加し、Dubbo 設定ファイルのレジストリ URL に次のパラメーターを追加します。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証、暗号化、および復号をサポートするNacosクライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency># または、ALIBABA_CLOUD_CREDENTIALS_URI 環境変数を設定します。
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudCredentialsUri=${credentials-service-uri}Go SDK
Go 用 Nacos クライアントを使用する場合、次のようにアプリケーションを設定します。
バージョン 2.3.3 以降を推奨します。
// ServerConfig を作成
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
CredentialsURI: "${credentials-service-uri}",
}
// ClientConfig を作成
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアントを作成
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアントを作成
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)方法 5: RAMRoleARN の使用
アプリケーションが、クロスアカウントアクセスなど、MSE Nacos への委任されたアクセスを必要とする場合、RAMRoleARN を使用して認証情報プロバイダーを初期化します。Nacos クライアントは STS から STS トークンを取得し、有効期限が切れる前に自動的に更新します。また、policy パラメーターを使用して、RAM ロールの権限をさらに制限することもできます。
この方法では、ロールを引き受ける権限を持つ AccessKey が必要です。ベストプラクティスとして、この AccessKey には AssumeRole 権限のみを付与し、引き受けることができるロールを制限してください。詳細については、「AssumeRole - ロールの一時的なセキュリティ認証情報の取得」をご参照ください。
ステップ 1 (オプション): RAM ユーザーと RAM ロールの作成
RAM ユーザーがない場合、または作成する必要がある場合は、「RAM ユーザーの作成」をご参照ください。
RAM ロールがない場合、または Alibaba Cloud アカウントを信頼するロールを作成する必要がある場合は、「Alibaba Cloud アカウント用の RAM ロールの作成」をご参照ください。
ステップ 2: RAM 権限の付与
ステップ 1 の RAM ユーザーに、ロールを引き受ける権限を付与します。詳細については、「AssumeRole - ロールの一時的なセキュリティ認証情報の取得」をご参照ください。
次のいずれかのシステムポリシーをアタッチして、ステップ 1 の RAM ロールに権限を付与します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対して、粗い粒度の読み取り/書き込みまたは読み取り専用アクセスを RAM ロールに付与します。詳細については、「RAM ロールの権限管理」をご参照ください。
ポリシー名 | 説明 |
AliyunMSEFullAccess | MSE の完全な管理権限を付与します。Alibaba Cloud アカウントと同等の権限です。 |
AliyunMSEReadOnlyAccess | Alibaba Cloud アカウント配下のすべての MSE リソースに対する読み取り専用権限を付与します。 |
一度に最大 5 つのポリシーをアタッチできます。さらにアタッチするには、操作を繰り返してください。
インスタンスにきめ細かい権限を付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「設定センターのきめ細かな認証」、および「レジストリと設定センターの一般的なカスタム認可ポリシーの例」をご参照ください。
ステップ 3: クライアント認証の設定
この方法を使用するには、必要な AccessKey と、対象ロールの RAMRoleARN をクライアントに設定します。
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、必要な依存関係を追加し、次のようにアプリケーションコードを設定します。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証と暗号化/復号に対応する Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain-name}");
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "${access-key-id-with-assume-role-permission}");
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "${access-key-secret-with-assume-role-permission}");
# ALIBABA_CLOUD_ROLE_ARN 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.ROLE_ARN.getKey(), "${role-arn-to-assume}");
# ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
## 以下のパラメーターはオプションです。
# ALIBABA_CLOUD_POLICY 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${scoped-down-policy}");
# ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数を代わりに設定できます。
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba
Spring Cloud Alibaba フレームワークを使用する場合、必要な依存関係を追加し、アプリケーションの設定ファイルに次の設定を追加します。
Spring Cloud Alibaba フレームワークはバージョン 2.2.9.RELEASE 以降である必要があります。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証と暗号化/復号に対応する Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>## レジストリ
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# ALIBABA_CLOUD_ROLE_ARN 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudRoleArn=${role-arn-to-assume}
# ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## 設定センター
# ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数を代わりに設定できます。
spring.cloud.nacos.config.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を代わりに設定できます。
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# ALIBABA_CLOUD_ROLE_ARN 環境変数を代わりに設定できます。
spring.cloud.nacos.config.alibabaCloudRoleArn=${role-arn-to-assume}
# ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を代わりに設定できます。
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## 以下のパラメーターはオプションです。
# ALIBABA_CLOUD_POLICY 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudPolicy=${scoped-down-policy}
spring.cloud.nacos.config.alibabaCloudPolicy=${scoped-down-policy}
# ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数を代わりに設定できます。
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}Dubbo
Dubbo フレームワークを使用する場合、必要な依存関係を追加し、Dubbo 設定ファイルのレジストリ URL に次の設定を追加します。
Nacos クライアントはバージョン 2.1.0 以降である必要があります。詳細については、「認証と暗号化/復号に対応する Nacos クライアントバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency># ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET、ALIBABA_CLOUD_ROLE_ARN、および ALIBABA_CLOUD_ROLE_SESSION_NAME 環境変数を代わりに設定できます。
dubbo.registry.address=nacos://${mse-nacos-instance-domain-name}:8848?alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}&alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}&alibabaCloudRoleArn=${role-arn-to-assume}&alibabaCloudRoleSessionName=${custom-role-session-name}
## 以下のパラメーターはオプションであり、URL に追加されます。ALIBABA_CLOUD_POLICY および ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION 環境変数を代わりに設定できます。
&alibabaCloudPolicy=${scoped-down-policy}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}Go SDK
Go 向け Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
バージョン 2.3.3 以降を推奨します。
// ServerConfig を作成します
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain-name}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RoleArn: "${role-arn-to-assume}",
RoleSessionName: "${custom-role-session-name}",
}
// 以下のパラメーターはオプションです。
ramConfig.Policy = "${scoped-down-policy}"
ramConfig.RoleSessionExpiration = "${session-duration-in-seconds}"
// ClientConfig を作成します
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithAccessKey("${access-key-id-with-assume-role-permission}"),
constant.WithSecretKey("${access-key-secret-with-assume-role-permission}"),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアントを作成します
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアントを作成します
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
方法 6: AccessKey の使用
ステップ 1 (オプション): RAM ユーザーの作成
RAM ユーザーを作成する必要がある場合は、「RAM ユーザーの作成」をご参照ください。
ステップ 2: RAM ユーザーへの権限付与
ステップ 1 の RAM ユーザーに、次のいずれかのシステムポリシーをアタッチして権限を付与します。これらのポリシーは、すべての Nacos インスタンスの構成とサービスに対して、粗粒度の読み取り/書き込みまたは読み取り専用の権限を RAM ユーザーに付与します。詳細な手順については、「RAM ユーザー権限の管理」をご参照ください。
ポリシー | 説明 |
AliyunMSEFullAccess | Microservices Engine (MSE) の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
AliyunMSEReadOnlyAccess | MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースに読み取り専用でアクセスできます。 |
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
MSE インスタンスにきめ細かなアクセスを付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「構成センターのきめ細かな認証」、および「マイクロサービスレジストリと構成センターの一般的なカスタム認可ポリシーの例」をご参照ください。
ステップ 3: クライアント認証の設定
AccessKey は、AccessKey ID と AccessKey Secret で構成され、これらはセットで使用する必要があります。Nacos インスタンスの認証を有効にした後、Nacos クライアントで RAM ユーザーの AccessKey ID と AccessKey Secret を指定する必要があります。指定しない場合、クライアントは Nacos インスタンスにアクセスできません。AccessKey を取得するには、「AccessKey の作成」をご参照ください。
Java 用 Nacos クライアント
Java 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
AccessKey を認証に使用するには、サポートされているバージョンにクライアントをアップグレードする必要があります。詳細については、「認証と暗号化をサポートする Nacos クライアントバージョン」をご参照ください。
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-endpoint}");
properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}");
properties.put(PropertyKeyConst.SECRET_KEY, "${secretKey}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba フレームワーク
Spring Cloud Alibaba フレームワークを使用する場合、アプリケーション設定ファイルに次の設定を追加します。
Spring Cloud Alibaba フレームワークは、バージョン 2.2.1.RELEASE 以降が必要です。
## レジストリ
spring.cloud.nacos.discovery.accessKey=${accessKey}
spring.cloud.nacos.discovery.secretKey=${secretKey}
## 構成センター
spring.cloud.nacos.config.accessKey=${accessKey}
spring.cloud.nacos.config.secretKey=${secretKey}Dubbo フレームワーク
Dubbo フレームワークを使用する場合、Dubbo 設定ファイルのレジストリ URL に次のパラメーターを追加します。
dubbo.registry.address=nacos://${mse-nacos-endpoint}:8848?accessKey=${accessKey}&secretKey=${secretKey}Go 用 Nacos クライアント
Go 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
AccessKey を認証に使用するには、サポートされているバージョンにクライアントをアップグレードする必要があります。バージョン 2.3.3 以降を使用してください。詳細については、「認証と暗号化をサポートする Nacos クライアントバージョン」をご参照ください。
cc := constant.ClientConfig{
AccessKey: "${accessKey}",
SecretKey: "${secretKey}",
}
serverConfigs := []constant.ServerConfig{
{
IpAddr: "${mse-nacos-endpoint}",
Port: 8848,
},
}
namingClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: serverConfigs,
},
)
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: serverConfigs,
},
)Python 用 Nacos クライアント
Python 用 Nacos クライアントを使用する場合、次のようにアプリケーションコードを設定します。
AccessKey を認証に使用するには、サポートされているバージョンにクライアントをアップグレードする必要があります。詳細については、「認証と暗号化をサポートする Nacos クライアントバージョン」をご参照ください。
client = nacos.NacosClient("${mse-nacos-endpoint}", ak=${accessKey}, sk=${secretKey})方法 7:自動ローテーションされる AccessKey の使用
アプリケーションが長期的なアクセスを必要とするが、AccessKey ペアに漏洩のリスクがある場合は、ClientKey を使用して 認証情報プロバイダー を初期化します。Key Management Service (KMS) は、管理された RAM ユーザー の AccessKey ペアを定期的に自動でローテーションし、静的な 認証情報 を動的なものに変換します。KMS は オンデマンドローテーション もサポートしており、漏洩した AccessKey ペアを迅速に置き換えることができます。これにより、手動メンテナンスが不要になり、セキュリティリスクと運用上の複雑さが軽減されます。ClientKey を取得するには、「アプリケーションアクセスポイントの作成」をご参照ください。
手順 1:KMS への RAM 認証情報の保存
既存の RAM ユーザー の 認証情報 を、KMS インスタンスに RAM シークレット として保存します。KMS で RAM シークレット を有効にして使用する方法については、「RAM シークレットの管理と使用」をご参照ください。
ステップ 2: RAM ユーザーへの権限付与
ステップ 1 の RAM ユーザーに、次のいずれかのシステムポリシーをアタッチして権限を付与します。これらのポリシーは、すべての Nacos インスタンスの構成とサービスに対して、粗粒度の読み取り/書き込みまたは読み取り専用の権限を RAM ユーザーに付与します。詳細な手順については、「RAM ユーザー権限の管理」をご参照ください。
ポリシー | 説明 |
AliyunMSEFullAccess | Microservices Engine (MSE) の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
AliyunMSEReadOnlyAccess | MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースに読み取り専用でアクセスできます。 |
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
MSE インスタンスにきめ細かなアクセスを付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かな認証」、「構成センターのきめ細かな認証」、および「マイクロサービスレジストリと構成センターの一般的なカスタム認可ポリシーの例」をご参照ください。
手順 3:シークレットマネージャー設定ファイルの作成
secretsmanager.properties という名前の設定ファイルを、プロジェクトのルートディレクトリまたは classpath に作成します。ファイルには、次の内容を含める必要があります。
cache_client_dkms_config_info=[{"regionId":"<your-dkms-region>","endpoint":"<your-dkms-endpoint>","passwordFromFilePath":"<your-password-file-path>","clientKeyFile":"<your-ClientKey-file-path>","ignoreSslCerts":false,"caFilePath":"<your-ca-certificate-file-path>"}]設定ファイル のパラメーターについては、「Secrets Manager Client」をご参照ください。
手順 4:クライアント認証の設定
Java 用 Nacos Client
Java 用 Nacos Client を使用する場合は、必要な 依存関係 を追加し、アプリケーションコードを次のように設定します。
Nacos Client のバージョンは 2.1.0 以降が必要です。詳細については、「認証とデータ暗号化をサポートする Nacos Client のバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# これは ALIBABA_CLOUD_SECRET_NAME 環境変数で置き換えることができます。
properties.put(ExtensionAuthPropertyKey.SECRET_NAME.getKey(), "${name-of-the-ram-secret}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);Spring Cloud Alibaba
Spring Cloud Alibaba を使用する場合は、必要な 依存関係 を追加し、アプリケーションの 設定ファイル に次の設定を追加します。
Spring Cloud Alibaba のバージョンは 2.2.9.RELEASE 以降が必要です。
Nacos Client のバージョンは 2.1.0 以降が必要です。詳細については、「認証とデータ暗号化をサポートする Nacos Client のバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency>## レジストリ
# これは ALIBABA_CLOUD_SECRET_NAME 環境変数で置き換えることができます。
spring.cloud.nacos.discovery.alibabaCloudSecretName=${name-of-the-ram-secret}
## 設定センター
# これは ALIBABA_CLOUD_SECRET_NAME 環境変数で置き換えることができます。
spring.cloud.nacos.config.alibabaCloudSecretName=${name-of-the-ram-secret}Dubbo
Dubbo を使用する場合は、必要な 依存関係 を追加し、Dubbo 設定ファイル のレジストリ URL に次のパラメーターを追加します。
Nacos Client のバージョンは 2.1.0 以降が必要です。詳細については、「認証とデータ暗号化をサポートする Nacos Client のバージョン」をご参照ください。
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- バージョン 1.0.5 以降が必要です。 -->
<version>1.0.5</version>
</dependency># これは ALIBABA_CLOUD_SECRET_NAME 環境変数で置き換えることができます。
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudSecretName=${name-of-the-ram-secret}Go SDK
Go 用の Nacos Client を使用する場合は、アプリケーションコードを次のように設定します。
バージョン 2.3.3 以降を推奨します。
// ServerConfig を作成します
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecretName: "${name-of-the-ram-secret}",
}
// ClientConfig を作成します
cc := *constant.NewClientConfig(
constant.WithNamespaceId(""),
constant.WithTimeoutMs(5000),
constant.WithNotLoadCacheAtStart(true),
constant.WithLogDir("/tmp/nacos/log"),
constant.WithCacheDir("/tmp/nacos/cache"),
constant.WithRamConfig(&ramConfig),
)
// 設定クライアントを作成します
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// ネーミングクライアントを作成します
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)関連ドキュメント
インターネット経由で MSE Nacos インスタンスにアクセスするには、「ホワイトリストの設定」をご参照ください。
きめ細かい認証を設定するには、「レジストリのきめ細かい認証」および「設定センターのきめ細かい認証」をご参照ください。
MSE コンソールの権限を付与するには、「レジストリと設定センターの権限付与」をご参照ください。
Nacos SDK の制限事項については、「MSE 用 Nacos SDK バージョンガイド」をご参照ください。
Nacos に関するご質問は、「Nacos のよくある質問」をご参照ください。
よくある質問
Q: MSE Nacos は、ユーザー名とパスワード (例: nacos/nacos) によるクライアント認証をサポートしていますか?
いいえ。MSE Nacos の RAM 認証を有効にすると、従来の Nacos 組み込みのユーザー名/パスワードによる認証方法はサポートされなくなります。この 2 つの認証メカニズムは互いに排他的です。
クライアントアプリケーションに spring.cloud.nacos.username と spring.cloud.nacos.password が設定されている場合、Nacos サーバーはこれらのリクエストを破棄し、Read timed out エラーや接続失敗の原因となります。ネットワーク接続が正常であっても、リクエストは拒否されます。
正しいアプローチ:クライアント設定でユーザー名とパスワードのフィールドを削除するか、空のままにして、AccessKey/SecretKey や ECS RAM ロールなど、サポートされている RAM 認証情報メソッドのいずれかに切り替えてください。認証情報の設定方法の詳細については、「クライアント認証情報の設定」をご参照ください。
関連検索キーワード:アプリケーション接続パスワードの設定、Nacos パスワードを元の nacos にリセット、KMS が接続問題を引き起こす。
Q: Nacos クライアントから NacosException: Forbidden/no right または accessKeyId can't be null というエラーが報告されます。どのようにトラブルシューティングすればよいですか?
特定のエラーに基づいてトラブルシューティングを行ってください:
シナリオ 1: Forbidden/no right エラー
原因:クライアント認証の設定が要件を満たしていません。ネットワーク接続が正常であっても、SDK のバージョンや認証パラメーターが正しくないと、このエラーが表示されます。
解決策:
Nacos クライアント SDK を互換バージョンにアップグレードしたことを確認してください。必要なクライアントのバージョンについては、このトピック内の各認証情報設定方法のバージョン要件をご参照ください。
このトピックの指示に従って、必要なすべての認証パラメーター (例: AccessKey ID、 AccessKey Secret、または RAM ロール名) が正しく設定されていることを確認してください。
シナリオ 2: ACK クラスターで ECS RAM ロールを使用する際の accessKeyId can't be null エラー
このエラーは、ECS RAM ロールの認証情報が取得できないことを示します。次の順序でトラブルシューティングを行ってください:
VPC ネットワーク接続の確認: Pod がポート 8848 で MSE インスタンスに到達できることを確認してください。Pod 内から次のコマンドを実行してください:
telnet <MSE Nacos instance domain> 8848RAM ロールのバインドの検証: Pod 内で次のコマンドを実行して、メタデータサービスがロール名を返すこと (404 エラーではないこと) を確認してください:
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/コマンドが 404 エラーまたは空のレスポンスを返す場合、RAM ロールが ECS インスタンスまたは ACK クラスターのワーカーノードに正しくバインドされていません。
RAM ロールのアクセス権限の確認: RAM ロールに必要な MSE アクセス権限 (AliyunMSEFullAccess や AliyunMSEReadOnlyAccess など) が付与されていることを確認してください。権限の付与方法の詳細については、このトピックの「方法 1:RAM ロールを使用した認証」をご参照ください。
一時的な検証:上記の手順を完了しても ECS RAM ロール方式でエラーが報告され続ける場合は、一時的に AK/SK 方式に切り替えて接続を確認してください。AK/SK 方式が成功した場合、問題は RAM ロールの設定 (例: ロールのバインドやメタデータサービスのアクセシビリティ) に固有のものです。