Ne laissez pas de mots de passe dans votre code ; Utilisez plutôt le gestionnaire de secrets d'AWS

0
182

AWS Secrets Manager facilite le travail avec les clés d'accès (comme les informations d'identification de la base de données) en les stockant à distance et en contrôlant l'accès d'entre eux derrière les autorisations IAM. Cela vous permet de faire pivoter en douceur les clés d'accès et de récupérer la dernière en cas de besoin.

Que fait Secrets Manager ?

Ici&# 8217;s un exemple. Supposons que vous créiez un script de génération pour vos serveurs qui automatisera votre processus d'installation, généralement pour utiliser la mise à l'échelle automatique et le déploiement automatisé. Vous devez connecter WordPress à un serveur MySQL externe.

La solution la plus simple serait de stocker le mot de passe MySQL en clair dans le cadre du script de construction. Ce n'est évidemment pas la meilleure pratique en matière de sécurité et ne s'étend pas bien au-delà d'une seule instance exploitée par un seul employé. De plus, si vous séparez vos environnements de développement et de production, ce secret doit être mis à jour pour chaque environnement, ce qui est fastidieux.

La meilleure solution est Secrets Manager. Au lieu de stocker le mot de passe MySQL en clair, vous le stockez dans Secrets Manager, et lorsque vous devez l'utiliser, vous effectuez un appel API à Secrets Manager, qui renvoie le secret. Cela vous permet de sécuriser l'accès à vos secrets à l'aide de rôles et d'autorisations IAM, ce qui est un bien meilleur système, et que vous utilisez déjà si votre entreprise est sur AWS.

Aussi, parce que Secrets Manager agit comme un seul magasin de données faisant autorité, il rend la rotation des secrets beaucoup plus facile, ce qui est un élément important de la sécurité continue.

Pour être clair, le gestionnaire de secrets ne rend pas automatiquement la gestion des secrets importants triviale. En fin de compte, vous demandez toujours des informations sensibles qui seront stockées sur disque ou en mémoire sur votre serveur. Toute personne pouvant accéder au serveur pourra toujours accéder au secret, et vous devrez mettre en place de bonnes stratégies d'autorisation IAM pour verrouiller l'accès. Cependant, sans Secrets Manager, vous ne seriez pas du tout en mesure de contrôler cet accès à l'aide d'IAM, et vous auriez potentiellement des clés importantes stockées dans d'autres endroits, tels que des dépôts Git facilement accessibles.

Secrets Manager peut être utilisé pour stocker tout type de clé, y compris JSON. Cependant, il est couramment utilisé pour stocker les informations d'identification de la base de données et, en tant que tel, intègre une intégration pour RDS qui peut automatiquement configurer et faire pivoter les informations d'identification pour vous.

Comment utiliser Secrets Manager

Rendez-vous sur la console Secrets Manager, et cliquez sur “Stocker un nouveau secret.”

Si vous configurez un secret pour stocker les informations d'identification pour RDS ou tout autre AWS Services de base de données, vous pouvez le sélectionner comme type, saisir le nom d'utilisateur et le mot de passe et sélectionner la base de données que vous souhaitez utiliser avec ce secret.

Si vous stockez autre chose, vous devrez sélectionner “Autre type de secret.” Si vous stockez une série de paires clé-valeur, vous pouvez les saisir ici, mais si vous avez un schéma JSON plus complexe, vous pouvez saisir le tout en texte brut sous le “Plaintext&#8221 ; onglet.

Cliquez sur “Suivant,” donnez-lui un nom et toutes les balises que vous souhaitez ajouter à des fins d'organisation.

Sur l'écran suivant, vous avez la possibilité de configurer la rotation automatique. Cela appellera une fonction Lambda de votre choix tous les mois environ et fera pivoter la clé pour une nouvelle valeur. Vous souhaiterez probablement configurer votre fonction Lambda pour vider les caches de vos applications clientes, elles doivent donc toutes récupérer le nouveau secret.

Cliquez sur “Suivant,” et cliquez sur “Store” pour créer le secret.

Accéder au secret est assez facile. À condition que l'AWS CLI soit installée et configurée avec un utilisateur ou un rôle autorisé à récupérer le secret, vous pouvez y accéder à l'aide de secretsmanager get-secrete-value. Cela renvoie la sortie JSON, vous voudrez donc probablement la rediriger vers jq pour traitement.

aws secretsmanager get-secret-value –secret-id Confidential_Info | jq

Cela renvoie des métadonnées sur votre chaîne ainsi que sur la chaîne elle-même dans le paramètre SecretString. Il est encodé dans une seule chaîne, mais vous pouvez utiliser la directive fromjson de jq pour renvoyer la valeur JSON réelle de la chaîne.

| jq '.SecretString | fromjson'

Si vous récupérez des secrets très souvent (au moment de l'exécution), vous souhaiterez utiliser un cache côté client afin de ne pas envoyer des milliers de requêtes d'API chaque seconde. AWS fournit quelques bibliothèques côté client pour travailler avec Secrets Manager, mais vous pouvez toujours l'implémenter vous-même dans la langue de votre choix.

Si vous souhaitez automatiser la création de secrets, vous pouvez le faire avec create-secret :

aws secretsmanager create-secret –name <value> –secret-string <valeur>

Configuration de l'accès IAM

Vous souhaiterez configurer des stratégies IAM personnalisées pour accorder un accès en lecture à secrets basés sur l'Amazon Resource Name (ARN). À partir de la console de gestion IAM, créez un nouveau rôle (ou modifiez celui existant de votre instance EC2) et ajoutez “Read” accès pour Secrets Manager.

Ci-dessous, vous souhaitez ajouter un ARN à accès restreint. Saisissez l'ID secret et cliquez sur “Ajouter.”

Créez la nouvelle stratégie, attachez le rôle à votre instance EC2 si nécessaire et testez pour vérifier que vous pouvez accéder uniquement au secret attribué à la stratégie.