Ative a autenticação em instâncias Nacos no Microservices Engine (MSE) para impedir acessos não autorizados ou modificações nos dados da instância. Este tópico descreve como ativar a autenticação e configurar as credenciais do cliente.
Pré-requisitos
Métodos de acesso
A autenticação utiliza o método de conexão direta ao mecanismo. Após a autorização, o cliente Nacos pode acessar a instância MSE Nacos com um usuário RAM ou uma função RAM.
Conexão direta ao mecanismo: Acesse o mecanismo Nacos diretamente com um SDK ou cliente. Este método destina-se a acesso programático.
Conexão ao mecanismo via console: Gerencie e monitore o mecanismo Nacos no console MSE. Para obter detalhes sobre como conceder acesso ao console MSE a um usuário RAM, consulte Autorização do registro e centro de configuração.
Ativar autenticação
Por padrão, a autenticação vem desativada em novos mecanismos Nacos, que respondem a todas as solicitações.
O recurso de login do console Nacos open source apenas registra informações do usuário, sem autenticar nem interceptar solicitações. Após ativar a autenticação para uma instância Nacos, você não poderá mais acessá-la pelo console Nacos open source; use o console MSE.
Para o Nacos 2.x e certas versões posteriores que não suportam modificação de senha no console: após ativar a autenticação, não é possível redefinir ou modificar a senha do Nacos pelo console MSE. Use AccessKey (AK) e SecretKey (SK) para configurar a autenticação do cliente. Para mais informações, consulte Método 6: Usar um AccessKey neste tópico.
Faça login no console MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha Microservices Registry > Instances.
Na página Instances, clique em nome da instância.
No painel de navegação à esquerda, clique em parameter settings. Na página de configurações de parâmetros, clique em Edit.
-
Selecione o parâmetro ConfigAuthEnabled ou NamingAuthEnabled, clique em Yes na coluna Value do parâmetro e, em seguida, clique em Save and Restart Instance.
ImportanteAntes de ativar a autenticação para o centro de configuração ou registro, configure as credenciais de acesso no cliente. Caso contrário, o cliente não conseguirá obter configurações ou serviços. Para mais informações, consulte Configurar credenciais de acesso no cliente.
Esses dois parâmetros funcionam independentemente, e cada um controla seu respectivo módulo.
Parâmetro
Descrição
ConfigAuthEnabled
Ativa a autenticação para o centro de configuração. Suportado por instâncias Basic Edition V1.2.1 e posteriores, além de todas as versões Professional Edition e Developer Edition.
NamingAuthEnabled
Ativa a autenticação para o registro. Suportado por instâncias Professional Edition ou Developer Edition V2.0.4 e posteriores.
Configurar credenciais do cliente
O MSE Nacos suporta vários métodos de inicialização de credenciais. Escolha o mais adequado ao seu cenário.
|
Método de inicialização |
Cenário |
Pré-requisito |
Credencial subjacente |
Validade |
Rotação e atualização |
|
Aplicações implantadas em recursos de computação da Alibaba Cloud, como instâncias Elastic Compute Service (ECS), instâncias Elastic Container Instance (ECI) ou nós de trabalho no Container Service for Kubernetes (ACK). |
Não |
Token STS |
Temporária |
Atualização automática |
|
|
Aplicações não confiáveis implantadas em nós de trabalho no Container Service for Kubernetes (ACK). |
Não |
Token STS |
Temporária |
Atualização automática |
|
|
Aplicações em ambientes não confiáveis que exigem controle sobre a validade das credenciais e permissões de acesso. |
Sim |
Token STS |
Temporária |
Atualização manual |
|
|
Aplicações que obtêm credenciais de um sistema externo. |
Não |
Token STS |
Temporária |
Atualização automática |
|
|
Aplicações que requerem acesso delegado a serviços cloud, como acesso entre contas. |
Sim |
Token STS |
Temporária |
Atualização automática |
|
|
Aplicações em ambientes seguros que exigem acesso de longo prazo a serviços cloud sem rotação frequente de credenciais. |
Sim |
Access Key (AK) |
Longo prazo |
Rotação manual |
|
|
Aplicações em ambientes com risco de comprometimento do Access Key (AK), exigindo rotação frequente de credenciais para acesso de longo prazo a serviços cloud. |
Não |
Access Key (AK) |
Longo prazo |
Rotação automática |
Método 1: Autenticar com uma função RAM
Associe uma função RAM a uma instância ECS ou a um cluster ACK para conceder acesso da sua aplicação ao MSE. A aplicação se autentica fornecendo o nome da função RAM ao cliente Nacos, eliminando a necessidade de credenciais AccessKey estáticas. Defina diferentes funções e políticas para um controle de acesso granular. Para mais informações, consulte Funções RAM para instâncias ECS, Visão geral da autorização e Visão geral das funções RAM.
Para usar uma função RAM na autenticação, implante sua aplicação em uma instância ECS da Alibaba Cloud ou em um cluster ACK dentro de uma VPC. Para mais informações, consulte O que é o ECS?, O que é o ACK? e O que é VPC?.
Etapa 1: Crie uma função RAM e configure políticas
Conceder acesso ao MSE para uma instância ECS
(Opcional) Crie uma função RAM que utilize um service da Alibaba Cloud como entidade confiável. Para mais informações, consulte Crie uma função RAM para um service da Alibaba Cloud.
-
Conceda permissões à função RAM anexando uma das seguintes políticas de sistema. Essas políticas fornecem acesso de leitura/gravação ou somente leitura de granularidade grossa para todas as configurações e serviços das instâncias Nacos. Para mais informações, consulte Conceder permissões a uma função RAM.
Nome da política
Descrição
AliyunMSEFullAccess
Concede permissões completas de gerenciamento do MSE. Um usuário RAM com esta política possui as mesmas permissões operacionais que uma conta Alibaba Cloud.
AliyunMSEReadOnlyAccess
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política pode visualizar todos os recursos do MSE sob a conta Alibaba Cloud.
NotaÉ possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder permissões refinadas a uma instância, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para centros de configuração e Exemplos de políticas personalizadas comuns para registros e centros de configuração.
Faça login no console ECS. No painel de navegação à esquerda, escolha Instances & Images > Instance.
-
No canto superior esquerdo da página, selecione a região e o grupo de recursos desejados.
Por exemplo, selecione um grupo de recursos na lista suspensa All Resources e uma região, como China (Hangzhou), no seletor de regiões.
Localize a instância ECS que deseja gerenciar e escolha
> Instance Settings > Attach/Detach RAM Role.Na caixa de diálogo, selecione a função RAM da instância criada e clique em OK.
Conceder permissões a uma função RAM de trabalhador do ACK
Ao criar um cluster ACK, uma função RAM de trabalhador é criada automaticamente. Conceda permissões diretamente a essa função sem precisar criar uma nova.
-
Crie uma política personalizada. Para mais informações, consulte Crie uma política personalizada.
-
Para conceder permissões completas de gerenciamento do MSE:
{ "Action": "mse:*", "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } } -
Para conceder permissões de somente leitura para o MSE:
{ "Action": [ "mse:Query*", "mse:List*", "mse:Get*" ], "Resource": "*", "Effect": "Allow" }, { "Action": "ram:CreateServiceLinkedRole", "Resource": "*", "Effect": "Allow", "Condition": { "StringEquals": { "ram:ServiceName": "mse.aliyuncs.com" } } }
NotaPara conceder permissões refinadas para uma instância MSE específica, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para centros de configuração e Exemplos de políticas personalizadas comuns para registros e centros de configuração.
-
Anexe a política personalizada à função RAM de trabalhador do cluster. Para mais informações, consulte Conceder permissões à função RAM de trabalhador do cluster.
Etapa 2: Configure a autenticação do cliente
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, configure o código da aplicação conforme abaixo.
Para usar uma função RAM na autenticação, atualize seu cliente para uma versão suportada. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
properties.put(PropertyKeyConst.RAM_ROLE_NAME, "${roleName}");
// Registry
NamingService naming = NamingFactory.createNamingService(properties);
// Configuration center
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a seguinte configuração ao arquivo de configuração da sua aplicação.
Atualize o framework Spring Cloud Alibaba para a versão 2.2.9.RELEASE ou posterior.
Atualize o cliente Nacos para a versão 2.2.0 ou posterior.
## Registry
spring.cloud.nacos.discovery.ramRoleName=${roleName}
## Configuration center
spring.cloud.nacos.config.ramRoleName=${roleName}
Framework Dubbo
Se utilizar o framework Dubbo, adicione o seguinte parâmetro à URL do registro no arquivo de configuração do Dubbo.
Atualize o cliente Nacos para a versão 2.2.0 ou posterior.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?ramRoleName=${roleName}
Go SDK
Se utilizar o cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Recomenda-se a versão 2.3.3 ou posterior.
// Create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RamRoleName: "${roleName}",
}
// Create 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),
)
// Create a config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// Create a naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Método 2: Usar OIDCRoleARN
Quando uma função RAM é configurada para um nó de trabalhador no Container Service for Kubernetes (ACK) (conforme descrito no Método 1), os pods nesse nó podem obter um token STS do servidor de metadados. No entanto, se o seu cluster hospeda aplicações não confiáveis, talvez você não queira que elas acessem o servidor de metadados e recuperem o token STS do nó de trabalhador.
Para impor permissões de menor privilégio no nível do pod, use o recurso RRSA (RAM Roles for Service Account). O cluster ACK monta um arquivo de token OIDC da conta de service para cada pod e injeta a configuração nas variáveis de ambiente. O cliente Nacos lê essas variáveis e chama a operação STS AssumeRoleWithOIDC, trocando o token OIDC por um token STS vinculado à função RAM especificada. Não é necessário nenhum par de AccessKey ou gerenciamento manual de tokens STS.
Etapa 1: Ative RRSA para o cluster ACK
Para ativar o recurso RRSA no seu cluster ACK, consulte Usar RRSA para conceder permissões RAM a contas de service para controle de acesso no nível do pod.
Etapa 2: Conceder permissões à função RAM
Conceda à função RAM da Etapa 1 (por exemplo, demo-role-for-rrsa em Usar RRSA para conceder permissões RAM a contas de service para controle de acesso no nível do pod) acesso ao MSE Nacos anexando uma das seguintes políticas de sistema. Essas políticas concedem à função RAM permissões de leitura/gravação ou somente leitura de granularidade grossa nas configurações e serviços de todas as instâncias Nacos. Para instruções detalhadas, consulte Gerencie permissões para uma função RAM.
|
Nome da política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas de gerenciamento do MSE. Um usuário RAM com esta política possui as mesmas permissões que uma conta Alibaba Cloud para realizar todas as operações. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política pode visualizar todos os recursos do MSE sob a conta Alibaba Cloud. |
É possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder permissões de acesso refinadas ao MSE para uma instância, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para centros de configuração e Exemplos de políticas personalizadas comuns para registros e centros de configuração.
Etapa 3: Configure a autenticação do cliente
Com este método, basta configurar o RoleSessionName. O recurso RRSA do ACK fornece outras credenciais temporárias por meio de variáveis de ambiente injetadas.
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, configure o código da aplicação conforme abaixo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
## The following parameters are optional.
# This can be replaced by the ALIBABA_CLOUD_POLICY environment variable.
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${policy-with-limited-permissions}");
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a dependência necessária e a seguinte configuração ao arquivo de configuração da sua aplicação.
Atualize o framework Spring Cloud Alibaba para a versão 2.2.9.RELEASE ou posterior.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## registry
spring.cloud.nacos.discovery.server-addr=${nacos-server-address}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## configuration center
spring.cloud.nacos.config.server-addr=${nacos-server-address}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## The following parameters are optional.
# This can be replaced by the ALIBABA_CLOUD_POLICY environment variable.
spring.cloud.nacos.discovery.alibabaCloudPolicy=${policy-with-limited-permissions}
spring.cloud.nacos.config.alibabaCloudPolicy=${policy-with-limited-permissions}
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Framework Dubbo
Se utilizar o framework Dubbo, adicione a dependência necessária e os seguintes parâmetros à URL do registro no arquivo de configuração do Dubbo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# This can be replaced by the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudRoleSessionName=${custom-role-session-name}
## The following optional parameters are appended to the URL and can be replaced by the ALIBABA_CLOUD_POLICY and ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variables.
&alibabaCloudPolicy=${policy-with-limited-permissions}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Go SDK
Se utilizar o cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Use a versão 2.3.3 ou posterior.
// Create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
RoleSessionName: "${custom-role-session-name}",
}
// The following parameters are optional.
ramConfig.Policy = "${policy-with-limited-permissions}"
ramConfig.RoleSessionExpiration = ${session-duration-in-seconds}
// Create 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),
)
// Create a config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
// Create a naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Método 3: Usar um token STS
Se sua aplicação exigir acesso temporário a uma instância MSE Nacos, use credenciais temporárias do Security Token Service (STS). Essas credenciais consistem em um AccessKey ID, um AccessKey Secret e um token de segurança.
Este método exige manutenção manual de um token STS, o que aumenta a complexidade de manutenção. Se sua aplicação exigir acesso temporário repetido, atualize manualmente o token STS antes que ele expire.
Etapa 1 (Opcional): Crie um usuário RAM e uma função RAM
Se precisar criar um usuário RAM, consulte Crie um usuário RAM.
Se precisar criar uma função RAM com uma conta Alibaba Cloud como entidade confiável, consulte Crie uma função RAM para uma conta Alibaba Cloud.
Etapa 2: Conceder permissões
Conceda ao usuário RAM da Etapa 1 permissão para assumir funções. Para mais informações, consulte AssumeRole - Obter credenciais de acesso temporárias para uma função.
Conceda permissões à função RAM da Etapa 1 anexando uma das seguintes políticas de sistema. Essas políticas concedem à função RAM acesso de leitura/gravação ou somente leitura de granularidade grossa às configurações e serviços de todas as instâncias Nacos. Para mais informações, consulte Gerencie permissões para uma função RAM.
|
Nome da política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas para gerenciar o MSE. Um usuário RAM com esta política possui as mesmas permissões operacionais que uma conta Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política tem acesso de somente leitura a todos os recursos sob a conta Alibaba Cloud. |
É possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder permissões refinadas a uma instância, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para o centro de configuração e Exemplos de políticas personalizadas comuns para registros e centros de configuração.
Etapa 3: Obter um token STS
Obtenha as credenciais de acesso temporárias (token STS) para a função RAM da Etapa 1. Para mais informações, consulte AssumeRole - Obter credenciais de acesso temporárias para uma função.
Etapa 4: Configure a autenticação do cliente
As credenciais de acesso temporárias incluem um AccessKey ID, um AccessKey Secret e um token de segurança, que devem ser usados em conjunto.
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, adicione a dependência necessária e configure o código da aplicação conforme abaixo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "YOUR_MSE_NACOS_INSTANCE_DOMAIN");
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "YOUR_TEMP_ACCESSKEY_ID");
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "YOUR_TEMP_ACCESSKEY_SECRET");
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
properties.put(ExtensionAuthPropertyKey.SECURITY_TOKEN_KEY.getKey(), "YOUR_TEMP_SECURITY_TOKEN");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a dependência necessária e a seguinte configuração ao arquivo de configuração da sua aplicação.
O framework Spring Cloud Alibaba deve ser da versão 2.2.9.RELEASE ou posterior.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
## Configuration center
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeyId=YOUR_TEMP_ACCESSKEY_ID
# You can use the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=YOUR_TEMP_ACCESSKEY_SECRET
# You can use the ALIBABA_CLOUD_SECURITY_TOKEN environment variable instead.
spring.cloud.nacos.config.alibabaCloudSecurityToken=YOUR_TEMP_SECURITY_TOKEN
Framework Dubbo
Se utilizar o framework Dubbo, adicione a dependência necessária e os seguintes parâmetros à URL do registro no arquivo de configuração do Dubbo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# You can use the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, and ALIBABA_CLOUD_SECURITY_TOKEN environment variables instead.
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
Se utilizar o cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Recomenda-se a versão 2.3.3 ou posterior.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("YOUR_MSE_NACOS_INSTANCE_DOMAIN", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecurityToken: "YOUR_TEMP_SECURITY_TOKEN",
}
//create 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),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Método 4: Usar um URI de credenciais
Para obter credenciais de um sistema externo sem gerenciar chaves diretamente, use um URI de credenciais. O cliente Nacos recupera um token STS do URI especificado, eliminando a necessidade de manter manualmente um AccessKey ou token STS.
O service de backend para o URI de credenciais deve atualizar automaticamente o token STS para garantir que sua aplicação sempre use uma credencial válida.
Etapa 1: Verifique a resposta do URI de credenciais
O URI de credenciais deve retornar uma resposta no seguinte formato para que o cliente Nacos analise e use corretamente o token STS:
Código de status da resposta: 200
-
Estrutura do corpo da resposta:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
Etapa 2: Conceder permissões à função RAM
Conceda à função RAM que gera tokens STS acesso ao MSE Nacos anexando uma das seguintes políticas de sistema. Essas políticas concedem à função RAM acesso de leitura/gravação ou somente leitura de granularidade grossa a todas as configurações e serviços das instâncias Nacos. Para instruções detalhadas, consulte Gerencie permissões para uma função RAM.
|
Política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas de gerenciamento do MSE. Um usuário RAM com esta política possui as mesmas permissões operacionais que uma conta Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política pode visualizar todos os recursos do MSE sob a conta Alibaba Cloud. |
É possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder permissões refinadas a uma instância, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para o centro de configuração e Exemplos comuns de autorização personalizada para registros e centros de configuração.
Etapa 3: Configure a autenticação do cliente
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, adicione a dependência necessária e configure sua aplicação conforme abaixo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação, criptografia e descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
properties.put(ExtensionAuthPropertyKey.CREDENTIALS_URI.getKey(), "${credentials-service-uri}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Framework Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a dependência necessária e as seguintes propriedades ao arquivo de configuração da sua aplicação.
O framework Spring Cloud Alibaba deve ser da versão 2.2.9.RELEASE ou posterior.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação, criptografia e descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
spring.cloud.nacos.discovery.alibabaCloudCredentialsUri=${credentials-service-uri}
## Configuration center
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
spring.cloud.nacos.config.alibabaCloudCredentialsUri=${credentials-service-uri}
Framework Dubbo
Se utilizar o framework Dubbo, adicione a dependência necessária e o seguinte parâmetro à URL do registro no arquivo de configuração do Dubbo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação, criptografia e descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# Alternatively, set the ALIBABA_CLOUD_CREDENTIALS_URI environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudCredentialsUri=${credentials-service-uri}
Go SDK
Se utilizar o cliente Nacos para Go, configure sua aplicação conforme abaixo.
Recomenda-se a versão 2.3.3 ou posterior.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
CredentialsURI: "${credentials-service-uri}",
}
//create 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),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Método 5: Usar RAMRoleARN
Se sua aplicação exigir acesso delegado ao MSE Nacos, como para acesso entre contas, use um RAMRoleARN. O cliente Nacos busca um token STS do STS e o atualiza automaticamente antes da expiração. Também é possível usar o parâmetro policy para restringir ainda mais as permissões da função RAM.
Este método requer um AccessKey com permissão para assumir funções. Como prática recomendada, conceda a este AccessKey apenas a permissão AssumeRole e restrinja quais funções ele pode assumir. Para mais informações, consulte AssumeRole - Obter credenciais de segurança temporárias para uma função.
Etapa 1 (Opcional): Crie um usuário RAM e uma função RAM
Se você não tiver um usuário RAM ou precisar criar um, consulte Crie um usuário RAM.
Se você não tiver uma função RAM ou precisar criar uma que confie em uma conta Alibaba Cloud, consulte Crie uma função RAM para uma conta Alibaba Cloud.
Etapa 2: Conceder permissões RAM
Conceda ao usuário RAM da Etapa 1 permissão para assumir funções. Para mais informações, consulte AssumeRole - Obter credenciais de segurança temporárias para uma função.
Conceda permissões à função RAM da Etapa 1 anexando uma das seguintes políticas de sistema. Essas políticas concedem à função RAM acesso de leitura/gravação ou somente leitura de granularidade grossa às configurações e serviços de todas as instâncias Nacos. Para mais informações, consulte Gerencie permissões para uma função RAM.
|
Nome da política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas de gerenciamento do MSE, equivalentes às permissões de uma conta Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para todos os recursos do MSE sob a conta Alibaba Cloud. |
É possível anexar até cinco políticas por vez. Para anexar mais, repita a operação.
Para conceder permissões refinadas a uma instância, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para o centro de configuração e Exemplos de políticas de autorização personalizada comuns para registros e centros de configuração.
Etapa 3: Configure a autenticação do cliente
Para usar este método, configure o cliente com o AccessKey necessário e o RAMRoleARN da função alvo.
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, adicione a dependência necessária e configure o código da aplicação conforme abaixo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain-name}");
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_ID.getKey(), "${access-key-id-with-assume-role-permission}");
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
properties.put(ExtensionAuthPropertyKey.ACCESS_KEY_SECRET.getKey(), "${access-key-secret-with-assume-role-permission}");
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_ARN.getKey(), "${role-arn-to-assume}");
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_NAME.getKey(), "${custom-role-session-name}");
## The following parameters are optional.
# You can configure the ALIBABA_CLOUD_POLICY environment variable instead.
properties.put(ExtensionAuthPropertyKey.POLICY.getKey(), "${scoped-down-policy}");
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable instead.
properties.put(ExtensionAuthPropertyKey.ROLE_SESSION_EXPIRATION.getKey(), "${session-duration-in-seconds}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a dependência necessária e as seguintes configurações ao arquivo de configuração da sua aplicação.
O framework Spring Cloud Alibaba deve ser da versão 2.2.9.RELEASE ou posterior.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleArn=${role-arn-to-assume}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionName=${custom-role-session-name}
## Configuration center
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeyId=${access-key-id-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable instead.
spring.cloud.nacos.config.alibabaCloudAccessKeySecret=${access-key-secret-with-assume-role-permission}
# You can configure the ALIBABA_CLOUD_ROLE_ARN environment variable instead.
spring.cloud.nacos.config.alibabaCloudRoleArn=${role-arn-to-assume}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable instead.
spring.cloud.nacos.config.alibabaCloudRoleSessionName=${custom-role-session-name}
## The following parameters are optional.
# You can configure the ALIBABA_CLOUD_POLICY environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudPolicy=${scoped-down-policy}
spring.cloud.nacos.config.alibabaCloudPolicy=${scoped-down-policy}
# You can configure the ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variable instead.
spring.cloud.nacos.discovery.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
spring.cloud.nacos.config.alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Dubbo
Se utilizar o framework Dubbo, adicione a dependência necessária e as seguintes configurações à URL do registro no arquivo de configuração do Dubbo.
O cliente Nacos deve ser da versão 2.1.0 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia/descriptografia.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# You can configure the ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, ALIBABA_CLOUD_ROLE_ARN, and ALIBABA_CLOUD_ROLE_SESSION_NAME environment variables instead.
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}
## The following parameters are optional and are appended to the URL. You can configure the ALIBABA_CLOUD_POLICY and ALIBABA_CLOUD_ROLE_SESSION_EXPIRATION environment variables instead.
&alibabaCloudPolicy=${scoped-down-policy}&alibabaCloudRoleSessionExpiration=${session-duration-in-seconds}
Go SDK
Se utilizar o cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Recomenda-se a versão 2.3.3 ou posterior.
//create 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}",
}
// The following parameters are optional.
ramConfig.Policy = "${scoped-down-policy}"
ramConfig.RoleSessionExpiration = "${session-duration-in-seconds}"
//create 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),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Método 6: Usar um AccessKey
Etapa 1 (Opcional): Crie um usuário RAM
Se precisar criar um usuário RAM, consulte Crie um usuário RAM.
Etapa 2: Conceder permissões ao usuário RAM
Conceda permissões ao usuário RAM da Etapa 1 anexando uma das seguintes políticas de sistema. Essas políticas concedem ao usuário RAM permissões de leitura/gravação ou somente leitura de granularidade grossa nas configurações e serviços de todas as instâncias Nacos. Para instruções detalhadas, consulte Gerencie permissões de usuário RAM.
|
Política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas para gerenciar o MSE. Um usuário RAM com esta política possui as mesmas permissões operacionais que uma conta Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política tem acesso de somente leitura a todos os recursos do MSE sob a conta Alibaba Cloud. |
É possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder acesso refinado a uma instância MSE, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para o centro de configuração e Exemplos de políticas de autorização personalizada comuns para Microservices Registry e Configuration Center.
Etapa 3: Configure a autenticação do cliente
Um par de AccessKey consiste em um AccessKey ID e um AccessKey Secret, que devem ser usados em conjunto. Após ativar a autenticação para uma instância Nacos, forneça o par de AccessKey do usuário RAM no cliente Nacos. Caso contrário, o cliente não poderá acessar a instância. Para obter um par de AccessKey, consulte Crie um AccessKey.
Cliente Nacos para Java
Se utilizar o cliente Nacos para Java, configure o código da aplicação conforme abaixo.
Para usar um AccessKey na autenticação, atualize seu cliente para uma versão suportada. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia.
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);
Framework Spring Cloud Alibaba
Se utilizar o framework Spring Cloud Alibaba, adicione a seguinte configuração ao arquivo de configuração da sua aplicação.
O framework Spring Cloud Alibaba deve ser da versão 2.2.1.RELEASE ou posterior.
## registry
spring.cloud.nacos.discovery.accessKey=${accessKey}
spring.cloud.nacos.discovery.secretKey=${secretKey}
## configuration center
spring.cloud.nacos.config.accessKey=${accessKey}
spring.cloud.nacos.config.secretKey=${secretKey}
Framework Dubbo
Se utilizar o framework Dubbo, adicione os seguintes parâmetros à URL do registro no arquivo de configuração do Dubbo.
dubbo.registry.address=nacos://${mse-nacos-endpoint}:8848?accessKey=${accessKey}&secretKey=${secretKey}
Cliente Nacos para Go
Se utilizar o cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Para usar um AccessKey na autenticação, atualize seu cliente para uma versão suportada. Use a versão 2.3.3 ou posterior. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia.
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,
},
)
Cliente Nacos para Python
Se utilizar o cliente Nacos para Python, configure o código da aplicação conforme abaixo.
Para usar um AccessKey na autenticação, atualize seu cliente para uma versão suportada. Para mais informações, consulte Versões do cliente Nacos que suportam autenticação e criptografia.
client = nacos.NacosClient("${mse-nacos-endpoint}", ak=${accessKey}, sk=${secretKey})
Método 7: Usar um AccessKey com rotação automática
Se sua aplicação precisar de acesso de longo prazo, mas o par de AccessKey estiver em risco de comprometimento, use um ClientKey com o Key Management Service (KMS). O KMS rotaciona automaticamente o par de AccessKey do usuário RAM gerenciado em intervalos regulares, transformando uma credencial estática em dinâmica. O KMS também suporta rotação sob demanda para substituir rapidamente um par de AccessKey comprometido. Isso elimina a manutenção manual, reduzindo riscos de segurança e sobrecarga operacional. Para obter um ClientKey, consulte Crie um ponto de acesso de aplicação.
Etapa 1: Armazenar credenciais RAM no KMS
Armazene as credenciais de um usuário RAM existente como um segredo RAM em uma instância KMS. Para mais informações sobre como ativar e usar segredos RAM no KMS, consulte Gerencie e use segredos RAM.
Etapa 2: Conceder permissões ao usuário RAM
Conceda permissões ao usuário RAM da Etapa 1 anexando uma das seguintes políticas de sistema. Essas políticas concedem ao usuário RAM permissões de leitura/gravação ou somente leitura de granularidade grossa nas configurações e serviços de todas as instâncias Nacos. Para instruções detalhadas, consulte Gerencie permissões de usuário RAM.
|
Política |
Descrição |
|
AliyunMSEFullAccess |
Concede permissões completas para gerenciar o MSE. Um usuário RAM com esta política possui as mesmas permissões operacionais que uma conta Alibaba Cloud. |
|
AliyunMSEReadOnlyAccess |
Concede permissões de somente leitura para o MSE. Um usuário RAM com esta política tem acesso de somente leitura a todos os recursos do MSE sob a conta Alibaba Cloud. |
É possível anexar no máximo cinco políticas por vez. Para anexar mais políticas, repita a operação.
Para conceder acesso refinado a uma instância MSE, crie uma política personalizada. Para mais informações, consulte Autenticação refinada para registros, Autenticação refinada para o centro de configuração e Exemplos de políticas de autorização personalizada comuns para Microservices Registry e Configuration Center.
Etapa 3: Crie um arquivo de configuração do Secrets Manager
Crie um arquivo de configuração chamado secretsmanager.properties no diretório raiz do seu projeto ou no classpath. O arquivo deve conter o seguinte conteúdo:
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>"}]
Para uma descrição dos parâmetros no arquivo de configuração, consulte Cliente do Secrets Manager.
Etapa 4: Configure a autenticação do cliente
Cliente Nacos para Java
Se utilizar o Cliente Nacos para Java, adicione a dependência necessária e configure o código da aplicação conforme abaixo.
A versão do Cliente Nacos deve ser 2.1.0 ou posterior. Para mais informações, consulte Versões do Cliente Nacos que suportam autenticação e criptografia de dados.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
properties.put(PropertyKeyConst.SERVER_ADDR, "${mse-nacos-instance-domain}");
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
properties.put(ExtensionAuthPropertyKey.SECRET_NAME.getKey(), "${name-of-the-ram-secret}");
NamingService naming = NamingFactory.createNamingService(properties);
ConfigService configService = ConfigFactory.createConfigService(properties);
Spring Cloud Alibaba
Se utilizar o Spring Cloud Alibaba, adicione a dependência necessária e a seguinte configuração ao arquivo de configuração da sua aplicação.
A versão do Spring Cloud Alibaba deve ser 2.2.9.RELEASE ou posterior.
A versão do Cliente Nacos deve ser 2.1.0 ou posterior. Para mais informações, consulte Versões do Cliente Nacos que suportam autenticação e criptografia de dados.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
## Registry
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
spring.cloud.nacos.discovery.alibabaCloudSecretName=${name-of-the-ram-secret}
## Configuration center
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
spring.cloud.nacos.config.alibabaCloudSecretName=${name-of-the-ram-secret}
Dubbo
Se utilizar o Dubbo, adicione a dependência necessária e o seguinte parâmetro à URL do registro no arquivo de configuração do Dubbo.
A versão do Cliente Nacos deve ser 2.1.0 ou posterior. Para mais informações, consulte Versões do Cliente Nacos que suportam autenticação e criptografia de dados.
<!-- https://mvnrepository.com/artifact/com.alibaba.nacos/nacos-client-mse-extension -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client-mse-extension</artifactId>
<!-- Version 1.0.5 or later is required. -->
<version>1.0.5</version>
</dependency>
# This can be replaced by the ALIBABA_CLOUD_SECRET_NAME environment variable.
dubbo.registry.address=nacos://${mse-nacos-instance-domain}:8848?alibabaCloudSecretName=${name-of-the-ram-secret}
Go SDK
Se utilizar o Cliente Nacos para Go, configure o código da aplicação conforme abaixo.
Recomenda-se a versão 2.3.3 ou posterior.
//create ServerConfig
sc := []constant.ServerConfig{
*constant.NewServerConfig("${mse-nacos-instance-domain}", 8848, constant.WithContextPath("/nacos")),
}
ramConfig := constant.RamConfig{
SecretName: "${name-of-the-ram-secret}",
}
//create 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),
)
// create config client
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
//create naming client
serviceClient, err := clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
Documentos relacionados
Para acessar uma instância MSE Nacos pela internet, consulte Configure uma lista de permissões.
Para configurar autorização refinada, consulte Autenticação refinada para o registro e Autenticação refinada para o centro de configuração.
Para conceder permissões para o console MSE, consulte Autorização do registro e centro de configuração.
Para conhecer as limitações do SDK do Nacos, consulte Guia de versões do SDK Nacos para MSE.
Se tiver dúvidas sobre o Nacos, consulte FAQ do Nacos.
FAQ
P: O MSE Nacos suporta autenticação de cliente com nome de usuário e senha (por exemplo, nacos/nacos)?
Não. Após ativar a autenticação RAM para o MSE Nacos, a autenticação integrada por nome de usuário/senha deixa de ser suportada. Os dois mecanismos de autenticação são mutuamente exclusivos.
Se sua aplicação cliente tiver spring.cloud.nacos.username e spring.cloud.nacos.password configurados, o servidor Nacos descartará essas solicitações, causando erros de Read timed out ou falhas de conexão mesmo quando a rede estiver normal.
Abordagem correta: Remova ou deixe vazios os campos de nome de usuário e senha na configuração do seu cliente e mude para um dos métodos de credenciais RAM suportados, como AccessKey/SecretKey ou Função RAM do ECS. Para mais informações sobre como configurar credenciais, consulte Configure credenciais do cliente.
Termos de pesquisa relacionados: definir senha de conexão da aplicação, redefinir senha do Nacos para o nacos original, KMS causando problemas de conexão.
P: Meu cliente Nacos relata NacosException: Forbidden/no right ou accesskeyid can't be null. Como solucionar isso?
Solucione o problema com base no erro específico:
Cenário 1: Erro Forbidden/no right
Causa: A configuração de autenticação do cliente não atende aos requisitos. Esse erro aparece se a versão do SDK ou os parâmetros de autenticação estiverem incorretos, mesmo quando a conexão de rede estiver normal.
Resolução:
Verifique se você atualizou o SDK do Cliente Nacos para uma versão compatível. Para a versão necessária do cliente, consulte os requisitos de versão no respectivo método de configuração de credenciais neste tópico.
Confirme se você configurou corretamente todos os parâmetros de autenticação necessários (por exemplo, AccessKey ID, AccessKey secret ou nome da função RAM) de acordo com as instruções neste tópico.
Cenário 2: Erro accesskeyid can't be null em clusters ACK usando Função RAM do ECS
Esse erro indica que as credenciais da Função RAM do ECS não podem ser recuperadas. Solucione o problema na seguinte ordem:
-
Verificar conectividade de rede VPC: Confirme se o Pod consegue alcançar a instância MSE na porta 8848. Execute o seguinte comando de dentro do Pod:
telnet <MSE Nacos instance domain> 8848 -
Verificar vínculo da função RAM: Execute o seguinte comando dentro do Pod para confirmar se o service de metadados retorna o nome da função (não um erro 404):
curl http://100.100.100.200/latest/meta-data/ram/security-credentials/Se o comando retornar um erro 404 ou uma resposta vazia, a função RAM não está vinculada corretamente à instância ECS ou ao nó de trabalhador do cluster ACK.
Verificar permissões da função RAM: Confirme se a função RAM recebeu as permissões de acesso necessárias ao MSE, como AliyunMSEFullAccess ou AliyunMSEReadOnlyAccess. Para informações sobre como conceder permissões, consulte as etapas de autorização em Método 1: Autenticar com uma função RAM neste tópico.
Verificação temporária: Se o método de Função RAM do ECS continuar relatando erros após concluir as etapas acima, mude temporariamente para o método AccessKey/SecretKey para verificar a conexão. Se o método AK/SK for bem-sucedido, o problema é específico da configuração da Função RAM (por exemplo, vínculo da função ou acessibilidade do service de metadados).