Este tópico descreve problemas comuns que ocorrem quando uma aplicação utiliza um SDK para acessar uma instância do Key Management Service (KMS).
Lista de problemas
The "no such host" or "not known" error occurs when you access a KMS instance
The "Forbidden.KeyNotFound" error occurs when you access or use a key
The "UnsupportedOperation" error occurs when you call a KMS API operation
An "Incorrect ClientKey password" error occurs when you access a KMS instance
An HTTP 413 status code is returned when an application accesses a KMS instance
Is the secret management feature of KMS supported on Android?
An on-premises data center cannot access a KMS instance by its domain name
The "QPS Limit Exceeded" error occurs when ACK syncs KMS secrets by using ack-secret-manager
Erro 'no such host' ou 'not known'
Problema
Ao usar o SDK de instância KMS para Go, a aplicação retorna o seguinte erro:
kst-xxx.cryptoservice.kms.aliyuncs.com: no such host.Ao usar o SDK de instância KMS para Java, a aplicação retorna o seguinte erro:
kst-xxx.cryptoservice.kms.aliyuncs.com: nodename nor servname provided, or not known.
Causa
Uma instância KMS é um service dedicado de gerenciamento de chaves e segredos, acessível exclusivamente por meio de uma Virtual Private Cloud (VPC) associada.
Solução
-
Se a VPC onde sua aplicação está em execução e a instância KMS estiverem na mesma região, associe a VPC à instância KMS. Para mais informações, consulte Access a KMS instance from multiple VPCs in the same region.
Para verificar quais VPCs estão associadas à sua instância KMS, visualize View KMS instance details.
Caso a VPC da aplicação e a instância KMS estejam em regiões diferentes, estabeleça uma conexão de rede entre as duas VPCs.
Erro 'Forbidden.NoPermission' ao usar um AAP
Problema
Ao acessar uma instância KMS, a descrição do erro ou a mensagem de exceção do SDK contém o seguinte: Forbidden.NoPermission : This operation is forbidden by permission system.
Solução
Esse erro ocorre porque a política de permissões do ponto de acesso à aplicação (AAP) não concede as permissões necessárias de chave ou segredo em RBAC Permissions e Accessible Resources. Para mais informações, consulte Create an application access point.
Erro '...forbidden by permission system' ao recuperar um segredo
Problema
Ao recuperar o valor de um segredo, a descrição do erro ou a mensagem de exceção do SDK retornada pelo KMS contém o seguinte: This operation for key-xxxxxx is forbidden by permission system.
O código a seguir apresenta um exemplo de mensagem de exceção do SDK de instância KMS para Java:
Connected to the target VM, address: '127.0.xxx', transport: 'socket'
Exception in thread "main" com.aliyun.tea.TeaException Create breakpoint : This operation for key-hzz6xxx xxx is forbidden by permission system.
at com.aliyun.dkms.gcs.openapi.Client.doRequest(Client.java:159)
at com.aliyun.dkms.gcs.sdk.Client.getSecretValueWithOptions(Client.java:190)
at com.aliyun.dkms.gcs.sdk.Client.getSecretValue(Client.java:213)
at com.yqn.center.user.config.RdsSecretSampleCode.main(RdsSecretSampleCode.java:209)
Disconnected from the target VM, address: '127.0.xxx', transport: 'socket'
Process finished with exit code 1
Causa
Sua aplicação não tem permissão para usar a chave na descriptografia.
Ao criar um segredo, você seleciona uma chave dentro da mesma instância KMS para criptografia. Para recuperar o segredo, sua aplicação precisa ter permissão não apenas para acessar o segredo, mas também para usar a chave correspondente na descriptografia.
Solução
-
Cenário 1: Acesso ao KMS por meio de um ponto de acesso à aplicação (AAP) usando uma ClientKey
Edite a política de permissões do AAP para conceder à aplicação a permissão de uso da chave para descriptografia.
Acesse o console do Key Management Service. Na barra de navegação superior, selecione uma região. No painel de navegação à esquerda, escolha .
Clique em no nome do AAP desejado para acessar a página Details.
-
Na coluna Actions da política de permissões, clique em Modify. Configure os parâmetros a seguir e clique em Update.
RBAC Permissions: Selecione CryptoServiceKeyUser.
Accessible Resources: Na seção Available Resources, selecione a chave e clique em no ícone
. Alternativamente, clique em no ícone
ao lado de Selected Resources para adicionar uma chave no formato key/key_id. Exemplo:key/key-hzz6xxxxxx.
-
Cenário 2: Acesso ao KMS usando o par AccessKey de um usuário RAM ou assumindo uma função RAM
Edite a política de permissões RAM para conceder à aplicação a permissão de uso da chave para descriptografia.
Acesse o console do RAM.
No painel de navegação à esquerda, escolha Permissions > Policies.
Localize a política de permissões anexada ao seu usuário RAM ou função RAM e clique em no nome da política.
-
Na aba Policy Document, clique em Modify Policy Document. Adicione o script a seguir à seção
Statemente clique em Continue to edit basic information.{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "acs:kms:${region}:${account}:key/keyId-example" }Para mais informações sobre políticas de permissões, consulte Custom permission policies for Key Management Service.
Erro 'Forbidden.KeyNotFound'
Causa: Na maioria dos casos, a região, o ID da chave ou o alias especificados na solicitação não correspondem aos usados para criptografia.
Solução: Certifique-se de que a região, o ID da chave ou o alias usados para descriptografia correspondam aos utilizados na criptografia.
Erro 'UnsupportedOperation'
-
Configuração de acesso à rede incorreta
Causa: Sua aplicação está usando um SDK padrão do Alibaba Cloud, e não um SDK específico do KMS, para executar operações criptográficas em uma chave de uma instância KMS.
-
Solução:
Acesse o console do Key Management Service. Na barra de navegação superior, selecione uma região. No painel de navegação à esquerda, escolha .
-
Na lista de instâncias, clique em no ID da instância desejada. Na página de detalhes, ative a opção Public Network Access na seção RD Multi-Account.
NotaSe uma instância KMS for compartilhada entre várias contas Alibaba Cloud, você poderá definir permissões de acesso à rede pública para cada conta.
Na aba Basic Information da página de detalhes da instância, localize o Public Endpoint. O endpoint é exibido após a ativação do acesso à rede pública e possui um formato semelhante a
kms.cn-hangzhou.aliyuncs.com.
-
Tipo de chave incorreto
Causa: Sua aplicação usa uma chave de service ao chamar uma operação de API criptográfica, como Encrypt, Decrypt ou GenerateDataKey, por meio de um SDK.
Solução: Para operações criptográficas, utilize diretamente uma chave mestra do cliente (CMK), e não uma chave de service gerenciada por outro service de cloud.
-
Incompatibilidade entre algoritmo de chave e API
-
Cenário 1: Criptografia, descriptografia e geração de chave de dados
Ao chamar a operação GenerateDataKey, o algoritmo da chave mestra do cliente (CMK) é um algoritmo assimétrico, como RSA, ECC .
Solução: Verifique se o algoritmo da CMK é simétrico, como AES , e se o uso da chave está definido como ENCRYPT/DECRYPT.
-
Cenário 2: Assinatura e verificação
Acesse o console do Key Management Service. Na barra de navegação superior, selecione uma região. No painel de navegação à esquerda, escolha .
Na página Instances, clique em Download na coluna Instance CA Certificate.
-
Na caixa de diálogo Instance CA Certificate, selecione o ID da instância, clique em Download e armazene o certificado em um local seguro.
Por padrão, o certificado CA baixado recebe o nome PrivateKmsCA_kst-.pem. Integre esse certificado ao SDK para validar a autenticidade e a validade do certificado SSL do service da instância KMS.
-
SDK de Instância KMS para Java
NotaA dependência tea deve ser da versão 1.2.3 ou posterior.
SDK de Instância KMS para Python 3, SDK de Instância KMS para Python 2
Ao usar o SDK de instância KMS para Java, o seguinte erro é retornado:
java.io.IOException: keystore password was incorrect.Ao usar o SDK de instância KMS para PHP, o seguinte erro é retornado:
Could not decrypt the privateKey of clientKey, the password is incorrect,or it is not a valid pkcs12.Ao usar o SDK de instância KMS para Go, o seguinte erro é retornado:
panic: pkcs12: decryption password incorrect.Ao usar o SDK de instância KMS para Python, o seguinte erro é retornado:
OpenSSL.crypto.Error: [('PKCS12 routines', '', 'mac verify failure')].-
Verifique se a senha da ClientKey atende aos requisitos de formato. Caso contrário, crie uma nova ClientKey. Para mais informações, consulte Create a ClientKey.
A senha da ClientKey deve ter entre 8 e 64 caracteres e conter pelo menos dois dos seguintes tipos de caracteres: dígitos (0-9), letras minúsculas (a-z), letras maiúsculas (A-Z) e caracteres especiais (
~!@#$%^&*?_-). Se você ler a senha da ClientKey a partir de um arquivo, certifique-se de que seja um arquivo de texto simples contendo apenas uma única linha com a senha. O arquivo não pode conter caracteres estranhos, como quebras de linha ou tabulações.
Criptografia e descriptografia: Recomendamos não exceder 6 KB de dados por operação para chaves simétricas ou 1 KB para chaves assimétricas. Para volumes maiores de dados, utilize criptografia de envelope.
Assinatura e verificação: Se a mensagem a ser assinada for grande, recomendamos que sua aplicação gere um resumo (digest) da mensagem localmente e, em seguida, chame a operação
SignouVerifypara assinar ou verificar o resumo.-
Verifique se o ambiente da sua aplicação possui conectividade de rede com a VPC da instância KMS.
Se a VPC da sua aplicação e a instância KMS estiverem na mesma região, associe a VPC à instância KMS. Para mais informações, consulte Access a KMS instance from multiple VPCs in the same region. Para outros cenários, veja as soluções abaixo.
-
Cross-VPC interconnection solutions
Utilize a Cloud Enterprise Network (CEN), VPN Gateway, uma conexão de peering de VPC ou PrivateLink para habilitar a comunicação privada entre VPCs. Para obter informações sobre os recursos e a configuração dessas soluções, consulte VPC interconnection.
-
Connecting a VPC to the internet
Use um endereço IP público estático de uma instância ECS, um Elastic IP Address, um NAT Gateway ou Server Load Balancer (SLB) para permitir que recursos de cloud em uma VPC acessem ou sejam acessados pela internet. Para mais informações, consulte Public network access.
-
Connecting a VPC to an on-premises data center
Utilize um VPN Gateway, um circuito Express Connect ou um Smart Access Gateway para conectar seu data center on-premises a uma VPC na cloud e construir uma cloud híbrida. Para mais informações, consulte Connect a VPC to an on-premises data center or another cloud.
-
Certifique-se de que a resolução do nome de domínio da VPC do KMS esteja configurada corretamente. Para informações sobre configurações de resolução DNS, consulte Introduction to internal DNS resolution.
-
No Express Connect router, permita os segmentos de rota 100.100.2.136 e 100.100.2.138 para garantir que o data center on-premises consiga fazer ping em 100.100.2.136 e 100.100.2.138. Para dúvidas sobre a configuração do roteador Express Connect, consulte seu arquiteto de soluções de rede ou consulte os seguintes documentos: Cloud-to-on-premises network interconnection, Connect an on-premises data center to a VPC over an Express Connect circuit, Add and manage route entries e Process messages from an on-premises data center by using Message Queue for Apache RocketMQ over an Express Connect circuit.
ImportanteSe o seu data center on-premises não estiver conectado por meio da CEN do Alibaba Cloud ou de um circuito Express Connect, entre em contato com seu provedor de rede para configurar o roteador.
-
Modifique o arquivo de configuração primária do DNS local named.conf para encaminhar consultas DNS do nome de domínio do KMS (kms.aliyuncs.com) para o DNS do Alibaba Cloud para resolução. O código a seguir fornece um exemplo de configuração:
zone "kms.aliyuncs.com" { type forward; forwarders { 100.100.2.136;100.100.2.138;}; };NotaA configuração para encaminhamento de rotas varia conforme o software de DNS. Para mais informações, consulte a documentação do seu software de DNS.
Acesse o console do Key Management Service. Na barra de navegação superior, selecione uma região. No painel de navegação à esquerda, escolha .
-
Na lista de instâncias, clique em no ID da instância desejada. Na página de detalhes, ative a opção Public Network Access na seção RD Multi-Account.
NotaSe uma instância KMS for compartilhada entre várias contas Alibaba Cloud, você poderá definir permissões de acesso à rede pública para cada conta.
Na aba Basic Information da página de detalhes da instância, localize o Public Endpoint. O endpoint é exibido após a ativação do acesso à rede pública e possui um formato semelhante a
kms.cn-hangzhou.aliyuncs.com.
Erro 'Unable to find valid certification path'
Possível causa 1: Seleção do certificado CA da instância KMS incorreta
Possível causa 2: Versão incorreta do SDK instalada
Recomendamos instalar a versão mais recente do SDK. A lista a seguir fornece os endereços dos repositórios open-source dos SDKs:
Impossível resolver o nome de domínio da instância KMS
Problema
Na VPC à qual a instância KMS pertence ou em uma VPC associada, uma aplicação não consegue acessar o nome de domínio da instância KMS. Por exemplo, o comando
ping kst-hzz62****.cryptoservice.kms.aliyuncs.comfalha ao resolver o nome de domínio, e a mensagem retornada contém "cannot resolve".Solução
Verifique se a configuração de DNS do seu servidor utiliza os servidores DNS padrão do Alibaba Cloud: 100.100.2.136 e 100.100.2.138. Para mais informações, consulte Do I need to modify the DNS configuration of the server to use PrivateZone?.
Erro 'Incorrect ClientKey password'
Problema
Causa
A senha especificada para a ClientKey está incorreta.
Solução
Código de status HTTP 413
O corpo da solicitação, após codificação com Protocol Buffers, não pode exceder 3 MB. Solicitações maiores que esse limite são rejeitadas com um código de status HTTP 413.
Erro 'UnknownHostException'
Problema
Quando sua aplicação usa o SDK de instância KMS para Java para acessar uma instância KMS, o seguinte erro é retornado:
Caused by: java.net.UnknownHostException: kst-hzz664da459rvtjtd****.cryptoservice.kms.aliyuncs.com.Solução
O gerenciamento de segredos do KMS é suportado no Android?
Não, o recurso de gerenciamento de segredos não é suportado atualmente no Android.
O endpoint do KMS está inacessível
Geralmente, esse problema ocorre porque o protocolo HTTPS não está ativado ao usar um SDK para acessar o KMS.
Para garantir a segurança dos dados, os endpoints do KMS suportam apenas o protocolo HTTPS. Ao usar um SDK para acessar um endpoint do KMS, execute o código a seguir para assegurar que o HTTPS esteja habilitado para o KMS.
req.setProtocol(ProtocolType.HTTPS);Data center on-premises não consegue acessar a instância KMS
Problema
Um data center on-premises está conectado a uma VPC do Alibaba Cloud. Sem nenhuma configuração adicional, o data center on-premises não consegue acessar uma instância KMS usando o nome de domínio kms.aliyuncs.com configurado no PrivateZone.
Solução
Erro 'QPS Limit Exceeded' quando o ACK sincroniza segredos
Causa
A sincronização de um grande número de segredos do KMS pode acionar a política de limitação do service, causando falha na sincronização.
Solução
Esse problema foi corrigido na versão 0.5.2 do
ack-secret-manager. Atualize para a versão 0.5.2 ou posterior.Erro 'MissingParameter' no gateway dedicado
Problema
Ao usar um SDK do Alibaba Cloud para chamar uma operação OpenAPI destinada a operações criptográficas por meio de um gateway dedicado, o seguinte erro é retornado:
MissingParamter AParamter x-kms-acccesskeyid does not exist in http header or body "$430c76cd-******.Causa
A versão da imagem da instância KMS é anterior à 3.0.0. Para usar um gateway dedicado na chamada de operações OpenAPI para operações criptográficas, a versão da imagem da instância KMS deve ser 3.0.0 ou posterior.
Solução
Na página Instances, verifique a versão da imagem nos detalhes da instância. Clique em Upgrade para atualizar a versão da imagem da instância KMS. Para mais informações, consulte Upgrade the image version of a KMS instance.
Problemas de validação de certificado de ISV terceirizado
Habilitar o acesso público permite que o ISV terceirizado se conecte por meio do gateway compartilhado, que utiliza um certificado assinado por uma autoridade certificadora (CA) confiável.
-