He intentado recuperar un secreto cifrado de AWS Secrets Manager o acceder a él, pero he recibido un error de acceso a la clave de AWS Key Management Service (AWS KMS).
Resolución
Si no puedes recuperar un secreto de Secrets Manager ni acceder a él debido a problemas con los permisos de la clave de AWS KMS, es posible que recibas uno de los siguientes errores:
- “You can't access a secret from a different AWS account if you encrypt the secret with the default KMS service key”.
- "No se permite el acceso a KMS"
- "Fallo interno"
- "Se ha producido un error desconocido"
- «No se permite el acceso al KMS. This version of secret is not encrypted with the current KMS key”.
Para resolver este problema, actualiza la política de claves de AWS KMS con los permisos correctos para recuperar el secreto cifrado. A continuación, vuelve a cifrar el secreto con la clave de AWS KMS actualizada.
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Claves administradas de AWS KMS
Para acceder al secreto desde otra cuenta, comprueba que el secreto no esté cifrado con una clave administrada de AWS KMS. No puedes acceder a un secreto cifrado con clave administrada de AWS KMS desde otra cuenta.
Como son de solo lectura, no puedes editar las políticas de claves administradas de AWS. Por lo tanto, no puedes conceder permisos entre cuentas para las políticas de claves administradas de AWS.
Acceso entre cuentas
En el caso de las cuentas cruzadas, comprueba que la política basada en la identidad y la política basada en los recursos permitan explícitamente a la entidad principal acceder a la clave de AWS KMS.
Ejemplo de política de identidad que permite a la entidad principal acceder a la clave de AWS KMS:
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
}
]
}
Ejemplo de política basada en recursos de KMS que permite a la entidad principal acceder a la clave de AWS KMS:
{ "Effect": "Allow", "Principal": {
"AWS": [
"arn:aws:iam::AccountID:user/UserName",
"arn:aws:iam::AccountID:role/RoleName"
]
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
Volver a cifrar el secreto con la clave de AWS KMS actualizada
Utiliza la consola de Secrets Manager o la AWS CLI para volver a cifrar el secreto con la clave de AWS KMS actualizada.
Consola de Secrets Manager
Nota: Si utilizas la consola de Secrets Manager, Secrets Manager crea una nueva versión del secreto y lo cifra con la clave actualizada. Asegúrate de que las aplicaciones que utilizan el secreto tengan permiso para descifrarlo con la clave actualizada. Para obtener más información, consulta Secret encryption and decryption in Secrets Manager (Cifrado y descifrado de secretos en Secrets Manager).
- Abre la consola de Secrets Manager.
- En Nombre del secreto, selecciona tu secreto.
- Selecciona Acciones y, a continuación, selecciona Editar clave de cifrado.
- Selecciona Create new version of secret with new encryption key (Crear una nueva versión del secreto con una nueva clave de cifrado) y, a continuación, selecciona Guardar.
AWS CLI
Completa los pasos 1 a 3 desde la cuenta de origen donde está el secreto y el paso 4 desde la otra cuenta:
-
Ejecuta el comando get-secret-value para obtener el valor del secreto:
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text {"CrossAccount":"DefaultEncryption"}
-
Crea un archivo con el nombre creds.txt.
cat creds.txt {"CrossAccount":"DefaultEncryption"}
-
Ejecuta el comando update-secret para volver a cifrar la clave de cifrado:
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"
}
Nota: Si usas una clave administrada por el cliente, también deberás tener los permisos kms:GenerateDataKey y kms:Decrypt en la clave.
-
Ejecuta el comando get-secret-value desde la otra cuenta:
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile {"CrossAccount":"DefaultEncryption"}
Información relacionada
Cómo usar las políticas basadas en los recursos en la consola de AWS Secrets Manager para acceder de forma segura a los secretos de las cuentas de AWS
¿Cómo comparto los secretos de AWS Secrets Manager entre cuentas de AWS?
Access AWS Secrets Manager secrets from a different account (Acceso a los secretos de AWS Secrets Manager desde otra cuenta)