GitLab CI の設定


Red Hat Advanced Developer Suite - software supply chain 1.6

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

Red Hat Advanced Developer Suite - software supply chain Documentation Team

概要

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

はじめに

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

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

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

前提条件

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

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

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

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

      • 署名鍵のパスワード、秘密鍵、公開鍵に署名する
      • Trustification API と発行者 URL、クライアント ID、クライアントシークレット、サポートされている CycloneDX バージョン
    注記

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

1.1. オプション 1: UI を使用して GitLab CI にシークレットと変数を追加する

手順

この手順では、必要なシークレットと環境変数の両方を追加します。シークレットの値をマスクする必要があることに注意してください。

  1. GitLab にログインし、ソースリポジトリーを開きます。
  2. Setting メニューを展開し、CI/CD を選択します。
  3. Variables セクションで Expand を選択します。
  4. Add variable を選択し、ポップアップウィンドウで以下を実行します。

    1. KeyValue フィールドに値を追加します。
    2. Flags で、Mask variable を選択して機密性の高い値を非表示にします。
    3. Add variable を選択します。
  5. 手順 4 を繰り返して必要なシークレットを追加し、それぞれの Mask variable フラグをチェックします。

    Expand
    表1.1 イメージレジストリーおよび GitOps シークレット
    変数説明

    QUAY_IO_CREDS_PSW

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

    ARTIFACTORY_IO_CREDS_PSW

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

    NEXUS_IO_CREDS_PSW

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

    GITOPS_AUTH_PASSWORD

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

    Expand
    表1.2 ACS および SBOM タスクに必要なシークレット
    変数説明

    ROX_API_TOKEN

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

    COSIGN_SECRET_PASSWORD

    Cosign 署名鍵のパスワード。

    COSIGN_SECRET_KEY

    Cosign の秘密鍵。

    TRUSTIFICATION_OIDC_CLIENT_SECRET

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

  1. 通常の環境変数を追加します。

    1. Add variable を選択します。
    2. KeyValue フィールドに値を追加します。
    3. Flags で、Mask variable を選択しないでください。
    4. Add variable を選択します。
  2. 手順 6 を繰り返して、次の変数を追加します。

    Expand
    表1.3 イメージレジストリーおよび GitOps 変数
    変数説明

    QUAY_IO_CREDS_USR

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

    ARTIFACTORY_IO_CREDS_USR

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

    NEXUS_IO_CREDS_USR

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

    GITOPS_AUTH_USERNAME

    OpenShift GitOps のユーザー名。

    Expand
    表1.4 ACS タスクおよび SBOM タスクに必要な変数
    変数説明

    ROX_CENTRAL_ENDPOINT

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

    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_SUPPORTED_CYCLONEDX_VERSION

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

    オプション: CI プロバイダーランナーが RHADS - SSC インスタンスと同じクラスター上で実行されていない場合は、Rekor および TUF 変数を設定します。

    Expand
    表1.5 Rekor および TUF 変数
    変数説明

    REKOR_HOST

    Rekor サーバーの URL。

    TUF_MIRROR

    TUF サービスの URL。

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

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

1.2. オプション 2: CLI を使用した GitLab CI へのシークレットおよび変数の追加

手順

  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"
    
    
    // Add credentials for an image repository that you use
    # Quay.io credentials
    export QUAY_IO_CREDS_USR="your_quay_username_here"
    export QUAY_IO_CREDS_PSW="your_quay_password_here"
    
    # or JFrog Artifactory credenditals
    export ARTIFACTORY_IO_CREDS_USR="your_artifactory_username_here"
    export ARTIFACTORY_IO_CREDS_PSW="your_artifactory_password_here"
    
    # or Sonatype Nexus credentials
    export NEXUS_IO_CREDS_USR="your_nexus_username_here"
    export NEXUS_IO_CREDS_PSW="your_nexus_password_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"
    
    // 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"
    
    // Set these variables if your CI provider runners do not run
    on the same cluster as the {ProductShortName} instance.
    # Rekor and TUF routes
    export REKOR_HOST="your rekor server url here"
    export TUF_MIRROR="your tuf service url here"
    Copy to Clipboard Toggle word wrap
  3. 次の情報を使用して glab-set-vars ファイルを更新します。

    #!/bin/bash
    
    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
    
    # Lookup the project id so we can use it below
    PID=$(curl -s -L --header "$HEADER" "$URL/$MY_GITLAB_USER%2F${REPO//.git/}" | 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 false
    setVars ROX_API_TOKEN $ROX_API_TOKEN
    
    setVars GITOPS_AUTH_PASSWORD $MY_GITLAB_TOKEN
    setVars GITOPS_AUTH_USERNAME $MY_GITLAB_USER false
    
    # Depending on which image repository you use, set:
    setVars QUAY_IO_CREDS_USR $QUAY_IO_CREDS_USR false
    setVars QUAY_IO_CREDS_PSW $QUAY_IO_CREDS_PSW
    # or
    setVars ARTIFACTORY_IO_CREDS_USR "$ARTIFACTORY_IO_CREDS_USR" false
    setVars ARTIFACTORY_IO_CREDS_PSW "$ARTIFACTORY_IO_CREDS_PSW"
    # or
    setVars NEXUS_IO_CREDS_USR "$NEXUS_IO_CREDS_USR" false
    setVars NEXUS_IO_CREDS_PSW "$NEXUS_IO_CREDS_PSW"
    
    setVars COSIGN_SECRET_PASSWORD $COSIGN_SECRET_PASSWORD
    setVars COSIGN_SECRET_KEY $COSIGN_SECRET_KEY
    setVars COSIGN_PUBLIC_KEY $COSIGN_PUBLIC_KEY false
    
    setVars TRUSTIFICATION_BOMBASTIC_API_URL "$TRUSTIFICATION_BOMBASTIC_API_URL" false
    setVars TRUSTIFICATION_OIDC_ISSUER_URL "$TRUSTIFICATION_OIDC_ISSUER_URL" false
    setVars TRUSTIFICATION_OIDC_CLIENT_ID "$TRUSTIFICATION_OIDC_CLIENT_ID" false
    setVars TRUSTIFICATION_OIDC_CLIENT_SECRET "$TRUSTIFICATION_OIDC_CLIENT_SECRET"
    setVars TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION "$TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION" false
    
    # If you need to use the Rekor and TUF variables and you've added them
    # to env_vars.sh, set them here too:
    
    setVars REKOR_HOST "$REKOR_HOST" false
    setVars TUF_MIRROR "$TUF_MIRROR" false
    
    bash $SCRIPTDIR/glab-get-vars $1
    Copy to Clipboard Toggle word wrap
    注記

    デフォルトでは、setVars 関数は変数をシークレットとして作成し、この変数の値は UI とログに表示されません。マスクされていない変数を作成するには、設定した行の最後に false を追加します。以下に例を示します。

    setVars COSIGN_PUBLIC_KEY $COSIGN_PUBLIC_KEY false
    Copy to Clipboard Toggle word wrap
  4. 現在のシェルセッションに環境変数を読み込みます。

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

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

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





改訂日時: 2025-09-06

法律上の通知

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

Theme

© 2026 Red Hat
トップに戻る