Microservices Engine (MSE) の 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 コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。
-
左側のナビゲーションウィンドウで、マイクロサービスの登録 > インスタンス を選択します。
-
インスタンス ページで、インスタンスの名前をクリックします。
-
左側のナビゲーションウィンドウで [パラメータ設定] をクリックします。パラメータ設定ページで、編集 をクリックします。
-
ConfigAuthEnabled または NamingAuthEnabled パラメーターを選択し、パラメーターの Value 列で Yes をクリックし、Save and Restart Instance をクリックします。
重要-
設定センターまたはレジストリの認証を有効にする前に、クライアントでアクセス認証情報を設定する必要があります。そうしないと、クライアントは設定やサービスを取得できません。詳細については、「クライアントでのアクセス認証情報の設定」をご参照ください。
-
これら 2 つのパラメーターは互いに独立して機能し、それぞれが対応するモジュールを制御します。
パラメーター
説明
ConfigAuthEnabled
設定センターの認証を有効にします。Basic Edition V1.2.1 以降、および Professional Edition と Developer Edition のすべてのバージョンでサポートされています。
NamingAuthEnabled
レジストリの認証を有効にします。Professional Edition または Developer Edition V2.0.4 以降のインスタンスでサポートされています。
-
クライアント認証情報の設定
MSE Nacos は、いくつかの認証情報初期化メソッドをサポートしています。ご利用のシナリオに最も適したものを選択してください。
|
初期化メソッド |
シナリオ |
前提条件 |
基盤となる認証情報 |
有効性 |
ローテーションと更新 |
|
Elastic Compute Service (ECS) インスタンス、Elastic Container Instance (ECI) インスタンス、または Container Service for Kubernetes (ACK) のワーカーノードなど、Alibaba Cloud の計算リソースにデプロイされたアプリケーション。 |
なし |
STS トークン |
一時的 |
自動更新 |
|
|
Container Service for Kubernetes (ACK) のワーカーノードにデプロイされた信頼できないアプリケーション。 |
なし |
STS トークン |
一時的 |
自動更新 |
|
|
認証情報の有効期間とアクセス権限の制御が必要な、信頼できない環境のアプリケーション。 |
はい |
STS トークン |
一時的 |
手動更新 |
|
|
外部システムから認証情報を取得するアプリケーション。 |
なし |
STS トークン |
一時的 |
自動更新 |
|
|
クロスアカウントアクセスなど、クラウドサービスへの委任アクセスが必要なアプリケーション。 |
はい |
STS トークン |
一時的 |
自動更新 |
|
|
頻繁な認証情報ローテーションなしでクラウドサービスへの長期アクセスが必要な、安全な環境のアプリケーション。 |
はい |
Access Key (AK) |
長期的 |
手動ローテーション |
|
|
Access Key (AK) の漏洩リスクがある環境で、クラウドサービスへの長期アクセスに頻繁な認証情報ローテーションが必要なアプリケーション。 |
なし |
Access Key (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:クライアント認証の設定
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、アプリケーションコードを次のように設定します。
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
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
バージョン 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:OIDCRoleARN の使用
Container Service for Kubernetes (ACK) のワーカーノードに RAM ロールが設定されている場合 (方法 1 で説明)、そのノード上の Pod はメタデータサーバーから STS トークンを取得できます。しかし、クラスターが信頼できないアプリケーションをホストしている場合、それらのアプリケーションがメタデータサーバーにアクセスしてワーカーノードの STS トークンを取得することを望まないかもしれません。
Pod レベルでの最小権限を強制するには、RRSA (RAM Roles for Service Account) 機能を使用します。ACK クラスターは、各 Pod にサービスアカウントの OIDC トークンファイルをマウントし、設定を環境変数に注入します。Nacos クライアントはこれらの変数を読み取り、STS の AssumeRoleWithOIDC 操作を呼び出して、OIDC トークンを指定された RAM ロールにバインドされた STS トークンと交換します。AccessKey ペアや手動での 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 機能が提供します。
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、アプリケーションコードを次のように設定します。
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 フレームワーク
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>## レジストリ
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 フレームワーク
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_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
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
バージョン 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 = ${session-duration-in-seconds}
// 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,
},
)
方法 3:STS トークンの使用
アプリケーションが MSE Nacos インスタンスへの一時的なアクセスを必要とする場合は、Security Token Service (STS) からの一時的な認証情報を使用します。これらの認証情報は、AccessKey ID、AccessKey Secret、およびセキュリティトークンで構成されます。
この方法では STS トークンを手動で維持する必要があり、メンテナンスの複雑さが増します。アプリケーションが繰り返し一時的なアクセスを必要とする場合は、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、およびセキュリティトークンが含まれており、これらは一緒に使用する必要があります。
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、必要な依存関係を追加し、アプリケーションコードを次のように設定します。
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_TOKEN
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_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_TOKEN
Go SDK
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
バージョン 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:クライアント認証の設定
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、必要な依存関係を追加し、アプリケーションを次のように設定します。
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
Nacos Go クライアントを使用する場合は、アプリケーションを次のように設定します。
バージョン 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 アカウントを信頼する RAM ロールを作成する必要がある場合は、「Alibaba Cloud アカウント用の RAM ロールの作成」をご参照ください。
ステップ 2:RAM 権限の付与
-
ステップ 1 の RAM ユーザーにロールを引き受ける権限を付与します。詳細については、「AssumeRole - ロールの一時的なセキュリティ認証情報の取得」をご参照ください。
-
ステップ 1 の RAM ロールに、以下のシステムポリシーのいずれかをアタッチして権限を付与します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対する粗粒度の読み書きまたは読み取り専用アクセスを RAM ロールに付与します。詳細については、「RAM ロールの権限管理」をご参照ください。
|
ポリシー名 |
説明 |
|
AliyunMSEFullAccess |
Alibaba Cloud アカウントの権限と同等の、MSE の完全な管理権限を付与します。 |
|
AliyunMSEReadOnlyAccess |
Alibaba Cloud アカウント配下のすべての MSE リソースに対する読み取り専用権限を付与します。 |
-
一度に最大 5 つのポリシーをアタッチできます。さらにアタッチするには、操作を繰り返してください。
-
インスタンスにきめ細かい権限を付与するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かい認証」、「設定センターのきめ細かい認証」、および「レジストリと設定センターの一般的なカスタム権限付与ポリシーの例」をご参照ください。
ステップ 3:クライアント認証の設定
この方法を使用するには、クライアントに必要な AccessKey と対象ロールの RAMRoleARN を設定します。
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、必要な依存関係を追加し、アプリケーションコードを次のように設定します。
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
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
バージョン 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 ユーザーの作成」をご参照ください。既存の AccessKey を管理またはリセットする必要がある場合は、RAM コンソールに移動してください。
ステップ 2:RAM ユーザーへの権限付与
ステップ 1 の RAM ユーザーに、以下のシステムポリシーのいずれかをアタッチして権限を付与します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対する粗粒度の読み書きまたは読み取り専用権限を RAM ユーザーに付与します。詳細な手順については、「RAM ユーザーの権限管理」をご参照ください。
|
ポリシー |
説明 |
|
AliyunMSEFullAccess |
MSE の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
|
AliyunMSEReadOnlyAccess |
MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースへの読み取り専用アクセス権を持ちます。 |
-
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
-
MSE インスタンスへのきめ細かいアクセスを許可するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かい認証」、「設定センターのきめ細かい認証」、および「マイクロサービスレジストリと設定センターの一般的なカスタム権限付与ポリシーの例」をご参照ください。
ステップ 3:クライアント認証の設定
AccessKey ペアは、AccessKey ID と AccessKey Secret で構成され、これらは一緒に使用する必要があります。Nacos インスタンスの認証を有効にした後、Nacos クライアントで RAM ユーザーの AccessKey ペアを提供する必要があります。そうしないと、クライアントはインスタンスにアクセスできません。AccessKey ペアを取得するには、「AccessKey の作成」をご参照ください。
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、アプリケーションコードを次のように設定します。
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}
Nacos Go クライアント
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
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: &clientConfig,
ServerConfigs: serverConfigs,
},
)
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
Nacos Python クライアント
Nacos Python クライアントを使用する場合は、アプリケーションコードを次のように設定します。
AccessKey を認証に使用するには、クライアントをサポートされているバージョンにアップグレードする必要があります。詳細については、「認証と暗号化をサポートする Nacos クライアントのバージョン」をご参照ください。
client = nacos.NacosClient("${mse-nacos-endpoint}", ak=${accessKey}, sk=${secretKey})
Nacos 3.x インスタンスの場合、オープンソースコンソールを通じてパスワードをリセットできます。詳細については、「Nacos オープンソースコンソール」をご参照ください。
方法 7:自動ローテーションされる AccessKey の使用
アプリケーションが長期的なアクセスを必要とするが、AccessKey ペアが漏洩するリスクがある場合は、Key Management Service (KMS) と ClientKey を使用します。KMS は、管理対象の RAM ユーザーの AccessKey ペアを定期的に自動でローテーションし、静的な認証情報を動的なものに変えます。KMS はオンデマンドのローテーションもサポートしており、漏洩した AccessKey ペアを迅速に交換できます。これにより、手動でのメンテナンスが不要になり、セキュリティリスクと運用オーバーヘッドが削減されます。ClientKey を取得するには、「アプリケーションアクセスポイントの作成」をご参照ください。
ステップ 1:KMS に RAM 認証情報を保存
既存の RAM ユーザーの認証情報を、KMS インスタンスに RAM シークレットとして保存します。KMS で RAM シークレットを有効にして使用する方法の詳細については、「RAM シークレットの管理と使用」をご参照ください。
ステップ 2:RAM ユーザーへの権限付与
ステップ 1 の RAM ユーザーに、以下のシステムポリシーのいずれかをアタッチして権限を付与します。これらのポリシーは、すべての Nacos インスタンスの設定とサービスに対する粗粒度の読み書きまたは読み取り専用権限を RAM ユーザーに付与します。詳細な手順については、「RAM ユーザーの権限管理」をご参照ください。
|
ポリシー |
説明 |
|
AliyunMSEFullAccess |
MSE の完全な管理権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウントと同じ操作権限を持ちます。 |
|
AliyunMSEReadOnlyAccess |
MSE の読み取り専用権限を付与します。このポリシーを持つ RAM ユーザーは、Alibaba Cloud アカウント配下のすべての MSE リソースへの読み取り専用アクセス権を持ちます。 |
-
一度に最大 5 つのポリシーをアタッチできます。さらにポリシーをアタッチするには、操作を繰り返してください。
-
MSE インスタンスへのきめ細かいアクセスを許可するには、カスタムポリシーを作成します。詳細については、「レジストリのきめ細かい認証」、「設定センターのきめ細かい認証」、および「マイクロサービスレジストリと設定センターの一般的なカスタム権限付与ポリシーの例」をご参照ください。
ステップ 3:Secrets Manager 設定ファイルの作成
プロジェクトのルートディレクトリまたは classpath に secretsmanager.properties という名前の設定ファイルを作成します。ファイルには次の内容を含める必要があります:
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 クライアント」をご参照ください。
ステップ 4:クライアント認証の設定
Nacos Java クライアント
Nacos Java クライアントを使用する場合は、必要な依存関係を追加し、アプリケーションコードを次のように設定します。
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_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 クライアントのバージョンは 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_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 クライアントのバージョンは 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_SECRET_NAME 環境変数で置き換え可能です。
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudSecretName=${name-of-the-ram-secret}
Go SDK
Nacos Go クライアントを使用する場合は、アプリケーションコードを次のように設定します。
バージョン 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 認証を有効にすると、組み込みのユーザー名/パスワード認証はサポートされなくなります。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 Client SDK を互換性のあるバージョンにアップグレードしたことを確認します。必要なクライアントバージョンについては、このトピックの各認証情報設定方法のバージョン要件をご参照ください。
-
このトピックの指示に従って、必要なすべての認証パラメーター (例:AccessKey ID、AccessKey Secret、または RAM ロール名) を正しく設定したことを確認します。
シナリオ 2:ECS RAM ロールを使用する ACK クラスターでの accessKeyId can't be null エラー
このエラーは、ECS RAM ロールの認証情報が取得できないことを示します。次の順序でトラブルシューティングしてください:
-
VPC ネットワーク接続の確認:Pod がポート 8848 で MSE インスタンスに到達できることを確認します。Pod 内から次のコマンドを実行します:
telnet <MSE Nacos instance domain> 8848 -
RAM ロールのバインディングの確認:Pod 内で次のコマンドを実行して、メタデータサービスがロール名を返すこと (404 エラーではないこと) を確認します:
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/コマンドが 404 エラーまたは空の応答を返す場合、RAM ロールが ECS インスタンスまたは ACK クラスターのワーカーノードに正しくバインドされていません。
-
RAM ロールの権限の確認:RAM ロールに、AliyunMSEFullAccess や AliyunMSEReadOnlyAccess などの必要な MSE アクセス権限が付与されていることを確認します。権限の付与方法については、このトピックの「方法 1:RAM ロールによる認証」の権限付与手順をご参照ください。
一時的な検証:上記の手順を完了しても ECS RAM ロール方式でエラーが報告され続ける場合は、一時的に AccessKey/SecretKey 方式に切り替えて接続を確認します。AK/SK 方式が成功した場合、問題は RAM ロールの設定 (例:ロールのバインディングやメタデータサービスのアクセシビリティ) に特有のものです。