Eu tentei recuperar ou acessar um segredo criptografado do AWS Secrets Manager, mas recebi um erro de acesso à chave do AWS Key Management Service (AWS KMS).
Resolução
Se você não conseguir recuperar ou acessar um segredo do Secrets Manager devido a problemas de permissão de chave do AWS KMS, poderá receber um dos seguintes erros:
- “Não é possível acessar um segredo de uma conta AWS diferente se você criptografar o segredo com a chave de serviço KMS padrão.”
- "Access to KMS is not allowed"
- "InternalFailure"
- "Ocorreu um erro desconhecido"
- "Access to KMS is not allowed. Essa versão do segredo não é criptografada com a chave KMS atual.”
Para resolver esse problema, atualize a política de chaves do AWS KMS com as permissões corretas para recuperar o segredo criptografado. Em seguida, criptografe novamente o segredo com a chave atualizada do AWS KMS.
Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Chaves gerenciadas pelo AWS KMS
Para acessar o segredo de outra conta, verifique se o segredo não está criptografado com uma chave gerenciada pelo AWS KMS. Você não pode acessar um segredo criptografado por chave gerenciada pelo AWS KMS de outra conta.
Como elas são somente para leitura, você não pode editar as políticas de chaves gerenciadas pela AWS. Portanto, você não pode conceder permissões entre contas para políticas de chaves gerenciadas pela AWS.
Acesso entre contas
Para situações de contas cruzadas, verifique se a política baseada em identidade e a política baseada em recursos permitem explicitamente que a entidade principal acesse a chave do AWS KMS.
Exemplo de política de identidade que permite que a entidade principal acesse a chave do AWS KMS:
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
}
]
}
Exemplo de política baseada em recursos do KMS que permite que a entidade principal acesse a chave do AWS KMS:
{ "Effect": "Allow", "Principal": {
"AWS": [
"arn:aws:iam::AccountID:user/UserName",
"arn:aws:iam::AccountID:role/RoleName"
]
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
Criptografar novamente o segredo com a chave atualizada do AWS KMS
Use o console do Secrets Manager ou a AWS CLI para criptografar novamente o segredo com a chave atualizada do AWS KMS.
Console do Secrets Manager
Observação: se você usar o console do Secrets Manager, o Secrets Manager criará uma nova versão do segredo e a criptografará com a chave atualizada. Certifique-se de que os aplicativos que usam o segredo tenham permissão para descriptografar o segredo com a chave atualizada. Para mais informações, consulte Criptografia e descriptografia de segredos no AWS Secrets Manager.
- Abra o console do Secrets Manager.
- Em Nome do segredo, selecione seu segredo.
- Escolha Ações e, em seguida, Editar chave de criptografia.
- Selecione Criar nova versão do segredo com a nova chave de criptografia e escolha Salvar.
AWS CLI
Realize as etapas 1 a 3 da conta de origem onde está o segredo e a etapa 4 da outra conta:
-
Execute o comando get-secret-value para obter o valor do segredo:
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text {"CrossAccount":"DefaultEncryption"}
-
Crie um arquivo chamado creds.txt:
cat creds.txt {"CrossAccount":"DefaultEncryption"}
-
Execute o comando update-secret para criptografar novamente a chave de criptografia:
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"
}
Observação: se você usa uma chave gerenciada pelo cliente, também é preciso ter as permissões kms:GenerateDataKey e kms:Decrypt na chave.
-
Execute o comando get-secret-value na outra conta:
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?
Acessar os segredos do AWS Secrets Manager de outra conta