Introduction
Le 22 février 2024, Amazon Web Services (AWS) a annoncé la possibilité de partager les paramètres de Systems Manager Parameter Store entre plusieurs comptes.
C'est une nouveauté pour Parameter Store, mais AWS Secrets Manager a toujours pris en charge le partage de secrets entre comptes. Maintenant que les paramètres de Parameter Store peuvent être partagés, faut-il privilégier Parameter Store plutôt que Secrets Manager pour stocker et partager des secrets ?
Cet article présente les différences entre Secrets Manager et Parameter Store, puis détaille les étapes nécessaires pour créer et partager un paramètre secret entre comptes AWS.
Secrets Manager vs Parameter Store chiffré
Fonctionnalités et limites de Secrets Manager
- Les secrets sont automatiquement chiffrés à l'aide de clés KMS
- Les secrets peuvent être renouvelés automatiquement
- Taille maximale d'un secret : 64 Ko
- Les secrets peuvent être créés via la console web, la CLI, CloudFormation, Terraform, etc.
- Les secrets peuvent être répliqués automatiquement entre régions
- Prend en charge jusqu'à 10 000 requêtes
GetSecretValuepar seconde - Accessible depuis un large éventail de services AWS ainsi que des services tiers comme Hashicorp Vault
- Tarifs : 0,40 $ par secret et par mois ; 0,05 $ pour 10 000 appels d'API
- Les secrets peuvent être partagés en modifiant la politique de ressource du secret
Fonctionnalités et limites de Parameter Store
- Les paramètres peuvent être chiffrés avec des clés KMS lorsqu'on utilise le type
SecureString - La rotation automatique n'est pas prise en charge
- Taille maximale d'un paramètre avancé : 8 Ko
- Les paramètres
SecureStringne peuvent pas être créés via CloudFormation, mais peuvent l'être via la console web, la CLI, Terraform, etc. - Les paramètres sont régionaux, sans réplication automatique
- Prend en charge jusqu'à 10 000 requêtes
GetParameterpar seconde (40 par défaut) - Accessible depuis une liste plus restreinte de services AWS
- Tarifs : 0,05 $ par paramètre partagé et par mois ; 0,05 $ pour 10 000 appels d'API
- Les paramètres peuvent être partagés via Resource Access Manager (RAM)
Secrets Manager comme Parameter Store sont compatibles avec doitintl/secrets-init — un outil open source qui simplifie l'intégration des services de gestion de secrets aux workloads exécutés sur des clusters Kubernetes. Pour en savoir plus, consultez notre article de blog dédié.
Lequel choisir ?
Secrets Manager reste le premier service à envisager pour stocker des secrets. Conçu dès l'origine pour cet usage, il bénéficie d'une large compatibilité avec les services AWS et propose des fonctionnalités telles que la rotation automatique et une taille de secret supérieure à celle des paramètres de Parameter Store.
Vous pouvez toutefois envisager Parameter Store pour partager des secrets dans les cas suivants :
- Vous gérez un très grand nombre de secrets et les économies réalisées seraient significatives (0,05 $ contre 0,40 $ par secret et par mois)
- Vous disposez déjà de paramètres secrets dans Parameter Store et n'avez pas besoin des fonctionnalités supplémentaires offertes par Secrets Manager
Créer et partager un paramètre secret chiffré
La documentation Parameter Store inclut un guide pas à pas pour créer et partager un paramètre. La création et le partage d'un paramètre SecureString suit un processus similaire, à ceci près qu'il faut également partager la clé KMS utilisée pour chiffrer le paramètre.
1. Créer une clé dans KMS
Commencez par créer une clé KMS symétrique dans AWS, qui servira à chiffrer le paramètre. La documentation complète d'AWS pour cette procédure est disponible ici.

Capture d'écran du processus de création de la clé KMS. La création d'un alias est facultative mais recommandée.
Dans la politique de cette clé, ajoutez une condition autorisant son utilisation par les autres comptes. Pour partager cette clé et ce paramètre avec l'ensemble de votre organisation AWS, vous pouvez recourir à une Condition dans la politique, comme expliqué dans cet article AWS re:Post.

Capture d'écran du récapitulatif final du processus de création de la clé KMS
2. Créer un paramètre avancé dans Parameter Store
Une fois la clé KMS créée, créez le paramètre dans Parameter Store comme indiqué dans la documentation AWS.
Choisissez le niveau de paramètre Advanced, le type SecureString, puis sélectionnez la clé KMS que vous venez de créer.

Seuls les paramètres avancés peuvent être stockés ! Si vous choisissez par erreur un paramètre standard, pas d'inquiétude : vous pourrez le modifier ensuite.
3. Partager le paramètre via Resource Access Manager (RAM)
Une fois le paramètre créé, ouvrez Resource Access Manager et créez un nouveau Resource Share pour le paramètre, comme indiqué dans la documentation AWS.
Utilisez la politique AWSRAMDefaultPermissionsSSMParameterReadOnly à l'étape Associate managed permissions, puis indiquez les comptes autorisés à accéder au paramètre (ou l'ensemble de votre organisation AWS si vous le préférez) à l'étape Grant access to principals.

Notez que les tags associés au resource share ne modifient pas ceux du paramètre lui-même

L'autorisation AWSRAMDefaultPermissionsSSMParameterReadOnly suffit si un accès en lecture seule est souhaité

Dans cet exemple, seul le compte 123456789012 aura accès au paramètre partagé. N'ajoutez pas le compte où le paramètre existe déjà.

La dernière étape est un simple écran de récapitulatif
4. Accepter le partage de ressource
Une fois le resource share créé, les comptes externes peuvent avoir à accepter l'invitation.
Si les comptes concernés font partie de votre organisation AWS et que le partage de ressources au sein de l'organisation est activé, l'acceptation est automatique.
Pour les comptes hors de votre organisation, ou si le partage de ressources au sein de l'organisation n'est pas activé, le resource share devra être accepté par chaque compte.
5. Vérifier l'accès au paramètre partagé
Une fois le paramètre créé et partagé, place aux tests !
Pour tester rapidement l'accès au paramètre depuis un compte externe, utilisez l'AWS CLI (depuis un terminal local ou via AWS CloudShell) :
aws ssm get-parameter --name <ARN complet du paramètre> --with-decryption
Voici un exemple de sortie affichant la valeur déchiffrée du paramètre :

Si vous préférez ne pas afficher la valeur du paramètre secret, omettez simplement le flag with-decryption
Références
- https://github.com/doitintl/secrets-init
- https://www.doit.com/kubernetes-and-secrets-management-in-cloud/
- https://aws.amazon.com/about-aws/whats-new/2024/02/aws-systems-manager-parameter-store-cross-account-sharing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_limits.html
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/integrating.html
- https://developer.hashicorp.com/hcp/docs/vault-secrets/integrations/aws-secrets-manager
- https://aws.amazon.com/secrets-manager/pricing/
- https://docs.aws.amazon.com/secretsmanager/latest/userguide/auth-and-access_examples_cross.html
- https://docs.aws.amazon.com/general/latest/gr/ssm.html
- https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutParameter.html#systemsmanager-PutParameter-request-Type
- https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html
- https://aws.amazon.com/systems-manager/pricing/#Parameter_Store
- https://docs.aws.amazon.com/ram/latest/userguide/shareable.html
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-shared-parameters.html
- https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html#create-symmetric-cmk
- https://repost.aws/knowledge-center/kms-key-organization-account
- https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-create-console.html
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-sharing-create.html
- https://docs.aws.amazon.com/ram/latest/userguide/getting-started-sharing.html#getting-started-sharing-orgs
- https://docs.aws.amazon.com/ram/latest/userguide/working-with-shared-invitations.html
- https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html
- https://gist.github.com/enigmango/0e2332bfc0b3cbbf234a7c5968020eaf
Pouvoir partager des paramètres Parameter Store est un excellent ajout, en particulier pour diffuser des paramètres non sensibles depuis un compte central vers l'ensemble d'une organisation AWS. Pour la gestion des secrets, en revanche, Secrets Manager doit rester le premier choix.
Exemple de code
Envie d'essayer en Infrastructure-as-Code ? Ce gist GitHub fournit un exemple de code Terraform pour créer un paramètre chiffré partagé au sein de votre organisation AWS.
Pour aller plus loin
Chez DoiT International, nous mettons notre expertise au service de Secrets Manager, Parameter Store et de nombreux autres services cloud. Pour en savoir plus sur nos prestations de conseil, rendez-vous sur https://www.doit.com/services/.