4.15. git シークレットを使用したパイプラインの認証


Git シークレットは、Git リポジトリーと安全に対話するための認証情報で設定されており、認証の自動化に使用されることが多いです。Red Hat OpenShift Pipelines では、Git シークレットを使用して、実行時に Git リポジトリーと対話するパイプライン実行およびタスク実行を認証できます。

パイプライン実行またはタスク実行は、関連付けられたサービスアカウントを介してシークレットにアクセスできます。Pipeline は、Git シークレットの Basic 認証および SSH ベースの認証のアノテーション (キーと値のペア) としての使用をサポートします。

4.15.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: <username> 1
  password: <password> 2

1
リポジトリーのユーザー名
2
リポジトリーのパスワードまたはパーソナルアクセストークン

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

1
SSH 秘密鍵ファイルの内容。

4.15.2. Git の Basic 認証の設定

パイプラインが、パスワードで保護されたリポジトリーからリソースを取得するには、そのパイプラインの Basic 認証を設定する必要があります。

パイプラインの Basic 認証を設定するには、secret.yamlserviceaccount.yaml、および run.yaml ファイルを指定されたリポジトリーの Git シークレットからの認証情報で更新します。このプロセスが完了すると、Pipeline はその情報を使用して指定されたパイプラインリソースを取得できます。

注記

GitHub では、プレーンパスワードを使用した認証は非推奨になりました。代わりに、パーソナルアクセストークン を使用します。

手順

  1. secret.yaml ファイルで、ターゲット Git リポジトリーにアクセスするためのユーザー名とパスワードまたは GitHub パーソナルアクセストークン を指定します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: basic-user-pass 1
      annotations:
        tekton.dev/git-0: https://github.com
    type: kubernetes.io/basic-auth
    stringData:
      username: <username> 2
      password: <password> 3
    1
    シークレットの名前。この例では、basic-user-pass です。
    2
    Git リポジトリーのユーザー名。
    3
    Git リポジトリーのパスワード
  2. serviceaccount.yaml ファイルで、シークレットを適切なサービスアカウントに関連付けます。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-bot 1
    secrets:
      - name: basic-user-pass 2
    1
    サービスアカウントの名前。この例では、build-bot です。
    2
    シークレットの名前。この例では、basic-user-pass です。
  3. run.yaml ファイルで、サービスアカウントをタスク実行またはパイプライン実行に関連付けます。

    • サービスアカウントをタスク実行に関連付けます。

      apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        name: build-push-task-run-2 1
      spec:
        serviceAccountName: build-bot 2
        taskRef:
          name: build-push 3
      1
      タスク実行の名前。この例では、build-push-task-run-2 です。
      2
      サービスアカウントの名前。この例では、build-bot です。
      3
      タスクの名前。この例では、build-push です。
    • サービスアカウントを PipelineRun リソースに関連付けます。

      apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        name: demo-pipeline 1
        namespace: default
      spec:
        serviceAccountName: build-bot 2
        pipelineRef:
          name: demo-pipeline 3
      1
      パイプライン実行の名前。この例では、demo-pipeline です。
      2
      サービスアカウントの名前。この例では、build-bot です。
      3
      パイプラインの名前。この例では、demo-pipeline です。
  4. 変更を適用します。

    $ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml

4.15.3. Git の SSH 認証の設定

パイプラインが SSH キーで設定されたリポジトリーからリソースを取得するには、そのパイプラインの SSH ベースの認証を設定する必要があります。

パイプラインの SSH ベースの認証を設定するには、secret.yamlserviceaccount.yaml、および run.yaml ファイルを、指定されたリポジトリーの SSH 秘密鍵からの認証情報を使用して更新します。このプロセスが完了すると、Pipeline はその情報を使用して指定されたパイプラインリソースを取得できます。

注記

Basic 認証ではなく SSH ベースの認証を使用することを検討してください。

手順

  1. SSH 秘密鍵 を生成するか、既存の秘密鍵をコピーします。これは通常 ~/.ssh/id_rsa ファイルで入手できます。
  2. secret.yaml ファイルで、ssh-privatekey の値を SSH 秘密鍵ファイルの内容に設定し、known_hosts の値を既知のホストファイルの内容に設定します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: ssh-key 1
      annotations:
        tekton.dev/git-0: github.com
    type: kubernetes.io/ssh-auth
    stringData:
      ssh-privatekey: 2
      known_hosts: 3
    1
    SSH 秘密鍵が含まれるシークレットの名前。この例では、ssh-key です。
    2
    SSH 秘密鍵ファイルの内容。
    3
    既知のホストファイルの内容。
    注意

    秘密鍵を省略すると、Pipelines は任意のサーバーの公開鍵を受け入れます。

  3. オプション: カスタム SSH ポートを指定するには、annotation 値の最後に :<port number> を追加します。たとえば、tekton.dev/git-0: github.com:2222 などです。
  4. serviceaccount.yaml ファイルで、ssh-key シークレットを build-bot サービスアカウントに関連付けます。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: build-bot 1
    secrets:
      - name: ssh-key 2
    1
    サービスアカウントの名前。この例では、build-bot です。
    2
    SSH 秘密鍵が含まれるシークレットの名前。この例では、ssh-key です。
  5. run.yaml ファイルで、サービスアカウントをタスク実行またはパイプライン実行に関連付けます。

    • サービスアカウントをタスク実行に関連付けます。

      apiVersion: tekton.dev/v1beta1
      kind: TaskRun
      metadata:
        name: build-push-task-run-2 1
      spec:
        serviceAccountName: build-bot 2
        taskRef:
          name: build-push 3
      1
      タスク実行の名前。この例では、build-push-task-run-2 です。
      2
      サービスアカウントの名前。この例では、build-bot です。
      3
      タスクの名前。この例では、build-push です。
    • サービスアカウントをパイプライン実行に関連付けます。

      apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        name: demo-pipeline 1
        namespace: default
      spec:
        serviceAccountName: build-bot 2
        pipelineRef:
          name: demo-pipeline 3
      1
      パイプライン実行の名前。この例では、demo-pipeline です。
      2
      サービスアカウントの名前。この例では、build-bot です。
      3
      パイプラインの名前。この例では、demo-pipeline です。
  6. 変更を適用します。

    $ oc apply --filename secret.yaml,serviceaccount.yaml,run.yaml

4.15.4. git タイプのタスクでの SSH 認証の使用

Git コマンドを呼び出す際には、タスクの手順で直接 SSH 認証を使用できます。SSH 認証は $HOME 変数を無視し、/etc/passwd ファイルで指定されたユーザーのホームディレクトリーのみを使用します。そのため、タスクの各手順では、/tekton/home/.ssh ディレクトリーを、関連付けられたユーザーのホームディレクトリーにシンボリックリンクする必要があります

ただし、git タイプのパイプラインリソースまたは Tekton カタログで利用可能な git-clone タスクを使用する場合は、明示的なシンボリックリンクは必要ありません。

git タイプのタスクで SSH 認証を使用する例は、authenticating-git-commands.yaml を参照してください。

4.15.5. root 以外のユーザーとしてのシークレットの使用

以下のような特定のシナリオでは、root 以外のユーザーとしてシークレットを使用する必要がある場合があります。

  • コンテナーが実行するために使用するユーザーとグループは、プラットフォームによってランダム化されます。
  • タスクの手順では、root 以外のセキュリティーコンテキストを定義します。
  • タスクは、root 以外のグローバルセキュリティーコンテキストを指定します。これは、タスクのすべての手順に適用されます。

このようなシナリオでは、root 以外のユーザーとしてタスク実行とパイプライン実行を実行する際の次の側面を考慮してください。

  • Git の SSH 認証では、ユーザーが /etc/passwd ディレクトリーに有効なホームディレクトリーを設定している必要があります。有効なホームディレクトリーのない UID を指定すると、認証に失敗します。
  • SSH 認証は $HOME 環境変数を無視します。そのため、Pipelines (/tekton/home) で定義される $HOME ディレクトリーから、root 以外のユーザーの有効なホームディレクトリーに、適切なシークレットファイルをシンボリックリンクする必要があります。

さらに、root 以外のセキュリティーコンテキストで SSH 認証を設定するには、git コマンドを認証する例 を参照してください。

4.15.6. 特定の手順へのシークレットアクセスの制限

デフォルトで、Pipeline のシークレットは $HOME/tekton/home ディレクトリーに保存され、タスクのすべての手順で利用できます。

シークレットを特定の手順に制限するには、シークレット定義を使用してボリュームを指定し、特定の手順でボリュームをマウントします。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.