Gitopsを使っているプロのような秘密を取り扱う方法
9982 ワード
の基礎の一つGitOps システム全体の真理の源としてのGitの使い方です.ほとんどの人は、アプリケーションのソースコードをバージョン管理に格納する練習に精通していますが、GitOpsは、構成、Kubernetesマニフェスト、DBスクリプト、クラスタ定義などのアプリケーションの他のすべての部分も格納する必要があります.
しかし、秘密についてはどうですか?どのようにGitopsを使用して秘密を使用できますか?これはthe most popular questions Gitopsを採用するチームから.
真実は、どのように秘密がGitopsで管理されるかに関する単一の受け入れられた実行が全くないということです.あなたが既に適所に固い解決をするならばsuch as HashiCorp vault , それから、技術的にそれがGitopsに反しているとしても、それを使うことは意味があります.
あなたが新しいプロジェクトの上でゼロから始めているならば、Gitops原則を使用して彼らを管理することができるように、Gitで秘密を保存する方法があります.あなたがGitの生の秘密を決して約束してはならないことは言うまでもない.
Gitを使用して秘密を処理するすべてのソリューションは、暗号化形式でそれらを格納している.これは、両方の世界の最高を得ることができることを意味します.秘密は、gitopsで管理することができますし、また、任意のGitリポジトリ(公共リポジトリ)で安全な方法で配置することができます.
クベルネッツの秘密
この記事の文脈では、2種類の秘密について話しますbuilt-in Kubernetes secrets (Kubernetesクラスタに存在するすべての)と封印された秘密はthe Bitnami Sealed secrets controller .
密封された秘密について話す前に、まず普通の/秘密の秘密について話しましょう.Kubernetesは、あなたのアプリケーションで使用できるネイティブの秘密のリソースが含まれています.デフォルトでは、これらの秘密はどんな方法ででも暗号化されません、そして、使用されるBase 64エンコーディングはセキュリティ機能として決して見られてはいけません.Kubernetes秘密を暗号化する方法がありますがwithin the cluster itself , 私たちはクラスタの外でそれらを暗号化することにより興味を持っていますGitOps ( Gitに格納されている全て)
Kubernetesアプリケーションの秘密を使用して簡単です.あなたは、同じメカニズムを使用することができますconfigmaps , つまり、アプリケーションにファイルをマウントしたり、環境変数として渡すことです.
密封された秘密は、Kubernetesのネイティブの秘密の上に構築された拡張機能です.これは、暗号化/復号化が行われた後、すべての秘密がプレーンKubernetes秘密として機能し、これはあなたのアプリケーションがそれらにアクセスする方法です.あなたがどのようにプレーンKubernetes秘密の仕事が好きではない場合は、別のセキュリティメカニズムを見つける必要があります.
秘密の例
実行中の例として、我々はhttps://github.com/codefresh-contrib/gitops-secrets-sample-app . これはいくつかのダミーの秘密を読み取り、それらを表示するWebアプリケーションです.
我々は、アプリケーションが環境変数を使用する代わりにファイル(秘密/から)として秘密を読むように選択しました.ヒアare the paths that are used :
イラストの目的のために、ユーザー名/パスワード、公開/秘密キー、および証明書などのさまざまな秘密のアプリケーションをロードします.私たちは、同じような方法でそれらのすべてを扱います.
Bigami密封された秘密コントローラ
The Bitnami Sealed secrets controller クラスタ上にインストールし、単一のタスクを実行するKubernetesコントローラです.それは秘密の秘密(それはGitにコミットすることができます)をプレーン秘密(あなたのアプリケーションで使用することができます)に変換します.
コントローラのインストールは簡単です.
秘密鍵は秘密鍵解読に使用されます.このキーはクラスタの中にとどまり、誰にも与えないでください. 公開鍵は秘密暗号化に使用されます.これはクラスタの外で使用することができます. コントローラがインストールされると、アプリケーションをインストールして標準的な方法で使用します.あなたのアプリケーションコードまたはあなたのKubernetesマニフェストと不正行為を変更する必要はありません.あなたのアプリケーションがバニラKubernetes秘密を使うことができるならば、それは同様に密封された秘密で働くことができます.
コントローラがアプリケーションに直接接触しないことは明らかです.それは封筒の秘密をクバーネッツの秘密に変換し、その後、それを使用する方法をあなたのアプリケーションになります.アプリケーションは、その秘密はもともとGitで暗号化されていた知っていません.
暗号化秘密
私たちは、コントローラが秘密を解読する方法を見ました.しかし、どのように我々は最初の場所で秘密を暗号化するのですか?コントローラは、この目的のために作成された関連するKubeseal実行可能ファイルを備えています.
これは単一のバイナリですので、お好みのディレクトリにコピーしてインストールすることができます
つまり、 Kubesealは秘密を暗号化するためにクラスタへのアクセスを必要とします.( KubeconfigはKubectlのようです) 暗号化された秘密は、暗号化プロセスに使用されたクラスタでのみ使用できます. 最後のポイントは、すべての秘密がクラスタ特有であることを意味するので、非常に重要です.アプリケーションの名前空間も既定で使用されるので、秘密はクラスタと名前空間固有です.
別のクラスタに同じ秘密を使用する場合は、個別に各クラスタに対して暗号化する必要があります.
Kubesealを使用するには、ちょうどYAMLまたはJSON形式で既存の秘密を取り、暗号化します.
次に、クラスタに秘密を適用することができます
暗号化/復号化の全図です.
完全なプロセスは次のとおりです. あなたはローカルKubernetes秘密をローカルに作成します.どこにでもこれをコミットしてはいけません. あなたは秘密鍵で秘密を暗号化するためにKubesealを使用します. あなたのワークステーションから元の秘密を削除し、密封秘密にクラスタに適用されます. オプションでgitに密封した秘密をコミットできます. 通常のKuberentes秘密を機能すると予想するアプリケーションを配備します.(アプリケーションはどんな種類の変更も必要ありません.) コントローラは、密封された秘密を復号化し、あなたのアプリケーションにプレーン秘密として渡す. アプリケーションは通常通り動作します.
秘密の秘密を使用してcodefresh gitops
密封された秘密のコントローラを使用して、我々は最終的にアプリケーションの構成に沿ってGit(暗号化形式で)のすべての秘密を格納することができます.
例のリポジトリでは、フォルダを見ることができますhttps://github.com/codefresh-contrib/gitops-secrets-sample-app/tree/main/safe-to-commit そして、それは秘密を含むアプリケーションのすべてのマニフェストを持っています.
あなたは、単にポイントthe Codefresh GitOps UI このフォルダとdeploy an application 一つのステップで
配備が終了したら、アプリケーションのコンポーネントをgitopsダッシュボードに表示できます.
そして、もしあなたがアプリケーションを起動すると、それが正しくすべての秘密を読んでいるが表示されます:
ここから、アプリケーションはすべてのGitopsの原則に従います.あなたがGit(秘密を変えることを含む)のどんな変化もするならば、クラスタは更新されます.そして、あなたがクラスタ(秘密さえ)で何かを変えるならば、Codefresh Gitopsは変化を見つけます.
生産の密封秘密制御装置の採用
秘密の回転は軽く取るべきではない複雑なプロセスです.我々は、この記事で密封された秘密の基本を説明しました、しかし、あなたが生産でコントローラを使用したいならば、あなたはdocumentation そして、秘密の回転とキー取扱いのような他の面を考慮に入れてください.
codefresh gitopsを使用したコントローラの詳細についてはour example page .
codefreshに新しい?Create your free account today !
しかし、秘密についてはどうですか?どのようにGitopsを使用して秘密を使用できますか?これはthe most popular questions Gitopsを採用するチームから.
真実は、どのように秘密がGitopsで管理されるかに関する単一の受け入れられた実行が全くないということです.あなたが既に適所に固い解決をするならばsuch as HashiCorp vault , それから、技術的にそれがGitopsに反しているとしても、それを使うことは意味があります.
あなたが新しいプロジェクトの上でゼロから始めているならば、Gitops原則を使用して彼らを管理することができるように、Gitで秘密を保存する方法があります.あなたがGitの生の秘密を決して約束してはならないことは言うまでもない.
Gitを使用して秘密を処理するすべてのソリューションは、暗号化形式でそれらを格納している.これは、両方の世界の最高を得ることができることを意味します.秘密は、gitopsで管理することができますし、また、任意のGitリポジトリ(公共リポジトリ)で安全な方法で配置することができます.
クベルネッツの秘密
この記事の文脈では、2種類の秘密について話しますbuilt-in Kubernetes secrets (Kubernetesクラスタに存在するすべての)と封印された秘密はthe Bitnami Sealed secrets controller .
密封された秘密について話す前に、まず普通の/秘密の秘密について話しましょう.Kubernetesは、あなたのアプリケーションで使用できるネイティブの秘密のリソースが含まれています.デフォルトでは、これらの秘密はどんな方法ででも暗号化されません、そして、使用されるBase 64エンコーディングはセキュリティ機能として決して見られてはいけません.Kubernetes秘密を暗号化する方法がありますがwithin the cluster itself , 私たちはクラスタの外でそれらを暗号化することにより興味を持っていますGitOps ( Gitに格納されている全て)
Kubernetesアプリケーションの秘密を使用して簡単です.あなたは、同じメカニズムを使用することができますconfigmaps , つまり、アプリケーションにファイルをマウントしたり、環境変数として渡すことです.
密封された秘密は、Kubernetesのネイティブの秘密の上に構築された拡張機能です.これは、暗号化/復号化が行われた後、すべての秘密がプレーンKubernetes秘密として機能し、これはあなたのアプリケーションがそれらにアクセスする方法です.あなたがどのようにプレーンKubernetes秘密の仕事が好きではない場合は、別のセキュリティメカニズムを見つける必要があります.
秘密の例
実行中の例として、我々はhttps://github.com/codefresh-contrib/gitops-secrets-sample-app . これはいくつかのダミーの秘密を読み取り、それらを表示するWebアプリケーションです.
我々は、アプリケーションが環境変数を使用する代わりにファイル(秘密/から)として秘密を読むように選択しました.ヒアare the paths that are used :
[security]
# Path to key pair
private_key = /secrets/sign/key.private
public_key= /secrets/sign/key.pub
[paypal]
paypal_url = https://development.paypal.example.com
paypal_cert=/secrets/ssl/paypal.crt
[mysql]
db_con= /secrets/mysql/connection
db_user = /secrets/mysql/username
db_password = /secrets/mysql/password
これは、アプリケーションが非常に簡単であることに注意することが重要です.これは、これらのパスから秘密を読み取ります.それはKubernetes、秘密のリソース、ボリュームマウント、または何かについて何も知りません.あなたはDockerコンテナ(Kubernetesの外)でそれを実行することができます、そして、正しい経路が秘密のファイルを持っているならば、それはちょうど働きます.イラストの目的のために、ユーザー名/パスワード、公開/秘密キー、および証明書などのさまざまな秘密のアプリケーションをロードします.私たちは、同じような方法でそれらのすべてを扱います.
Bigami密封された秘密コントローラ
The Bitnami Sealed secrets controller クラスタ上にインストールし、単一のタスクを実行するKubernetesコントローラです.それは秘密の秘密(それはGitにコミットすることができます)をプレーン秘密(あなたのアプリケーションで使用することができます)に変換します.
コントローラのインストールは簡単です.
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm repo update
helm install sealed-secrets-controller sealed-secrets/sealed-secrets
インストールされると、コントローラは独自に2つのキーを作成します.コントローラがアプリケーションに直接接触しないことは明らかです.それは封筒の秘密をクバーネッツの秘密に変換し、その後、それを使用する方法をあなたのアプリケーションになります.アプリケーションは、その秘密はもともとGitで暗号化されていた知っていません.
暗号化秘密
私たちは、コントローラが秘密を解読する方法を見ました.しかし、どのように我々は最初の場所で秘密を暗号化するのですか?コントローラは、この目的のために作成された関連するKubeseal実行可能ファイルを備えています.
これは単一のバイナリですので、お好みのディレクトリにコピーしてインストールすることができます
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.16.0/kubeseal-linux-amd64 -O kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
Kubesealはコントローラから逆の操作を行います.それは既存のKubernetes秘密を取り、それを暗号化します.KubeSealは、インストールプロセス中にクラスタから作成された公開キーを要求し、そのキーですべての秘密を暗号化します.つまり、
別のクラスタに同じ秘密を使用する場合は、個別に各クラスタに対して暗号化する必要があります.
Kubesealを使用するには、ちょうどYAMLまたはJSON形式で既存の秘密を取り、暗号化します.
kubeseal -n my-namespace < .db-creds.yml > db-creds.json
これは、コントローラに固有のカスタムKubernetesリソースであるSealedSecretを作成します.このファイルはGitでコミットするか、別の外部システムで保存するのが安全です.次に、クラスタに秘密を適用することができます
kubectl apply -f db-creds.json -n my-namespace
秘密は現在クラスタの一部です、そして、アプリケーションがそれを必要とするとき、コントローラによって解読されます.暗号化/復号化の全図です.
完全なプロセスは次のとおりです.
秘密の秘密を使用してcodefresh gitops
密封された秘密のコントローラを使用して、我々は最終的にアプリケーションの構成に沿ってGit(暗号化形式で)のすべての秘密を格納することができます.
例のリポジトリでは、フォルダを見ることができますhttps://github.com/codefresh-contrib/gitops-secrets-sample-app/tree/main/safe-to-commit そして、それは秘密を含むアプリケーションのすべてのマニフェストを持っています.
あなたは、単にポイントthe Codefresh GitOps UI このフォルダとdeploy an application 一つのステップで
配備が終了したら、アプリケーションのコンポーネントをgitopsダッシュボードに表示できます.
そして、もしあなたがアプリケーションを起動すると、それが正しくすべての秘密を読んでいるが表示されます:
ここから、アプリケーションはすべてのGitopsの原則に従います.あなたがGit(秘密を変えることを含む)のどんな変化もするならば、クラスタは更新されます.そして、あなたがクラスタ(秘密さえ)で何かを変えるならば、Codefresh Gitopsは変化を見つけます.
生産の密封秘密制御装置の採用
秘密の回転は軽く取るべきではない複雑なプロセスです.我々は、この記事で密封された秘密の基本を説明しました、しかし、あなたが生産でコントローラを使用したいならば、あなたはdocumentation そして、秘密の回転とキー取扱いのような他の面を考慮に入れてください.
codefresh gitopsを使用したコントローラの詳細についてはour example page .
codefreshに新しい?Create your free account today !
Reference
この問題について(Gitopsを使っているプロのような秘密を取り扱う方法), 我々は、より多くの情報をここで見つけました https://dev.to/codefreshio/how-to-handle-secrets-like-a-pro-using-gitops-1cbpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol