O Microservices Registry do Microservices Engine (MSE) armazena dados de configuração em texto simples. O MSE integra-se ao Key Management Service (KMS) para criptografar e descriptografar esses dados, como fontes de dados, tokens, nomes de usuário e senhas. Essa integração reduz o risco de vazamento de dados sensíveis.
Pré-requisitos
Crie um mecanismo Nacos da Developer Edition, Professional Edition ou Serverless Edition. Para mais informações, consulte Create an instance.
Key Management Service (KMS) está ativado.
Adquira e habilite uma instância do KMS. A versão da imagem da instância do KMS deve ser posterior a dkms-3.0.0. Para mais informações, consulte Purchase and enable a KMS instance e Upgrade the image version of a KMS instance.
Crie uma chave. Para mais informações, consulte Getting started with key management
Para garantir a segurança dos dados, o MSE utiliza o Alibaba Cloud KMS para criptografia e descriptografia. O KMS inclui o Shared KMS e o Dedicated KMS. O Shared KMS não está mais disponível. Para mais informações, consulte [[Announcement] EOFS and EOS for the Shared KMS](t2811231.xdita#). Se você usa o Shared KMS, recomendamos atualizar para o Dedicated KMS. Caso ative o KMS após 31 de março de 2022, é obrigatório adquirir o Dedicated KMS. Para mais detalhes, consulte [[Upgrade Announcement] KMS is upgraded to Dedicated KMS](t2165677.xdita#concept-2165677). Sobre o faturamento do KMS, veja Billing of KMS 1.0.
Este tópico aborda instâncias do Dedicated KMS. Se você ativou o Shared KMS antes de 31 de março de 2022, consulte FAQ.
Criar configurações criptografadas
Para criar configurações criptografadas no console do MSE, siga as etapas abaixo:
Faça login no console do 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, escolha Configuration Management > Configurations.
No canto superior esquerdo da página Configurations, selecione um namespace na lista suspensa Namespace e clique em Add Configuration.
-
No painel Create Configuration, insira um Data ID e um Group. Em seguida, ative a opção Data Encryption e selecione uma KMS Key. Caso ainda não tenha criado uma KMS Key, clique em Create. É possível criar uma chave no console do Key Management Service. Após criar a chave, atualize o painel Create Configuration para exibir a nova chave do KMS.
ImportanteSe você ativar o Dedicated KMS após 31 de março de 2022, deverá selecionar o ID de uma chave para criptografia e associá-la à instância do MSE Nacos. Assim, todas as configurações subsequentes serão criptografadas com essa chave.
Caso tenha ativado o KMS antes de 31 de março de 2022, o prompt para vincular o ID da chave da instância do Dedicated KMS não será exibido, permitindo o uso do Shared KMS. Os métodos de configuração para acesso das aplicações ao Shared KMS são diferentes.
-
Para usuários do Dedicated KMS, a opção KMS AES-256 é exibida. Já para usuários do Shared KMS, os três métodos de criptografia aparecem visando compatibilidade de versões. Recomendamos não selecionar KMS ou KMS AES-128.
KMS AES-256: Método de criptografia e descriptografia de envelope do KMS. Utiliza uma chave de 256 bits com alta força de criptografia. O conteúdo criptografado da configuração não pode exceder 50 KB. Os dados de configuração em texto simples não são transmitidos ao KMS. Recomendamos esta opção para maior segurança. Escolha o método de criptografia conforme suas necessidades de negócio.
KMS AES-128: Método que utiliza uma chave de 128 bits com força de criptografia média. O tamanho do conteúdo criptografado da configuração não pode ultrapassar 50 KB.
KMS: Não recomendamos esta opção, pois caracteres especiais podem causar problemas de compatibilidade. Por exemplo, um
ampersand (&)é escapado como\u0026. O tamanho do conteúdo criptografado da configuração não pode exceder 6 KB.
Após o vínculo, não é possível alterar a chave. Se você excluir a chave, perderá o acesso às configurações criptografadas.
Na seção Configuration Format, selecione um formato de dados, insira o conteúdo da configuração no editor Configuration Content à direita e clique em Release.
Usar uma configuração criptografada no Nacos SDK for Java
-
Adicione as seguintes dependências ao arquivo pom.xml do projeto:
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>{nacos-client-version}</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client-mse-extension</artifactId> <version>{nacos-client-mse-extension-version}</version> </dependency>Descrição das versões
Versão principal do cliente Nacos
Versão do cliente Nacos
Versão recomendada do plug-in
1.x
V1.4.3 ou posterior
V1.0.6 ou posterior
2.x
V2.1.1 ou posterior
V1.0.6 ou posterior
ImportantePodem ocorrer problemas de estabilidade se a versão do plug-in de criptografia e descriptografia não corresponder à versão do cliente Nacos. Recomendamos utilizar as versões indicadas.
-
Escolha o código válido que deseja configurar com base no tipo de framework utilizado.
Usar o framework Nacos client
Ao utilizar o framework Nacos client para obter configurações, configure o seguinte código de exemplo.
try { Properties properties = new Properties(); // The address of your Nacos server. properties.put("serverAddr", "{serverAddr}"); // Configure the RAM role of the ECS instance as the access credential. properties.put("ramRoleName", "{ramRoleName}"); // The endpoint of the KMS instance. properties.put("kmsEndpoint", "{kmsEndpoint}"); ConfigService configService = NacosFactory.createConfigService(properties); System.out.println("content:::"+configService.getConfig("{dataId}", "{group}", 6000)); } catch (Exception e) { e.printStackTrace(); }O parâmetro kmsEndpoint indica o endpoint da instância do KMS. Se o ambiente de acesso e a instância do KMS estiverem na mesma VPC, o valor de kmsEndpoint será o endpoint de VPC da instância. Ao acessar a instância do KMS pela Internet, o valor de kmsEndpoint será o endpoint público ou o endpoint de VPC do gateway público. Para mais informações sobre como obter o endpoint, consulte How do I obtain the endpoint of a KMS instance?
Caso utilize um par de AccessKey como credencial para acessar a instância do KMS, substitua a seguinte configuração:
properties.put("ramRoleName", "{ramRoleName}");Utilize a seguinte configuração:
properties.put("accessKey", "{accessKey}"); properties.put("secretKey", "{secretKey}");O Nacos SDK for Java aceita configurações criptografadas por meio de múltiplas credenciais de acesso, como tokens do Security Token Service (STS) e o Alibaba Cloud Resource Name (ARN) de uma função do RAM. Para mais detalhes sobre as credenciais suportadas e métodos de configuração do cliente, consulte Supported access credentials for configuration encryption of the Nacos SDK for Java.
Se o seu KMS foi ativado após 31 de março de 2022 e você deseja publicar configurações criptografadas via SDK, adicione o seguinte código:
properties.put("keyId", "{keyId}");Substitua os parâmetros serverAddr, ramRoleName, accessKey, secretKey, kmsEndpoint, dataId, group e keyId no código pelos parâmetros reais do service.
Usar o framework Spring Cloud Nacos Config
NotaSe utilizar o Spring Cloud Alibaba 2022.x ou 2023.x, atualize para a versão 2023.0.1.2.
Para usuários do Spring Cloud Alibaba 2021.x, recomenda-se a atualização para 2021.0.6.1.
Caso esteja no Spring Cloud Alibaba 2.x, atualize para a versão 2.2.10.
Certifique-se de que as versões do Spring Cloud Alibaba, Spring Cloud e Spring Boot sejam compatíveis. Para verificar a compatibilidade, consulte as notas de lançamento no site oficial do Spring Cloud Alibaba.
Ao usar o framework Spring Cloud Nacos Config para obter configurações, adicione as seguintes definições:
spring.cloud.nacos.config.server-addr={serverAddr} spring.config.import=nacos:{dataId}?group={group}&refreshEnabled=true # Use the RAM role of an ECS instance as the access credential. spring.cloud.nacos.config.ramRoleName={ramRoleName} spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}O parâmetro kmsEndpoint indica o endpoint da instância do KMS. Se o ambiente de acesso e a instância do KMS estiverem na mesma VPC, o valor de kmsEndpoint será o endpoint de VPC da instância. Ao acessar a instância do KMS pela Internet, o valor de kmsEndpoint será o endpoint público ou o endpoint de VPC do gateway público. Para mais informações sobre como obter o endpoint, consulte How do I obtain the endpoint of a KMS instance?
Caso utilize um par de AccessKey como credencial para acessar a instância do KMS, substitua a seguinte configuração:
spring.cloud.nacos.config.ramRoleName={ramRoleName}Utilize as seguintes configurações:
spring.cloud.nacos.config.accesskey={accessKey} spring.cloud.nacos.config.secretkey={secretKey} # If you use an AccessKey pair to access Nacos, we recommend specifying it # by using JVM parameters or environment variables due to its sensitive nature. # JVM parameters -Dspring.cloud.nacos.config.accessKey={accessKey} -Dspring.cloud.nacos.config.secretKey={secretKey} # Environment variables spring_cloud_nacos_config_accessKey={accessKey} spring_cloud_nacos_config_secretKey={secretKey}O Nacos SDK for Java aceita configurações criptografadas por meio de múltiplas credenciais de acesso, como tokens do Security Token Service (STS) e o Alibaba Cloud Resource Name (ARN) de uma função do RAM. Para mais detalhes sobre as credenciais suportadas e métodos de configuração do cliente, consulte Supported access credentials for configuration encryption of the Nacos SDK for Java.
Se o seu KMS foi ativado após 31 de março de 2022 e você deseja publicar configurações criptografadas via SDK, adicione o seguinte código:
spring.cloud.nacos.config.keyId={keyId}Substitua os parâmetros serverAddr, ramRoleName, accessKey, secretKey, kmsEndpoint, dataId, group e keyId no código pelos parâmetros reais do service.
Descrição
A tabela a seguir descreve os parâmetros. Certifique-se de que os valores configurados sejam válidos.
Parâmetro
Descrição
serverAddr
O endereço IP da sua instância do MSE. Exemplo:
mse-*****.nacos-ans.mse.aliyuncs.com.ramRoleName
A função do RAM atribuída à instância do ECS ou ao cluster ACK.
accessKey e secretKey
O AccessKey ID e o AccessKey secret da conta Alibaba Cloud atual.
É necessário especificar os parâmetros accessKey e secretKey. Caso contrário, especifique o parâmetro ramRoleName.
kmsEndpoint
O endpoint da instância do KMS. Se o ambiente de acesso e a instância do KMS estiverem na mesma VPC, o valor de kmsEndpoint será o endpoint de VPC da instância. Ao acessar a instância do KMS pela Internet, o valor de kmsEndpoint será o endpoint público ou o endpoint de VPC do gateway público. Para mais informações sobre como obter o endpoint, consulte How do I obtain the endpoint of a KMS instance?
dataId
O ID de dados da configuração criptografada. Exemplo:
cipher-kms-aes-256-****.properties.group
O nome do grupo da configuração criptografada.
keyId
O ID da chave do KMS usada para criptografar configurações. Você pode criar e usar uma chave do KMS no console.
Exemplo:
alia/***oukey-***.
Usar uma configuração criptografada no Nacos SDK for Go
-
Execute o comando
go getpara baixar as dependências doNacos client SDK for Go.go get -u github.com/nacos-group/nacos-sdk-go/v2@v2.2.8 -
Modifique as configurações iniciais do cliente Nacos.
No Nacos SDK for Go, apenas um par de AccessKey pode ser usado como credencial para acessar a instância do KMS. Substitua os parâmetros serverAddr, accessKey, secretKey e kmsEndpoint no código pelos parâmetros usados em seu negócio e certifique-se de que o parâmetro
OpenKMSesteja definido como true para criptografia de configuração.sc := []constant.ServerConfig{ { IpAddr: "{serverAddr}", // Replace with the endpoint of your MSE instance. Port: 8848, }, } var accessKey = "{accessKey}" var secretKey = "{secretKey}" cc := constant.ClientConfig{ NamespaceId: "public", // The namespace ID. OpenKMS: true, // Enable KMS for configuration encryption. AccessKey: accessKey, SecretKey: secretKey, KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",}, TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "/tmp/nacos/log", CacheDir: "/tmp/nacos/cache", RotateTime: "1h", MaxAge: 3, }O parâmetro kmsEndpoint indica o endpoint da instância do KMS. Se o ambiente de acesso e a instância do KMS estiverem na mesma VPC, o valor de kmsEndpoint será o endpoint de VPC da instância. Ao acessar a instância do KMS pela Internet, o valor de kmsEndpoint será o endpoint público ou o endpoint de VPC do gateway público. Para mais informações sobre como obter o endpoint, consulte How do I obtain the endpoint of a KMS instance?
-
Publique as configurações criptografadas.
keyId: O ID da chave do KMS usada para criptografar configurações.configParam := vo.ConfigParam{ DataId: "{dataId}", Group: "{group}", Content: "content", KmsKeyId: "{keyId}", // The ID of the KMS key for encryption. You can create and use a key in the KMS console. } published, err := client.PublishConfig(configParam) if published && err == nil { fmt.Printf("successfully publish: group[%s], dataId[%s], data[%s]\n", configParam.Group, configParam.DataId, configParam.Content) } else { fmt.Printf("failed to publish: group[%s], dataId[%s], data[%s]\n with error: %s\n", configParam.Group, configParam.DataId, configParam.Content, err) }
Parâmetros
A tabela a seguir descreve os parâmetros. Certifique-se de que os valores configurados sejam válidos.
|
Parâmetro |
Descrição |
|
serverAddr |
O endereço IP da sua instância do MSE. Exemplo: |
|
accessKey e secretKey |
O AccessKey ID e o AccessKey secret do usuário do RAM. |
|
kmsEndpoint |
O endpoint da instância do KMS. Se o ambiente de acesso e a instância do KMS estiverem na mesma VPC, o valor de kmsEndpoint será o endpoint de VPC da instância. Ao acessar a instância do KMS pela Internet, o valor de kmsEndpoint será o endpoint público ou o endpoint de VPC do gateway público. Para mais informações sobre como obter o endpoint, consulte How do I obtain the endpoint of a KMS instance? |
|
dataId |
O ID de dados da configuração criptografada. Exemplo: |
|
group |
O nome do grupo da configuração criptografada. |
|
keyId |
O ID da chave do KMS usada para criptografar configurações. Você pode criar e usar uma chave do KMS no console do KMS. Exemplo: |
Credenciais de acesso suportadas para criptografia de configuração do Nacos SDK for Java
O Nacos SDK for Java suporta múltiplas credenciais de acesso para criptografar configurações. Selecione um método para inicializar o provedor de credenciais com base nos requisitos de autenticação e autorização do seu cenário de negócio.
Credenciais de acesso suportadas:
-
Nota
Para ambientes do Serverless App Engine (SAE), recomendamos o uso de um token STS para acessar configurações criptografadas do MSE. Para mais informações, consulte a seção "Use an STS token" em Access authentication by the Nacos client.
-
Use the RAM role of an ECS instance
NotaEste método (ECSRAMRole) aplica-se apenas a ambientes ECS, Elastic Container Instance (ECI) e ACK. O Serverless App Engine (SAE) não suporta o uso da função do RAM de uma instância ECS para acessar configurações criptografadas do MSE.
Para mais informações sobre como configurar credenciais de acesso no cliente, consulte a seção "Configure access credentials on the client" em Access authentication by the Nacos client. Selecione a seguinte política de sistema para conceder a permissão relacionada à credencial de acesso. Dessa forma, uma operação de autorização granular concede permissões de leitura e gravação em todas as instâncias do KMS.
|
Política |
Observação |
|
AliyunKMSFullAccess |
A permissão necessária para gerenciar o KMS. É possível usar uma função do RAM à qual esta política está anexada para gerenciar todos os recursos da mesma forma que uma conta Alibaba Cloud gerencia o KMS. |
Perguntas frequentes
Como configurar parâmetros ao usar o Shared KMS ativado antes de 31 de março de 2022?
Se você ativou o Shared KMS antes de 31 de março de 2022, basta substituir o parâmetro kmsEndpoint por kmsRegionId. O parâmetro kmsRegionId indica a região onde a instância do KMS reside, como cn-hangzhou. Siga as etapas abaixo para modificar a configuração do cliente com base no framework utilizado.
Usar uma configuração criptografada no Nacos client SDK for Java
Substitua a seguinte configuração no código:
properties.put("kmsEndpoint", "{kmsEndpoint}");
Utilize a seguinte configuração:
properties.put("kms_region_id", "{kmsRegionId}");
Usar uma configuração criptografada com o framework Spring Cloud Nacos Config no Nacos SDK for Java
Substitua a seguinte configuração no código:
spring.cloud.nacos.config.kmsEndpoint={kmsEndpoint}
Utilize as seguintes configurações:
spring.cloud.nacos.config.kms_region_id={kmsRegionId}
Usar uma configuração criptografada no Nacos SDK for Go
Adicione o parâmetro RegionId no ClientConfig. Substitua as seguintes configurações no código:
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
KMSConfig: &constant.KMSConfig{Endpoint: "{kmsEndpoint}",},
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
}
Utilize as seguintes configurações:
cc := constant.ClientConfig{
NamespaceId: "public",
OpenKMS: true,
AccessKey: accessKey,
SecretKey: secretKey,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
RotateTime: "1h",
MaxAge: 3,
RegionId: "{kmsRegionId}",
}
Como obter o endpoint de uma instância do KMS?
Se o seu ambiente de acesso e a instância do KMS estiverem na mesma VPC, defina
kmsEndpointcomo o endpoint de VPC da instância. No console do KMS, acesse a página Instance Management, clique em instância desejada para visualizar seus detalhes e obtenha o VPC endpoint of the instance na seção Basic Information.-
Para acessar a instância do KMS pela Internet, ative a opção Internet Access Status na página de detalhes da instância do KMS.
Após habilitar o acesso público, o endpoint público do gateway público será
kms.cn-hangzhou.aliyuncs.com, e o endpoint de VPC do gateway público serákms-vpc.cn-hangzhou.aliyuncs.com. O acesso público requer o KMS SDK, e o limite de desempenho para criptografia e descriptografia simétrica é de 750 operações por segundo. Recomendamos configurar políticas de controle de acesso refinadas para aumentar a segurança. Ao acessar a instância do KMS por uma VPC, o valor de kmsEndpoint corresponde ao endpoint de VPC do gateway público.
Perguntas frequentes
Solução de problemas comuns
Siga as etapas abaixo:
-
Verifique se o ambiente de execução da aplicação consegue se conectar à VPC onde reside a instância do MSE e à VPC onde reside a instância do KMS.
NotaNão é necessário garantir a conectividade entre a instância do MSE e a instância do KMS.
-
Confira se está sendo usado o KMS
V1.0ouV3.0. Caso utilize o KMS V1.0, certifique-se de que o KMS foi ativado antes de 31 de março de 2022.NotaSe você ativar o KMS após 31 de março de 2022, deverá adquirir o Dedicated KMS. O recurso de criptografia do KMS V1.0 não está mais disponível para novos usuários.
Valide se a versão do cliente Nacos corresponde à versão do plug-in de criptografia e descriptografia. Para mais detalhes, consulte as descrições de versão neste tópico.
Solução de problemas do Nacos SDK for Java
Palavras-chave de pilhas de exceção nos logs do Nacos | Causas |
| O parâmetro de inicialização |
| O ID da chave especificado pelo parâmetro de inicialização |
| O parâmetro de inicialização |
| O endpoint especificado pelo parâmetro de inicialização |
| O parâmetro de inicialização |
| O valor do parâmetro de inicialização |
| O parâmetro de inicialização |
|
|
| O parâmetro de inicialização |
| O arquivo especificado pelo parâmetro de inicialização |