etalab / transport-site

Rendre disponible, valoriser et améliorer les données transports
https://transport.data.gouv.fr
198 stars 30 forks source link

Faire un backup des configurations de production #1549

Open thbar opened 3 years ago

thbar commented 3 years ago

Il faut sauvegarder quelque part les configurations de production, car reconstruire certains credentials pourrait être non trivial.

Je vais faire une copie rapide dans un gestionnaire de mot de passe déjà en place de mon côté, et on a commencé à discuter avec @fchabouis pour en prendre un au niveau de l'équipe et ainsi pouvoir partager ce qui est pertinent.

thbar commented 3 years ago

J'ai fait un backup dans mon gestionnaire de mots de passe pour les applications suivantes:

Ping @fchabouis pour info

Prochaine étape choix d'un gestionnaire de mot de passe d'équipe, je garde ouvert.

thbar commented 2 years ago

Il faudrait une tâche récurrente là dessus (trimestrielle par exemple).

fchabouis commented 1 year ago

On a maintenant un compte Dashlord.

Je vais essayer de rajouter @ChristinaLaumond et @cyrilmorin dessus.

@thbar est-ce que la config de prod avait été sauvegardée dessus ?

thbar commented 1 year ago

Tu veux dire Dashlane?

Non, j’avais fait une copie dans mon 1password, car actuellement le souci avec Dashlane c’est que les super admins ont à ma connaissance accès à tout, et ça fait donc une cible de choix.

Le lun. 12 déc. 2022 à 14:21, Francis Chabouis @.***> a écrit :

On a maintenant un compte Dashlord.

Je vais essayer de rajouter @ChristinaLaumond https://github.com/ChristinaLaumond et @cyrilmorin https://github.com/cyrilmorin dessus.

@thbar https://github.com/thbar est-ce que la config de prod avait été sauvegardée dessus ?

— Reply to this email directly, view it on GitHub https://github.com/etalab/transport-site/issues/1549#issuecomment-1346489769, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAACPHOMC64R5YMAFVH2DDTWM4RG7ANCNFSM4ZIETITA . You are receiving this because you were mentioned.Message ID: @.***>

-- Thibaut

https://www.logeek.fr http://www.logeek.fr https://thibautbarrere.com

AntoineAugusti commented 1 year ago

Je sonde Clever Cloud, ticket #ZO827H


Nous souhaiterions en savoir plus sur la gestion des variables d'environnement. Ces données sont sensibles et sont critiques si nous devons redéployer une infrastructure ailleurs.

Pourriez-vous nous indiquer si des procédures particulières sont mises en place côté Clever pour protéger ces données / réaliser des sauvegardes ?

Nous souhaiterions potentiellement dumper et sauvegarder ces variables d'environnement en dehors de Clever Cloud. Avez-vous des recommendations pour procéder à ceci ? Je sais qu'il est possible d'utiliser l'API potentiellement pour réaliser ceci.

AntoineAugusti commented 1 year ago

Leur réponse


Les variables sont stockées chiffrées dans notre backend, l'intégralité des variables sont backupés mais il n'y a pas d'outil automatique aujourd'hui pour restaurer une précedente version des variables pour une app donnée.

Il n'y a pas de procédure particulière pour les dumper ou les restaurer : vous pouvez le faire directement depuis la cli clever env, il y doit également y avoir des endpoints d'api je peux vous les retrouver.

Nous avons dans notre roadmap d'améliorer le versionnement et la gestion des secrets dans les var d'env mais cela est chantier qui n'est pas encore lancé

AntoineAugusti commented 1 year ago

J'ai fait un petit script en utilisant leur API pour récupérer les variables d'env sur notre org et les mettre dans un fichier.

On pourrait à terme en faire un job et stocker ça de manière chiffrée sur un autre hébergeur. @thbar et moi on était plus partis sur une sauvegarde régulière de notre côté (LastPass / 1Password) ~tous les trimestres.

Mix.install([{:oauther, "~> 1.1"}, {:httpoison, "~> 2.0"}, {:jason, "~> 1.3"}])

defmodule CleverCloudClient do
  # See https://www.clever-cloud.com/doc/extend/cc-api/
  @base_url URI.new!("https://api.clever-cloud.com")
  @org_id "REDACTED"
  # Create an OAuth consumer: https://console.clever-cloud.com/organisations/REDACTED/oauth-consumers/new
  @consumer_key "REDACTED"
  @consumer_secret "REDACTED"
  # Generate those using the Clever Cloud CLI `clever login`
  @token "REDACTED"
  @token_secret "REDACTED"

  def get_applications do
    "/v2/organisations/#{@org_id}/applications" |> get_request()
  end

  def get_env_variables(app_id) do
    "/v2/organisations/#{@org_id}/applications/#{app_id}/env" |> get_request()
  end

  defp get_request(url) do
    get_url = @base_url |> URI.merge(url) |> URI.to_string()
    params = OAuther.sign("GET", get_url, [], oauth_credentials())

    {auth_header, _req_params} = OAuther.header(params)
    HTTPoison.get!(get_url, [auth_header])
  end

  defp oauth_credentials do
    OAuther.credentials(
      consumer_key: @consumer_key,
      consumer_secret: @consumer_secret,
      token: @token,
      token_secret: @token_secret
    )
  end
end

CleverCloudClient.get_applications()
|> Map.fetch!(:body)
|> Jason.decode!()
|> Enum.map(&Map.take(&1, ["id", "name"]))
|> Enum.each(fn %{"id" => app_id, "name" => app_name} ->
  env =
    app_id
    |> CleverCloudClient.get_env_variables()
    |> Map.fetch!(:body)

  IO.inspect({app_name, env})
  File.write("/tmp/#{app_name}", env)
end)
thbar commented 1 year ago

@AntoineAugusti merci d'avoir conservé le code et d'avoir fouillé, ça servira sûrement à un moment !

thbar commented 1 year ago

Backup fait aujourd'hui sur les 4 configurations suivantes:

Format "expert" dans CleverCloud.