Open10

CICD(ArgoCD)で結局secretsはどうやって保管すべきか。

harrythecodeharrythecode

問題

ArgoCD、大変便利ですよね。ただ便利な反面「K8sのsecretsってgitとかに上げても良いの?」となったりしませんか。gitにそのまま平文のAPIキーなんかを置いておくのは気が引けますよね。

公式によると多くの人は以下のようなツールやサービスを使って問題を解決してるようです。( https://argo-cd.readthedocs.io/en/latest/operator-manual/secret-management/ )

  • Bitnami Sealed Secrets
  • External Secrets Operator
  • Hashicorp Vault
  • Bank-Vaults
  • Helm Secrets
  • Kustomize secret generator plugins
  • aws-secret-operator
  • KSOPS
  • argocd-vault-plugin
  • argocd-vault-replacer
  • Kubernetes Secrets Store CSI Driver
  • Vals-Operator
  • argocd-secret-replacer

今回はそれらを1つずつ見ていって「具体を知ろう」というのが主旨になってます。

追記: 結論

  • 特定のクラウドベンダに依存しない
  • gitに暗号化したファイルを置きたい

これらの条件に当てはまるのは「KSOPS」かな。

harrythecodeharrythecode

Bitnami Sealed Secrets

https://github.com/bitnami-labs/sealed-secrets

やってることを3つの要点でまとめると、、、

  1. シークレットの暗号化と管理

    • SealedSecretsを使い、Kubernetesシークレットを暗号化して安全にGitなどに保存可能。
    • 暗号化されたシークレット(SealedSecret)は、ターゲットクラスタのコントローラ以外には復号不可能。
  2. 柔軟な利用とスコープ設定

    • シークレットを名前空間限定(strict)、名前空間全体(namespace-wide)、クラスタ全体(cluster-wide)のスコープで利用可能。
    • スコープ設定により、特定の利用範囲で安全に管理できる。
  3. 導入と運用のシンプルさ

    • Helmやkubectlでコントローラをインストール。kubesealツールで暗号化操作が可能。
    • シークレットの更新、パッチ適用、ローテーションなどの高度な管理機能を提供。

所感

helmと相性が良さそう。ただしあくまで helmのvaluesファイルのみを対象としてるので、例えば、K8sのsecrets yamlなんかを暗号化して展開、なんかは向いてなさそう。

harrythecodeharrythecode

External Secrets Operator

https://github.com/external-secrets/external-secrets

External Secrets Operatorは、AWS Secrets Manager、HashiCorp Vault、Google Secrets Manager、Azure Key Vault、IBM Cloud Secrets Manager、CyberArk Conjur、Pulumi ESCなどの外部シークレット管理システムを統合するKubernetesオペレータです。オペレーターは外部APIから情報を読み取り、その値をKubernetesシークレットに自動的に注入します。

所感

ドキュメント読んでもコレジャナイ感が強い。要は複数のSecretManagerを1つに統合するものだけど、違うよね。

harrythecodeharrythecode

Hashicorp Vault

言わずとしれは Hashicorp。今回はGit上でArgoCDと連携する目的なのでスキップ。

Bank-Vaults

https://bank-vaults.dev/

Bank-Vaultsは、クラウドネイティブの秘密管理のための様々なツールを提供する包括的なプロジェクトです:

  • Hashicorp Vaultの設定を簡単にするBank-Vaults CLI
  • Kubernetes 上で Hashicorp Vault を簡単に操作できる Vault Operator
  • Kubernetesポッドに直接シークレットを注入するためのSecrets Webhook
  • GoでVaultを簡単に操作できるVault SDK

これでもない。

harrythecodeharrythecode

Helm Secrets

https://github.com/jkroepke/helm-secrets

helm-secrets は、暗号化された Helm の値ファイルをその場で復号するための Helm プラグインです。
sops を使って値ファイルを暗号化し、git に保存します。
AWS SecretManager、Azure KeyVault、HashiCorp Vault のようなクラウドネイティブのシークレットマネージャにシークレットを保存し、値ファイルやテンプレートに注入します。
お気に入りのデプロイツールやArgoCDのようなGitOps Operatorでhelm-secretを使う。

所感

Helmに特化したもの。sopsで暗号化してgitに保存してhelmコマンドで展開する時にdecryptするもの。ただこれだとhelm valuesにしか使えないのでダメ。シンプルでいいけどね。

harrythecodeharrythecode

argocd-vault-plugin

https://github.com/argoproj-labs/argocd-vault-plugin

様々なシークレット管理ツール(HashiCorp Vault、IBM Cloud Secrets Manager、AWS Secrets Managerなど)からシークレットを取得し、Kubernetesリソースに注入するためのArgo CDプラグインです。

なぜこのプラグインを使うのか?
このプラグインは、GitOpsとArgo CDによるシークレット管理の問題を解決することを目的としています。オペレーターやカスタムリソース定義に頼ることなく、シークレット管理ツールを利用するシンプルな方法を見つけたかったのです。このプラグインはシークレットだけでなく、デプロイメントやconfigMap、その他のKubernetesリソースにも使用できます。

これも3rdPartyのsecretサービスを使うのでダメ。

harrythecodeharrythecode

Vals-Operator

argocd-secret-replacer

どちらも全然使われてない。ダメ