4.10. git シークレットを使用したパイプラインの認証
Git シークレットは、Git リポジトリーと安全に対話するための認証情報で設定されており、認証の自動化に使用されることが多いです。Red Hat OpenShift Pipelines では、Git シークレットを使用して、実行時に Git リポジトリーと対話するパイプライン実行およびタスク実行を認証できます。
パイプライン実行またはタスク実行は、関連付けられたサービスアカウントを介してシークレットにアクセスできます。Pipeline は、Git シークレットの Basic 認証および SSH ベースの認証のアノテーション (キーと値のペア) としての使用をサポートします。
4.10.1. 認証情報の選択 リンクのコピーリンクがクリップボードにコピーされました!
パイプライン実行またはタスク実行には、異なる Git リポジトリーにアクセスするために複数の認証が必要になる場合があります。Pipeline がその認証情報を使用できるドメインで各シークレットにアノテーションを付けます。
Git シークレットの認証情報アノテーションキーは tekton.dev/git- で開始する必要があり、その値は Pipeline がその認証情報を使用するホストの URL になります。
以下の例では、Pipeline はユーザー名とパスワードに依存する basic-auth シークレットを使用して github.com および gitlab.com のリポジトリーにアクセスします。
例: Basic 認証用の複数の認証情報
apiVersion: v1
kind: Secret
metadata:
annotations:
tekton.dev/git-0: github.com
tekton.dev/git-1: gitlab.com
type: kubernetes.io/basic-auth
stringData:
username:
password:
ssh-auth シークレット (秘密鍵) を使用して Git リポジトリーにアクセスすることもできます。
例: SSH ベースの認証の秘密鍵
apiVersion: v1
kind: Secret
metadata:
annotations:
tekton.dev/git-0: https://github.com
type: kubernetes.io/ssh-auth
stringData:
ssh-privatekey:
- 1
- SSH 秘密鍵の文字列を含むファイルの名前。
4.10.2. Git の Basic 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
パイプラインが、パスワードで保護されたリポジトリーからリソースを取得するには、そのパイプラインの Basic 認証を設定する必要があります。
パイプラインの Basic 認証を設定するには、secret.yaml、serviceaccount.yaml、および run.yaml ファイルを指定されたリポジトリーの Git シークレットからの認証情報で更新します。このプロセスが完了すると、Pipeline はその情報を使用して指定されたパイプラインリソースを取得できます。
GitHub では、プレーンパスワードを使用した認証は非推奨になりました。代わりに、パーソナルアクセストークン を使用します。
手順
secret.yamlファイルで、ターゲット Git リポジトリーにアクセスするためのユーザー名とパスワードまたは GitHub パーソナルアクセストークン を指定します。apiVersion: v1 kind: Secret metadata: name: basic-user-pass1 annotations: tekton.dev/git-0: https://github.com type: kubernetes.io/basic-auth stringData: username:2 password:3 serviceaccount.yamlファイルで、シークレットを適切なサービスアカウントに関連付けます。apiVersion: v1 kind: ServiceAccount metadata: name: build-bot1 secrets: - name: basic-user-pass2 run.yamlファイルで、サービスアカウントをタスク実行またはパイプライン実行に関連付けます。サービスアカウントをタスク実行に関連付けます。
apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: build-push-task-run-21 spec: serviceAccountName: build-bot2 taskRef: name: build-push3 サービスアカウントを
PipelineRunリソースに関連付けます。apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: demo-pipeline1 namespace: default spec: serviceAccountName: build-bot2 pipelineRef: name: demo-pipeline3
変更を適用します。
$ kubectl apply --filename secret.yaml,serviceaccount.yaml,run.yaml
4.10.3. Git の SSH 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
パイプラインが SSH キーで設定されたリポジトリーからリソースを取得するには、そのパイプラインの SSH ベースの認証を設定する必要があります。
パイプラインの SSH ベースの認証を設定するには、secret.yaml、serviceaccount.yaml、および run.yaml ファイルを、指定されたリポジトリーの SSH 秘密鍵からの認証情報を使用して更新します。このプロセスが完了すると、Pipeline はその情報を使用して指定されたパイプラインリソースを取得できます。
Basic 認証ではなく SSH ベースの認証を使用することを検討してください。
手順
-
SSH 秘密鍵 を生成するか、既存の秘密鍵をコピーします。これは通常
~/.ssh/id_rsaファイルで入手できます。 secret.yamlファイルで、ssh-privatekeyの値を SSH 秘密鍵ファイルの名前に設定し、known_hostsの値を既知のホストファイルの名前に設定します。apiVersion: v1 kind: Secret metadata: name: ssh-key1 annotations: tekton.dev/git-0: github.com type: kubernetes.io/ssh-auth stringData: ssh-privatekey:2 known_hosts:3 Important秘密鍵を省略すると、Pipelines は任意のサーバーの公開鍵を受け入れます。
-
オプション: カスタム SSH ポートを指定するには、
annotation値の最後に:<port number>を追加します。たとえば、tekton.dev/git-0: github.com:2222などになります。 serviceaccount.yamlファイルで、ssh-keyシークレットをbuild-botサービスアカウントに関連付けます。apiVersion: v1 kind: ServiceAccount metadata: name: build-bot1 secrets: - name: ssh-key2 run.yamlファイルで、サービスアカウントをタスク実行またはパイプライン実行に関連付けます。サービスアカウントをタスク実行に関連付けます。
apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: build-push-task-run-21 spec: serviceAccountName: build-bot2 taskRef: name: build-push3 サービスアカウントをパイプライン実行に関連付けます。
apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: demo-pipeline1 namespace: default spec: serviceAccountName: build-bot2 pipelineRef: name: demo-pipeline3
変更を適用します。
$ kubectl apply --filename secret.yaml,serviceaccount.yaml,run.yaml
4.10.4. git タイプのタスクでの SSH 認証の使用 リンクのコピーリンクがクリップボードにコピーされました!
Git コマンドを呼び出す際には、タスクの手順で直接 SSH 認証を使用できます。SSH 認証は $HOME 変数を無視し、/etc/passwd ファイルで指定されたユーザーのホームディレクトリーのみを使用します。そのため、タスクの各手順では、/tekton/home/.ssh ディレクトリーを、関連付けられたユーザーのホームディレクトリーにシンボリックリンクする必要があります
ただし、git タイプのパイプラインリソースまたは Tekton カタログで利用可能な git-clone タスクを使用する場合は、明示的なシンボリックリンクは必要ありません。
git タイプのタスクで SSH 認証を使用する例として、authenticating-git-commands.yaml を参照してください。
4.10.5. root 以外のユーザーとしてのシークレットの使用 リンクのコピーリンクがクリップボードにコピーされました!
以下のような特定のシナリオでは、root 以外のユーザーとしてシークレットを使用する必要がある場合があります。
- コンテナーが実行するために使用するユーザーとグループは、プラットフォームによってランダム化されます。
- タスクの手順では、root 以外のセキュリティーコンテキストを定義します。
- タスクは、root 以外のグローバルセキュリティーコンテキストを指定します。これは、タスクのすべての手順に適用されます。
このようなシナリオでは、root 以外のユーザーとしてタスク実行とパイプライン実行を実行する際の次の側面を考慮してください。
-
Git の SSH 認証では、ユーザーが
/etc/passwdディレクトリーに有効なホームディレクトリーを設定している必要があります。有効なホームディレクトリーのない UID を指定すると、認証に失敗します。 -
SSH 認証は
$HOME環境変数を無視します。そのため、Pipelines (/tekton/home) で定義される$HOMEディレクトリーから、root 以外のユーザーの有効なホームディレクトリーに、適切なシークレットファイルをシンボリックリンクする必要があります。
さらに、root 以外のセキュリティーコンテキストで SSH 認証を設定するには、git コマンドを認証する例 を参照してください。
4.10.6. 特定の手順へのシークレットアクセスの制限 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトで、Pipeline のシークレットは $HOME/tekton/home ディレクトリーに保存され、タスクのすべての手順で利用できます。
シークレットを特定の手順に制限するには、シークレット定義を使用してボリュームを指定し、特定の手順でボリュームをマウントします。