IBM CloudのTektonにおけるプライベートリポジトリーの認証情報を秘匿したgit clone
課題: 認証情報をsecretマニフェストにて管理した場合、そのsecretマニフェストをどのように秘匿するか。
ここでは、IBM CloudのTektonにおける「環境プロパティー」の「セキュアな値」タイプを使用してマニフェストから認証情報を秘匿し、プライベートgitリポジトリーのgit cloneを行なう。
なお、IBM Cloud側の設定は以下の設定内容を継続して使用している。
https://qiita.com/hiroyuki_onodera/items/b842b351747508641cc3
ローカル環境
- Fedora Linux 35 (Workstation Edition)
Gitプラットフォーム上プライベートリポジトリーに接続する為の認証情報
以下のスクリプトのHost, User, IdentityFile箇所を書き換えて実行。
得られる出力の内容をIBM Cloud上のセキュアな値として設定する。
#! /bin/bash
Host="github.com" # Gitプラットフォーム
User="USER" # Gitプラットフォームに対するユーザー
IdentityFile="~/.ssh/id_rsa" # Gitプラットフォームに対するユーザーのsshプライベートキー
echo id_rsa: $(eval cat ${IdentityFile}| base64 -w0)
echo
echo config: $(cat << __EOC__ | base64 -w0
Host ${Host}
User ${User}
__EOC__
)
echo
echo known_hosts: $(ssh-keyscan ${Host} 2>/dev/null| base64 -w0)
$ bash param.sh
id_rsa: ls0tls0crudjtibpuevou0niifbssvzbveug...
config: sg0zdcbnaxrodwiuy00tciagvxnlcibiaxjv...
known_hosts: z0l0ahvilmnvbsbzc0gtcnnhiefbquf...
特にid_rsaは長い。
IBM Cloud上での変数設定
セキュアな値として上の値を設定する
ツールチェーンの画面で、左サイドメニューから環境プロパティを選択
「追加」をクリックすると現れる「セキュアな値」を選択
右の「プロパティの追加」において、名前(id_rsa)と値を設定し、右下の「追加」をクリック
以下のように追加される。
同様に「config」、「known_hosts」を追加
これらの値は一旦設定するとGUI上ではもう確認できない。
削除、新規追加、名前のリネームは可能。
マニフェスト側での値の利用
これらの値は、Tekton TriggerTemplateリソース定義において、$(params.PROPERTY_NAME)を使用して参照可能。
EventListenerとTriggerTemplateのマニュフェスト
apiVersion: triggers.tekton.dev/v1beta1
kind: EventListener
metadata:
name: listener1
spec:
triggers:
- bindings:
- name: message
value: Hello from the Triggers EventListener!
template:
ref: pipelinerun
---
apiVersion: triggers.tekton.dev/v1beta1
kind: TriggerTemplate
metadata:
name: pipelinerun
spec:
resourcetemplates:
-
apiVersion: v1
kind: Secret
metadata:
name: git-ssh
data:
id_rsa: $(params.id_rsa) # IBM Cloudの「セキュアな値」環境プロパティーで指定した値
config: $(params.config) # 同上
known_hosts: $(params.known_hosts) # 同上
-
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: secure-git-clone-
spec:
pipelineRef:
name: secure-git-clone
workspaces:
- name: ssh-directory # gitに接続する.ssh下の情報を持つworkspace
secret:
secretName: git-ssh # 上で動的に作成したsecret
- name: shared-workspace # git-clone先workspace。task間で共有可能。
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
params:
- name: url
value: [email protected]:aaaa/bbbb.git
listener1が呼ばれるとpipelinerun TriggerTemplateが呼ばれ、git-ssh Secretが作成され、secure-git-cloneに対するPipelineRunが行われる。
Pipelineのマニュフェスト
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: secure-git-clone
spec:
workspaces:
- name: ssh-directory
- name: shared-workspace
params:
- name: url
description: Repository URL to clone from
type: string
- name: revision
description: Revision to checkout. (branch, tag, sha, ref, etc...)
type: string
default: ''
tasks:
- name: clone-private-repo
taskRef:
kind: Task
name: git-clone
# Tekton Hubから以下によりgit-clone.yamlを入手し、.tektonディレクトリーにおいておく
# curl -OL https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.5/git-clone.yaml
workspaces:
- name: ssh-directory # git-cloneにより指定
workspace: ssh-directory
- name: output # git-cloneにより指定。git-clone先。
workspace: shared-workspace
params:
- name: url # git-cloneにより指定
value: $(params.url)
- name: revision # git-cloneにより指定
value: $(params.revision)
- name: check-cloned-repo
taskRef:
kind: Task
name: check-cloned-repo
runAfter:
- clone-private-repo
workspaces:
- name: source # git-clone先を/workspace/sourceとしてmount
workspace: shared-workspace
Pipelineは2つのTaskを実行。
git-cloneタスク(Tekton Hub)
1つ目のTaskはTekton Hubのgit-clone
必要なworkspaceやparamの詳細は上を参照。
ここでは以下を使用している。
- Workspaces
- output
- ssh-directory
- Parameters
- url
- revision
入手するには、
$ curl -OL https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.5/git-clone.yaml
もしくはtknコマンドを導入しているならば
$ tkn hub get task git-clone --version 0.5 > git-clone.yaml
git cloneされた内容を表示するタスク
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: check-cloned-repo
spec:
workspaces:
- name: source
steps:
- name: check-cloned-repo
image: registry.access.redhat.com/ubi8:8.5-236.1647448331
script: |
#! /usr/bin/env bash
set -ex
ls -l /workspace/source
これらを.tekton下においてgit add, git commit, git pushすれば、この環境ではPipelineが実行される。
https://qiita.com/hiroyuki_onodera/items/b842b351747508641cc3
手動での実行なども可能。
https://qiita.com/hiroyuki_onodera/items/b842b351747508641cc3
実行結果
ツールチェーンの画面で、左サイドメニューからPipelineRunsを選択
今回の実行結果であるsecure-git-clone-4b64qの詳細を確認する。
secure-git-clone-4b64qのlinkをクリック。
git-cloneタスク
shared-workspaceである/workspace/outputにgit cloneされている。
内容確認タスク
shared-workspaceを/workspace/sourceにマウントしているので、そこにgit cloneされた内容が展開されている。
参考
Author And Source
この問題について(IBM CloudのTektonにおけるプライベートリポジトリーの認証情報を秘匿したgit clone), 我々は、より多くの情報をここで見つけました https://qiita.com/hiroyuki_onodera/items/b221360cfbfda783cba4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .