J'ai essayé de récupérer ou d'accéder à un secret AWS Secrets Manager chiffré, mais j'ai reçu une erreur d'accès à la clé AWS Key Management Service (AWS KMS).
Résolution
Si vous ne parvenez pas à récupérer un secret Secrets Manager ou à y accéder en raison de problèmes d'autorisation liés à la clé AWS KMS, l'une des erreurs suivantes peut s'afficher :
- « 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 »
- « Une erreur inconnue s’est produite »
- « Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key. »
Pour résoudre ce problème, mettez à jour la stratégie de clé AWS KMS avec les autorisations appropriées pour récupérer le secret chiffré. Puis, chiffrez à nouveau le secret à l'aide de la clé AWS KMS mise à jour.
Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la page Résoudre les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Clés gérées par AWS KMS
Pour accéder au secret depuis un autre compte, vérifiez que le secret n’est pas chiffré avec une clé gérée par AWS KMS. Vous ne pouvez pas accéder à un secret chiffré via une clé gérée par AWS KMS depuis un autre compte.
Étant donné qu’elles sont en lecture seule, vous ne pouvez pas modifier les stratégies de clés gérées par AWS. Vous ne pouvez donc pas accorder d'autorisations entre comptes pour les stratégies clés gérées par AWS.
Accès entre comptes
Pour les comptes croisés, vérifiez que la stratégie basée sur l’identité et la stratégie basée sur les ressources autorisent le principal à accéder à la clé AWS KMS.
Exemple de stratégie d'identité qui permet au principal d'accéder à la clé AWS KMS :
{ "Version": "2012-10-17", "Statement": [
{
"Effect": "Allow",
"Action": "kms:Decrypt",
"Resource": "arn:aws:kms:Region:AccountID:key/EncryptionKey"
}
]
}
Exemple de stratégie basée sur les ressources KMS qui permet au principal d'accéder à la clé AWS KMS :
{ "Effect": "Allow", "Principal": {
"AWS": [
"arn:aws:iam::AccountID:user/UserName",
"arn:aws:iam::AccountID:role/RoleName"
]
},
"Action": [
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
Rechiffrer le secret à l'aide de la clé AWS KMS mise à jour
Utilisez la console Secrets Manager ou l'AWS CLI pour rechiffrer le secret avec la clé AWS KMS mise à jour.
Console Secrets Manager
Remarque : Si vous utilisez la console Secrets Manager, Secrets Manager crée une nouvelle version du secret et le chiffre avec la clé mise à jour. Assurez-vous que les applications qui utilisent le secret sont autorisées à le déchiffrer à l'aide de la clé mise à jour. Pour plus d’informations, consultez la section Chiffrement et déchiffrement de secret dans AWS Secrets Manager.
- Ouvrez la console Secrets Manager.
- Pour Nom du secret, choisissez votre secret.
- Sélectionnez Actions, puis Modifier la clé de chiffrement.
- Sélectionnez Créer une nouvelle version du secret avec une nouvelle clé de chiffrement, puis Enregistrer.
AWS CLI
Effectuez les étapes 1 à 3 depuis le compte source où se trouve le secret et l'étape 4 depuis l'autre compte :
-
Exécutez la commande get-secret-value pour obtenir la valeur secrète :
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --query SecretString --output text {"CrossAccount":"DefaultEncryption"}
-
Créez un fichier nommé creds.txt :
cat creds.txt {"CrossAccount":"DefaultEncryption"}
-
Exécutez la commande update-secret pour rechiffrer la clé de chiffrement :
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"
}
Remarque : Si vous utilisez une clé gérée par le client, vous devez également disposer des autorisations kms:GenerateDataKey et kms:Decrypt sur la clé.
-
Exécutez la commande get-secret-value à partir de l'autre compte :
aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:123456789012:secret:cross-account --version-stage AWSCURRENT --profile {"CrossAccount":"DefaultEncryption"}
Informations connexes
How to use resource-based policies in the AWS Secrets Manager console to securely access secrets across AWS accounts
Comment faire pour partager les secrets AWS Secrets Manager entre des comptes AWS ?
Accéder aux secrets AWS Secrets Manager à partir d’un autre compte