機密データは Git に保存できません。これは GitOps の難しい課題となります。Git ではシークレットが必要ですが、この機密データを公開しないようにする必要があるためです。この問題に対処するには、HashiCorp Vault などのツールにシークレットを保存してから、そのデータを取得して Red Hat OpenShiftに挿入することができます。
この記事は、Argo CD Vault プラグインを使用して OpenShift GitOps をデプロイし、Hashicorp Vault インスタンスからシークレットを取得し、それらを Kubernetes リソースに挿入するためのガイドです。このガイドは、2021 年に Red Hat で公開されたこのブログ記事を基に構築されており、より先進的なカスタムプラグイン・サイドカーアプローチを使用できるように更新されています。
前提条件
この記事では、OpenShift 4.10 以上をクラスターの管理者権限で実行していることを前提とします。現在、Red Hat デモシステムによってプロビジョニングされた Red Hat OpenShift on AWS 4.13 クラスタを実行しています。
さらに、次の手順に進む前に、oc
および helm
バイナリーを使用してターミナル環境のクラスターにログインしていることを確認してください。次のコマンドを使用して、これらのバイナリーを確認します。
まず、前提条件を確認します。出力は次のようになります。
$ oc version && helm version Client Version: 4.11.13 Kustomize Version: v4.5.4 Kubernetes Version: v1.27.4 version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb6aee40b9a0535fcc7efea6055e1ef72c9", GitTreeState:"clean", GoVersion:"go1.18.7"}
1.Vault をデプロイする
この記事では、Vault を dev
モードで使用していますが、これは本番環境には適していません。すでに Vault インスタンスを実行している場合は、この手順を省略できます。Hashicorp Vault のインスタンスをデプロイします。
$ helm upgrade --install vault vault \ --repo https://helm.releases.hashicorp.com \ --namespace vault \ --create-namespace \ --set "global.openshift=true" \ --set "server.dev.enabled=true" \ --set "injector.enabled=false"
2.Vault を設定する
Vault インスタンスをデプロイしたら、Vault Pod に対してシェルスクリプトを実行し、適切な vault
CLI を使用してデモ用にインスタンスをすばやく設定します。
設定スクリプトは Vault の Kubernetes auth method を設定し、 kv-v2
シークレットストアを有効化し、テストシークレットを作成して、そのシークレットのアクセスポリシーを作成します。
ソースのクローンを作成します。
$ git clone https://github.com/jmhbnz/openshift-gitops-vault-plugin
設定スクリプトを Vault Pod にコピーします。
$ oc --namespace vault cp 1-vault/configure-vault.sh vault-0:/tmp/configure-vault.sh
次に、 Vault Pod でスクリプトをリモートで実行します。
$ oc --namespace vault exec vault-0 -t -- sh -c 'cd /tmp && ./configure-vault.sh'
3.argocd-vault-plugin-auth を Vault に設定する
Vault をデプロイして設定したら、Kubernetes サービスアカウントを使用して Vault に対して認証を行えるよう、デプロイされる Argo CD Vault プラグインを有効にする必要があります。
ArgoCD の namespace を作成します。
$ oc new-project vplugindemo
Argo Vault プラグイン認証用のサービスアカウントを作成します。
$ oc create serviceaccount vplugin
Vault にロールを作成して、サービスアカウントをポリシーにバインドします。
$ oc --namespace vault exec vault-0 -- vault write auth/kubernetes/role/vplugin \ bound_service_account_names=vplugin \ bound_service_account_namespaces=vplugindemo \ policies=vplugin \ ttl=1h
最後に、Vault 接続を設定する際に使用する Argo Vault プラグインのシークレットを作成します。
$ oc --namespace vplugindemo create \ -f 2-argocd/secret-vault-configuration.yaml
4.argocd-vault-plugin 処理を設定する
認証を設定した後は、Argo CD Vault Plugin サイドカーの使用目的を定義する必要があります。2 段階のプロセスを実行します。最初に、discovery コマンドを指定し、次に generate コマンドを指定する必要があります。こちらに記載されたサンプル (helm
または kustomize
ベースのアプリケーションのシナリオを含む) を参照してください。今回の例では、 アノテーションを含むファイルを検出するための最も基本的なアプローチを導入しています。この場合、argocd-vault-plugin generate
を使用して、ファイルをテンプレート化します。
$ oc --namespace vplugindemo create \ -f 2-argocd/configmap-plugin.yaml
5.OpenShift GitOps をデプロイする
Vault をデプロイおよび設定し、 argocd-vault-plugin が設定されたら、OpenShift GitOps Operator をデプロイします。
$ oc --namespace openshift-operators create -f 2-argocd/subscription-gitops.yaml
Operator のインストールが正常に実行されたら、カスタムリソースを使用して Argo CD インスタンスを作成します。
$ oc --namespace vplugindemo create \ -f 2-argocd/crd-argocd.yaml
6.Argo CD アプリケーションを作成する
Argo CD が実行されたら、このベースラインのサンプルアプリケーションを作成します。これにより、デフォルトのプレースホルダー値が Vault の値に置き換えられたシークレットリソースがクラスターに作成されます。
$ oc --namespace vplugindemo create \ -f 2-argocd/application-example.yaml
キーポイント
Red Hat OpenShift GitOps とサイドカーとして実行される Argo CD Vault プラグインとともに Hashicorp Vault を使用して、Git のシークレット内のプレースホルダー値を使用することができます。これは、機密データを保護するための優れた方法です。
執筆者紹介
James Blair is a Specialist Architect at Red Hat. James is a vivid open source advocate and hands-on engineer. He has a deep technical background in automation, DevSecOps and cloud-native platform engineering across several sectors and is passionate about growing cloud-native in Aotearoa, New Zealand.
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
オリジナル番組
エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー
製品
ツール
試用、購入、販売
コミュニケーション
Red Hat について
エンタープライズ・オープンソース・ソリューションのプロバイダーとして世界をリードする Red Hat は、Linux、クラウド、コンテナ、Kubernetes などのテクノロジーを提供しています。Red Hat は強化されたソリューションを提供し、コアデータセンターからネットワークエッジまで、企業が複数のプラットフォームおよび環境間で容易に運用できるようにしています。
言語を選択してください
Red Hat legal and privacy links
- Red Hat について
- 採用情報
- イベント
- 各国のオフィス
- Red Hat へのお問い合わせ
- Red Hat ブログ
- ダイバーシティ、エクイティ、およびインクルージョン
- Cool Stuff Store
- Red Hat Summit