Vault
Vaultは、最新のコンピューティングにおけるトークン、パスワード、証明書、キー、およびその他のシークレットへのアクセスを保護、保存、および厳密に制御します。 Vault拡張機能は、パイプラインにVaultシークレットへのアクセスを提供します。
シークレットの作成
Vaultコマンドラインツールを使用して、ストアにシークレットを書き込みます。以下の例では、Dockerのユーザー名とパスワードを保存しています。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple
シークレットへのアクセス
シークレットがVaultに保存されたら、yaml構成ファイルを更新してシークレットへのアクセスをリクエストできます。まず、外部シークレットごとにyamlでシークレットリソースを定義します。シークレットへのパスと、取得する値の名前またはキーを含めます。
1 ---
2 kind: pipeline
3 name: default
4
5 steps:
6 - name: build
7 image: alpine
8
9 ---
10 kind: secret
11 name: username
12 get:
13 path: secrets/data/docker
14 name: username
15
16 ---
17 kind: secret
18 name: password
19 get:
20 path: secrets/data/docker
21 name: password
22 ...
次に、パイプラインで名前付きシークレットを参照できます。
1 kind: pipeline
2 name: default
3
4 steps:
5 - name: build
6 image: alpine
7 environment:
8 USERNAME:
9 from_secret: username
10 PASSWORD:
11 from_secret: password
12
13 ---
14 kind: secret
15 name: username
16 get:
17 path: secrets/data/docker
18 name: username
19
20 ---
21 kind: secret
22 name: password
23 get:
24 path: secrets/data/docker
25 name: password
26
27 ...
アクセスの制限
シークレットは、デフォルトですべてのリポジトリとすべてのビルドイベントで使用できます。シークレットへのアクセスをリポジトリ、ビルドイベント、およびブランチごとに制限することを強くお勧めします。これは、特別なプロパティを追加することで実行できます。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-events=push,tag \
5 x-drone-repos=octocat/*,spaceghost/* \
6 x-drone-branches=master,development
リポジトリによる制限
X-Drone-Repos
キーを使用して、シークレットにアクセスできるリポジトリを制限します。値は、globパターンのコンマ区切りのリストです。リポジトリ名がパターンの少なくとも1つと一致する場合、シークレットへのアクセスが許可されます。
単一のリポジトリへのアクセスを制限します。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-repos=octocat/hello-world
組織内のすべてのリポジトリへのアクセスを制限します。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-repos=octocat/*
複数のリポジトリまたは組織へのアクセスを制限します。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-repos=octocat/*,spaceghost/*
イベントによる制限
X-Drone-Events
キーを使用して、シークレットにアクセスできるビルドイベントを制限します。値は、イベントのコンマ区切りのリストです。ビルドが少なくとも1つのイベントに一致する場合、シークレットへのアクセスが許可されます。
プッシュイベントとタグイベントへのアクセスを制限します。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-events=push,tag
アノテーションを組み合わせて、リポジトリとイベントごとに制限できます。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-events=push,tag \
5 x-drone-repos=octocat/*,spaceghost/*
ブランチによる制限
X-Drone-Branches
キーを使用して、シークレットにアクセスできるブランチを制限します。値は、ブランチのコンマ区切りのリストです。ビルドがブランチの少なくとも1つと一致する場合、シークレットへのアクセスが許可されます。
マスターブランチと開発ブランチへのアクセスを制限します。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-branches=master,development
リポジトリ、イベント、ブランチごとに制限する必要があるアノテーションを組み合わせることができます。
1 $ vault kv put secret/docker \
2 username=octocat \
3 password=correct-horse-battery-staple \
4 x-drone-events=push,tag \
5 x-drone-repos=octocat/*,spaceghost/* \
6 x-drone-branches=master,development