目次
Jihu GitLab CI を Vault と統合する 2 つの方法
「アリの巣で千マイルの堤防が崩壊する。」 キー管理は、ソフトウェア開発のライフサイクル全体にとって、長い堤防にとってのアリの巣のようなものです キーの漏洩は、企業が恐喝攻撃を受ける重要な要因となっています。セキュリティとコンプライアンスの管理キーは、企業が大きな経済的損失を被るのを効果的に防ぐだけでなく、企業がセキュリティ コンプライアンスを確保しながらソフトウェアの配信を加速できるように、優れた企業セキュリティ文化を構築することもできます。
キー管理は、ソフトウェア開発のライフサイクル全体をカバーする必要があります。たとえば、コーディング段階ではキーのハードコーディングを回避し、ビルド段階ではキーがビルド ログに出力されないようにし、キーが正しいかどうかをスキャンする必要があります。変更されたコード (または履歴) はテスト段階で必要であり、重要な情報などが含まれます。GitLab 自体は成熟したキー管理機能を備えており、たとえば、CI/CD パイプライン段階では、CI 環境変数を使用してキーを保存したり、キー検出のためのセキュリティ スキャン手法を CI/CD パイプラインに組み込んで問題を検出したりすることもできます。漏洩を避けるために、コード内のキー情報を変更します。キー管理に関する Jihu GitLab CI の詳細については、記事Jihu GitLab CI/CD SSHKEY Maskを参照してください。Jihu GitLab キー セキュリティ スキャンに関する記事については、機密情報を提供する「キー検出」を有効にする 1 行のコードを表示できます。. データプラス保護ロック。
この記事では、キーのセキュリティとコンプライアンス管理のための Jihu GitLab CI と Vault の統合について説明します。
ボールトについて
Vault は、Hashorp によって開始された、オープンソースの ID ベースのキーおよび暗号化管理システムです。API キー、ユーザー名とパスワード (パスワード)、アクセス トークン (トークン)、証明書 (証明書) などのキーを管理するには、デフォルトですべて拒否の原則を使用します。Vault の詳細については、Vault 公式 Web サイトをご覧ください。
Jihu GitLab CI と Vault の統合原理
-
コンテナー上でキーを構成します (UI、CLI、または API)。
-
CI ジョブで使用する JWT を生成します。
-
Runner は Hashicorp に接続し、認証に JWT を使用します。
-
Vault は JWT を検証します。
-
Vault はバインドされたクレームと対応する Vault ポリシーをチェックします。
-
Vault はアクセス トークンを返します。
-
Runner は、使用するために Vault から重要な情報を読み取ります。
Jihu GitLab CI を Vault と統合する 2 つの方法
secrets
キーワードまたは CLI を使用して、GitLab CI で Vault を使用できます 。
secrets:vault
キーワードの使用
secrets
これは、GitLab CI で外部キー管理ツールからキーを読み取るために使用されるキーワードです。これを使用して、 secrets:vault
Vault サーバーに保存されているキー情報を読み取ることができます。
たとえば、kv エンジン (v2) は、コンテナー イメージ ウェアハウスのユーザー名とパスワードを保存するために Vault で使用されます。
# 写入用户名和密码
$ vault kv put jh/docker-registry/credentials username=jh-gitlab password=passw0rd
# 读取用户名和密码
vault read -format=json jh/data/docker-registry/credentials | jq -r '.data.data'
{
"password": "passw0rd",
"username": "jh-gitlab"
}
ボールト関連の環境変数を GitLab CI 変数に保存します。
-
VAULT_SERVER_URL:vault
サーバーアドレス; -
VAULT_AUTH_ROLE
: コンテナー上で作成されたロールは、ストレージ キーの洗練された管理と制御を実現するために、対応するポリシーにバインドするために使用されます。 -
VAULT_AUTH_PATH
: Vault auth の認証方法のマウント パス。デフォルトは ですjwt
。
.gitlab-ci.yml
ファイルの内容は次のとおりです。
stages:
- vault
get_credentials:
stage: vault
tags:
- vault
image:
name: vault:1.13.3
secrets:
DATABASE_PASSWORD:
vault: docker-registry/credentials/password@jh
script:
- echo $DATABASE_PASSWORD
CI/CD パイプラインのビルド結果を表示します。
DATABASE_PASSWORD
Jihu GitLab CI がボールト情報を正常に読み取り、名前付きのファイルに保存したことがわかります 。パスは赤枠のスクリーンショットに示されているとおりです。
CLIモード
CLI を介してローカルで valut にアクセスするのと同じように、vault のさまざまなコマンドを使用して、キーの追加、削除、変更、クエリを実行できます。GitLab CI での CLI の使用を示すために、以前に書き込んだ重要な情報を例として取り上げます。
.gitlab-ci.yml
ファイルの内容は次のとおりです。
get_credentials:
stage: vault
tags:
- vault
image: vault:1.13.3
script:
# vault 服务器的地址
- export VAULT_ADDR=http://163.228.231.126:8200
# vault 认证授权所用的 token
- export VAULT_TOKEN="$(vault write -field=token auth/jwt/login role=jh jwt=$CI_JOB_JWT)"
# 从 vault 读取密钥信息
- export PASSWORD="$(vault kv get -field=password jh/docker-registry/credentials)"
# 打印密钥信息
- echo $PASSWORD
CI/CD パイプラインのビルド結果を表示します。
Jihu GitLab CI がボールト情報を正常に読み取っていることがわかります。
なお、CLI で直接読み取ったキー情報は
echo
コマンドで出力できるため、CI/CD Pipeline 構築時にキー情報の出力を回避するか、CI/CD パイプライン構築時にキー情報の消失を回避する前者の方法をとる必要があります。 CD パイプラインの構築プロセス中にリークが発生しました。
参考: