Como posso resolver problemas de acesso a um segredo criptografado do AWS Secrets Manager?

5 minuto de leitura
0

Quero recuperar ou acessar um segredo do AWS Secrets Manager, mas recebo um erro.

Resolução

Se você não conseguir recuperar ou acessar um segredo do Secrets Manager, talvez receba um dos seguintes erros:

  • "You can't access a secret from a different AWS account if you encrypt the secret with the default KMS service key."
  • "Access to KMS is not allowed"
  • "InternalFailure"
  • "Ocorreu um erro desconhecido"
  • "Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key."

Para solucionar qualquer um desses erros, realize as etapas a seguir.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está utilizando a versão mais recente da AWS CLI.

Verifique se o segredo não está criptografado com uma chave gerenciada pelo AWS KMS ao acessar um segredo em outra conta.

As políticas de chaves gerenciadas pela AWS não podem ser editadas porque são somente para leitura. Entretanto, é possível visualizar a chave gerenciada pelo AWS Key Management Service (AWS KMS) e as políticas de chaves gerenciadas pelo cliente. Como as políticas de chaves gerenciadas pelo AWS KMS não podem ser editadas, permissões para contas cruzadas não podem ser concedidas para essas políticas de chaves. Os segredos do Secrets Manager criptografados usando uma chave gerenciada pelo AWS KMS não podem ser acessados por outras contas da AWS.

Para situações de contas cruzadas, verifique se a política baseada em identidade e a política baseada em recursos permitem que a entidade principal acesse a chave do AWS KMS.

A política de identidade deve permitir que a entidade principal acesse a chave do AWS KMS, semelhante ao seguinte exemplo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
    }
  ]
}

A política baseada em recursos deve permitir que a entidade principal acesse a chave do AWS KMS, semelhante ao seguinte exemplo:

{
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::AccountID:user/UserName",
      "arn:aws:iam::AccountID:role/RoleName"
    ]
  },
  "Action": [
    "kms:Decrypt",
    "kms:DescribeKey"
  ],
  "Resource": "*"
}

Depois que a chave do AWS KMS for atualizada, verifique se o segredo está criptografado com a nova chave do AWS KMS.

Atualizar a chave do AWS KMS que está associada a um segredo do Secrets Manager usando a AWS CLI não criptografa novamente as versões atuais ou anteriores do segredo com a nova chave KMS. Isso significa que contas externas, também chamadas de contas cruzadas, não podem acessar o segredo porque o segredo não foi criptografado novamente com a nova chave do AWS KMS. É preciso criptografar novamente o segredo usando a nova chave do AWS KMS para recuperar o valor secreto da conta cruzada.

Observação: usar o console do Secrets Manager para alterar a chave do AWS KMS que está associada a um segredo, por padrão, cria uma nova versão do segredo e a criptografa com a nova chave do AWS KMS. Para obter mais informações, consulte Criptografia e descriptografia secretas no AWS Secrets Manager.

Criptografe novamente o segredo com a nova chave do AWS KMS.

Siga as etapas a seguir para criptografar novamente o segredo com a nova chave do AWS KMS usando o Console de Gerenciamento da AWS ou a AWS CLI.

Console de Gerenciamento da AWS

1.    Abra o console do Secrets Manager.

2.    Em Nome do segredo, selecione seu segredo.

3.    Selecione Ações e, em seguida, selecione a lista suspensa, selecione a chave do AWS KMS, marque a caixa de seleção Criar nova versão do segredo com nova chave de criptografia e, em seguida, selecione Salvar.

AWS CLI

Siga estas etapas a partir da conta de origem em que o segredo reside.

1.    Execute o comando get-secret-value da AWS CLI semelhante ao seguinte:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text

    {"CrossAccount":"DefaultEncryption"}

2.    Crie um arquivo chamado creds.txt.

$ cat creds.txt

    {"CrossAccount":"DefaultEncryption"}

3.    Execute o comando update-secret da AWS CLI para criptografar novamente a chave de criptografia de modo semelhante ao seguinte:

.    Observação: se você usa uma chave gerenciada pelo cliente, também é preciso ter as permissões kms:GenerateDataKey e kms:Decrypt na chave.

$ aws secretsmanager update-secret --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --secret-string file://creds.txt

    {
    "ARN": "arn:aws:secretsmanager:us-east-1:123456789012:cross-account",
    "Name": "cross-account",
    "VersionId": "f68246e8-1cfb-4c3b-952b-17c9298d3462"
    }

4.    Execute o comando get-secret-value da AWS CLI a partir da conta cruzada de modo semelhante ao seguinte:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile

    {"CrossAccount":"DefaultEncryption"}

Informações relacionadas

Como usar políticas baseadas em recursos no console do AWS Secrets Manager para acessar segredos com segurança em todas as contas da AWS

Como faço para compartilhar segredos do AWS Secrets Manager entre contas da AWS?

Permissões para segredos do AWS Secrets Manager para usuários de outra conta

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos