GitLab CI の設定


Red Hat Trusted Application Pipeline 1.4

安全な CI/CD ワークフロー用に GitLab CI を設定する方法を学ぶ

Red Hat Trusted Application Pipeline Documentation Team

概要

このドキュメントでは、脆弱性スキャン、イメージ署名、アテステーション生成などの重要なセキュリティータスクを実行するために GitLab CI を設定する手順を説明します。

はじめに

アプリケーションに GitLab CI を使用している場合、シークレットが欠落しているためにパイプラインの実行が失敗する可能性があります。シークレットがないと、Quay、JFrog、Red Hat Advanced Cluster Security (ACS) との統合が機能せず、脆弱性スキャン、イメージ署名、コンプライアンスのための SBOM 生成などのセキュリティータスクが機能しなくなります。

これを防ぐには、GitLab CI にシークレットをセキュアに保存する必要があります。このガイドでは、パイプラインをスムーズかつセキュアに実行するためのプロセスを順を追って説明します。

第1章 外部ツールとの安全な統合のために GitLab CI にシークレットを追加する

前提条件

GitLab CI を設定する前に、次のものがあることを確認してください。

  • GitLab リポジトリーと CI/CD 設定への 管理者 アクセス権。
  • Quay.io、JFrog Artifactory、または Sonatype Nexus からコンテナーイメージをプルするための コンテナーレジストリー認証情報
  • 特定の GitLab CI タスクの 認証の詳細:

    • ACS セキュリティータスクの場合:

      • ROX Central サーバーエンドポイント
      • ROX API トークン
    • SBOM およびアーティファクト署名タスクの場合:

      • Cosign 署名鍵のパスワード
      • 秘密鍵と公開鍵
      • Trustification URL
      • クライアント ID およびシークレット
      • サポートされている CycloneDX バージョン
    注記

    認証情報やその他の詳細は、すでに Base64 でエンコードされているため、再度エンコードする必要はありません。これらの認証情報は、RHTAP のインストール中に作成した private.env ファイルにあります。

1.1. オプション 1: GitLab UI を使用する

手順

  1. GitLab にログインし、ソースリポジトリーを開きます。
  2. Setting メニューを展開し、CI/CD を選択します。
  3. 変数セクションで、Expand を選択し、Add variable を選択します。
  4. 以下の詳細を入力します。

    1. Flags で、Mask variable を選択して機密性の高い値を非表示にします。
    2. Key フィールドに MY_GITLAB_TOKEN と入力します。
    3. Value フィールドに、GitLab アカウントに関連付けられている トークン を入力します。
  5. ステップ 3 - 4 を繰り返して、必要な変数を追加します。

    変数説明

    1 つのイメージレジストリーに対してのみイメージレジストリー認証情報を提供します。

    QUAY_IO_CREDS_USR

    Quay.io リポジトリーにアクセスするためのユーザー名。

    QUAY_IO_CREDS_PSW

    Quay.io リポジトリーにアクセスするためのパスワード。

    ARTIFACTORY_IO_CREDS_USR

    JFrog Artifactory リポジトリーにアクセスするためのユーザー名。

    ARTIFACTORY_IO_CREDS_PSW

    JFrog Artifactory リポジトリーにアクセスするためのパスワード。

    NEXUS_IO_CREDS_USR

    Sonatype Nexus リポジトリーにアクセスするためのユーザー名。

    NEXUS_IO_CREDS_PSW

    Sonatype Nexus リポジトリーにアクセスするためのパスワード。

    Gitlab CI ランナーが RHTAP インスタンスと同じクラスター上で実行されていない場合は、これらの変数を設定します。

    REKOR_HOST

    Rekor サーバーの URL。

    TUF_MIRROR

    TUF サービスの URL。

    GitLab の GitOps 設定

    GITOPS_AUTH_PASSWORD

    新しくビルドされたイメージの GitOps リポジトリーを更新するためにシステムが使用するトークン。

    GITOPS_AUTH_USERNAME (任意)

    GitLab が Jenkins と連携するために必要なパラメーター。また、Jenkinsfile でこのパラメーターを含む行のコメントを解除する必要があります (GITOPS_AUTH_USERNAME = credentials('GITOPS_AUTH_USERNAME')。デフォルトでは、この行はコメントアウトされています。

    ACS タスクに必要な変数

    ROX_CENTRAL_ENDPOINT

    ROX Central サーバーのエンドポイント。

    ROX_API_TOKEN

    ROX サーバーにアクセスするための API トークン。

    SBOM タスクに必要な変数

    COSIGN_SECRET_PASSWORD

    Cosign 署名鍵のパスワード。

    COSIGN_SECRET_KEY

    Cosign の秘密鍵。

    COSIGN_PUBLIC_KEY

    Cosign の公開鍵。

    TRUSTIFICATION_BOMBASTIC_API_URL

    SBOM 生成で使用される Trustification Bombastic API の URL。

    TRUSTIFICATION_OIDC_ISSUER_URL

    Trustification Bombastic API と対話する際の認証に使用される OIDC 発行者 URL。

    TRUSTIFICATION_OIDC_CLIENT_ID

    OIDC を使用して Trustification Bombastic API に認証するためのクライアント ID。

    TRUSTIFICATION_OIDC_CLIENT_SECRET

    Trustification Bombastic API への認証にクライアント ID と一緒に使用されるクライアントシークレット。

    TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION

    システムがサポートして生成する CycloneDX SBOM バージョンを指定します。

  6. Add variable を選択します。
  7. 最後のパイプライン実行を再実行して、シークレットが正しく適用されていることを確認します。

    1. または、GitLab でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。

1.2. オプション 2: CLI を使用する

手順

  1. Visual Studio Code などの任意のテキストエディターで、次の 2 つのファイルを含むプロジェクトを作成します。

    • env_vars.sh
    • glab-set-vars
  2. 次の環境変数を使用して env_vars.sh ファイルを更新します。

    # env_vars.sh
    
    # GitLab credentials
    export MY_GITLAB_TOKEN="your_gitlab_token_here"
    export MY_GITLAB_USER="your_gitlab_username_here"
    
    export GITOPS_AUTH_PASSWORD="your_OpenShift_GitOps_password_here"
    export GITOPS_AUTH_USERNAME="your_OpenShift_GitOps_username_here"
    
    
    
    // Provide the credentials for the image registry you use.
    # Quay.io credentials
    export QUAY_IO_CREDS_USR="your_quay_username_here"
    export QUAY_IO_CREDS_PSW="your_quay_password_here"
    
    # JFrog Artifactory credenditals
    export ARTIFACTORY_IO_CREDS_USR="your_artifactory_username_here"
    export ARTIFACTORY_IO_CREDS_PSW="your_artifactory_password_here"
    
    # Sonatype Nexus credentials
    export NEXUS_IO_CREDS_USR="your_nexus_username_here"
    export NEXUS_IO_CREDS_PSW="your_nexus_password_here"
    
    # Rekor and TUF routes
    export REKOR_HOST="your rekor server url here"
    export TUF_MIRROR="your tuf service url here"
    
    // Variables required for ACS tasks
    # ROX variables
    export ROX_CENTRAL_ENDPOINT="your_rox_central_endpoint_here"
    export ROX_API_TOKEN="your_rox_api_token_here"
    
    
    // Set these variables if Gitlab CI runners do not run on the same cluster as the {ProductShortName} instance.
    export ROX_CENTRAL_ENDPOINT="your_rox_central_endpoint_here"
    export ROX_API_TOKEN="your_rox_api_token_here"
    
    
    // Variables required for SBOM tasks.
    # Cosign secrets
    export COSIGN_SECRET_PASSWORD="your_cosign_secret_password_here"
    export COSIGN_SECRET_KEY="your_cosign_secret_key_here"
    export COSIGN_PUBLIC_KEY="your_cosign_public_key_here"
    
    # Trustification credentials
    export TRUSTIFICATION_BOMBASTIC_API_URL="your__BOMBASTIC_API_URL_here"
    export TRUSTIFICATION_OIDC_ISSUER_URL="your_OIDC_ISSUER_URL_here"
    export TRUSTIFICATION_OIDC_CLIENT_ID="your_OIDC_CLIENT_ID_here"
    export TRUSTIFICATION_OIDC_CLIENT_SECRET="your_OIDC_CLIENT_SECRET_here"
    export TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION="your_SUPPORTED_CYCLONEDX_VERSION_here"
  3. 次の情報を使用して glab-set-vars ファイルを更新します。

    #!/bin/bash
    SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null 2>&1 && pwd)"
    
    if [ $# -ne 1 ]; then
        echo "Missing param, provide gitlab repo name"
        echo "Note: This script uses MY_GITLAB_TOKEN and MY_GITLAB_USER env vars"
        exit
    fi
    
    REPO=$1
    HEADER="PRIVATE-TOKEN: $MY_GITLAB_TOKEN"
    URL=https://gitlab.com/api/v4/projects
    
    # Look up the project ID so we can use it below
    PID=$(curl -s -L --header "$HEADER" "$URL/$MY_GITLAB_USER%2F$REPO" | jq ".id")
    
    function setVars() {
        NAME=$1
        VALUE=$2
        MASKED=${3:-true}
        echo "setting $NAME in https://gitlab.com/$MY_GITLAB_USER/$REPO"
    
        # Delete first because if the secret already exists then its value
        # won't be changed by the POST below
        curl -s --request DELETE --header "$HEADER" "$URL/$PID/variables/$NAME"
    
        # Set the new key/value
        curl -s --request POST --header "$HEADER" "$URL/$PID/variables" \
            --form "key=$NAME" --form "value=$VALUE" --form "masked=$MASKED" | jq
    }
    setVars ROX_CENTRAL_ENDPOINT $ROX_CENTRAL_ENDPOINT
    setVars ROX_API_TOKEN $ROX_API_TOKEN
    
    setVars GITOPS_AUTH_PASSWORD $MY_GITLAB_TOKEN
    setVars GITOPS_AUTH_USERNAME $MY_GITLAB_USER
    
    setVars QUAY_IO_CREDS_USR $QUAY_IO_CREDS_USR
    setVars QUAY_IO_CREDS_PSW $QUAY_IO_CREDS_PSW
    
    setVars COSIGN_SECRET_PASSWORD $COSIGN_SECRET_PASSWORD
    setVars COSIGN_SECRET_KEY $COSIGN_SECRET_KEY
    setVars COSIGN_PUBLIC_KEY $COSIGN_PUBLIC_KEY
    
    setVars TRUSTIFICATION_BOMBASTIC_API_URL "$TRUSTIFICATION_BOMBASTIC_API_URL"
    setVars TRUSTIFICATION_OIDC_ISSUER_URL "$TRUSTIFICATION_OIDC_ISSUER_URL"
    setVars TRUSTIFICATION_OIDC_CLIENT_ID "$TRUSTIFICATION_OIDC_CLIENT_ID"
    setVars TRUSTIFICATION_OIDC_CLIENT_SECRET "$TRUSTIFICATION_OIDC_CLIENT_SECRET"
    setVars TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION "$TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION"
    
    setVars ARTIFACTORY_IO_CREDS_USR $ARTIFACTORY_IO_CREDS_USR
    setVars ARTIFACTORY_IO_CREDS_PSW $ARTIFACTORY_IO_CREDS_PSW
    
    setVars NEXUS_IO_CREDS_USR $NEXUS_IO_CREDS_USR
    setVars NEXUS_IO_CREDS_PSW $NEXUS_IO_CREDS_PSW
    
    setVars REKOR_HOST $REKOR_HOST
    setVars TUF_MIRROR $TUF_MIRROR
  4. (オプション) glab-set-vars ファイルを変更して、不要な変数を無効にします。たとえば、setVars ROX_API_TOKEN $ROX_API_TOKEN を無効にするには、その横に false を追加します。

    ROX_API_TOKEN $ROX_API_TOKEN false
  5. 現在のシェルセッションに環境変数を読み込みます。

    source env_vars.sh
  6. glab-set-vars スクリプトを実行可能にし、リポジトリー名で実行して、GitLab リポジトリー内の変数を設定します。

    chmod +x glab-set-vars
    
    ./glab-set-vars your_repository_name
  7. 最後のパイプライン実行を再実行して、シークレットが正しく適用されていることを確認します。

    1. または、GitLab でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。





改訂日時: 2025-02-14

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.