Simulation de namespace Vault dans Google Secret Manager
Simulation de namespace Vault dans Google Secret Manager

Simulation de namespace Vault dans Google Secret Manager

La gestion sécurisée des secrets et des informations sensibles est cruciale pour garantir la sécurité des données dans les applications modernes.

Les entreprises doivent s'assurer que leurs secrets, tels que les clés d'API, les mots de passe, les certificats et autres informations sensibles, soient stockés de manière sécurisée et accessibles uniquement aux applications ou aux utilisateurs autorisés.

Dans cet article, nous allons explorer comment simuler un namespace Vault dans Google Secret Manager en utilisant les fonctionnalités avancées d'IAM conditionnel de Google Cloud, une approche qui offre une gestion fine des autorisations pour les secrets dans un environnement Google Cloud.

C’est quoi Vault ?

Vault est une solution open-source de gestion de secrets développée par HashiCorp. Elle permet de stocker, gérer et distribuer les secrets de manière sécurisée, en fournissant des fonctionnalités telles que la génération dynamique de secrets, la rotation automatique des clés ou l'audit des accès.

Vault offre également une gestion fine des autorisations, permettant de contrôler les accès aux secrets en fonction des rôles et des politiques définies notamment grâce au concept de namespace.

image

Et Google Secret Manager ?

Google Secret Manager est un service de gestion de secrets entièrement géré qui fait partie de l'écosystème Google Cloud.

Il permet de stocker et de gérer les secrets, tels que les clés d'API, les mots de passe, les certificats et autres informations sensibles, de manière sécurisée dans le cloud mais manque de fonctionnalités en comparaison de Vault.

image

Simulation de namespace Vault dans Google Secret Manager

Bien que Google Secret Manager ne propose pas nativement de fonctionnalité de namespace, il est possible de simuler cette fonctionnalité en utilisant les fonctionnalités d'organisation dans les dossiers ou bien l'IAM conditionnel.

Il existe plusieurs possibilités pour simuler des namespaces :

  • Utiliser un projet GCP par namespace
  • Utiliser un seul projet avec des IAM conditionnels

Un projet par namespace

Cette solution a l'avantage d'être facile à mettre en œuvre mais peut devenir assez difficile à gérer de part le nombre important de projets créés. L'avantage est par contre de pouvoir utiliser des IAM de manière assez simple pour donner des droits sur les différents projets créés. Par exemple, en créant un dossier par équipe, on peut simplement donner le droit à l'équipe team1 via le code Terraform suivant :

resource "google_folder_iam_binding" "default" {
  folder  = "folders/1234567"
  role    = "roles/secretmanager.admin"

  members = [
    "group:team1@example.com",
  ]
}

On reproduit le processus pour chacune des équipes.

Un seul projet et des IAM conditionnels

L'IAM conditionnel permet de définir des règles d'autorisation basées sur certaines conditions telles que le nom de la ressource. Voici un exemple de code Terraform permettant de donner l'autorisation d'admin à la Team 1 à tous les secrets dont le nom sera préfixé par team1_:

resource "google_project_iam_binding" "secret_accessor" {
  project = "your-project-id"
  role    = "roles/secretmanager.secretAccessor"
    
  members = [
    "group:team1@example.com",
  ]
  condition {
    title       = "Team 1"
    description = "Team 1"
    expression  = "resource.name.startsWith('team1_')"
  }
}

resource "google_project_iam_binding" "secret_version_adder" {
  project = "your-project-id"
  role    = "roles/secretmanager.secretVersionAdder"
  members = [
    "group:team1@example.com",
  ]
  condition {
    title       = "Team 1"
    description = "Team 1"
    expression  = "resource.name.startsWith('team1_')"
  }
}

resource "google_project_iam_binding" "secret_version_viewer" {
  project = "your-project-id"
  role    = "roles/secretmanager.viewer"
  members = [
    "<group:team1@example.com>",
  ]
}

Le problème réside néanmoins dans le fait que si les équipes ont des Basic Role tel que Editor ou Owner, elles seront quand même capables de lister les secrets des autres équipes.

Il est donc conseillé d’utiliser un projet spécifique pour la gestion des secrets.

Conclusion

Bien qu'il soit possible aujourd'hui de poser des labels ou des annotations sur les secrets, il n'est pas possible de s'en servir dans les IAM conditionnels. Les deux solutions présentées ont chacune leurs avantages et leurs inconvénients et ne sont pas aussi complètes que des solutions tierces telles que Vault, mais elles ont une complexité opérationnelle bien moindre.

Merci pour votre lecture. Cet article vous a plu, partagez sur vos réseaux 😉

Thibault Ayanides - Mai, 2023

image