セキュリティー統合のための GitLab の設定


Red Hat Trusted Application Pipeline 1.3

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

Red Hat Trusted Application Pipeline Documentation Team

概要

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

はじめに

GitLab パイプラインで脆弱性スキャン、イメージ署名、アテステーション生成などの重要なタスクを実行できるようにするには、次のタスクを完了する必要があります。

  • 自動パイプライントリガーを有効にするには、GitLab Webhook を設定します。
  • 外部ツールとの安全な統合のために、GitLab CI にシークレットを追加します。

これらの設定により、GitLab は ACS、Quay、GitOps とシームレスに統合し、コンテナーイメージの署名と検証に Cosign を利用できるようになります。

第1章 自動パイプライントリガーを有効にするために GitLab Webhook を設定する

GitLab で webhook とシークレットを設定し、コードの更新時に RHDH でパイプラインの実行を自動的にトリガーします。

前提条件

  • ソースリポジトリーがある。
  • Webhook URL とシークレットトークンがある。これらの認証情報は ~/install_values.txt ファイルにあります。

手順

  1. GitLab ソースリポジトリーに移動します。

    1. Red Hat Developer Hub プラットフォームで、カタログ に移動し、GitLab がリポジトリーホストとして設定されているアプリケーションを選択します。
    2. Overview タブに移動し、View Source を選択してソースコードのリポジトリーを開きます。
  2. Settings > Webhooks に移動します。
  3. URL フィールドに webhook URL を入力します。
  4. Secret Token フィールドにシークレットトークンを入力します。
  5. Trigger セクションでは、次の操作を行います。

    1. Push events を選択します。
    2. Merge request events を選択します。
  6. Add Webhook をクリックします。

検証

  1. GitLab のソースリポジトリーへの変更をコミットします。
  2. RHDH の CI タブに移動します。
  3. コードプッシュに対してパイプラインの実行がトリガーされていることを確認します。

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

CI プロバイダーとして GitLab を選択し、アプリケーションを作成すると、パイプラインの実行が失敗することがあります。この失敗は、パイプラインが必要な GitLab およびその他のシークレットを見つけられないために発生します。必要なシークレットを追加し、パイプラインの障害を解決するには、次の手順を実行します。

前提条件

  • GitLab ジョブと GitLab CI 変数を作成および管理するのに必要な権限がある。
  • コンテナーイメージにアクセスしてプルするためのイメージレジストリー (Quay.io など) のユーザー名とパスワードがある。
  • GitLab CI で実行する特定のタスクについては、次の情報が必要です。

    • ACS タスクの場合:

      • ROX Central サーバーのエンドポイントとトークン
    • SBOM タスクの場合:

      • 署名キーのパスワード、秘密鍵、公開鍵に署名する
      • 信頼 URL、クライアント ID、シークレット、およびサポートされている CycloneDX バージョン

2.1. UI を使用して GitLab CI にシークレットを追加する

手順

  1. ログインしてソースリポジトリーに移動します。
  2. Setting メニューを展開し、CI/CD を選択します。
  3. 変数セクションで、Expand を選択し、Add variable を選択します。
  4. Flags の下で、Mask variable チェックボックスをオンにします。
  5. Key フィールドに MY_GITLAB_TOKEN と入力します。
  6. Value フィールドに、GitLab アカウントに関連付けられているトークンを入力します。
  7. 手順 3 - 6 を繰り返して、必要な変数を追加します。

    Expand
    変数説明

    すべてのパイプライン実行に必要な変数

    QUAY_IO_CREDS_USR

    Quay.io 認証情報にアクセスするためのユーザー名。

    QUAY_IO_CREDS_PSW

    Quay.io 認証情報にアクセスするためのパスワード。

    REKOR_HOST

    Rekor サーバーの URL。

    TUF_MIRROR

    TUF サービスの URL。

    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 バージョンを指定します。

  8. 最後に実行したパイプラインを再実行します。

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

2.2. CLI を使用して GitLab にシークレットを追加する

手順

  1. 次の 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"
    
    # ROX variables
    export ROX_CENTRAL_ENDPOINT="your_rox_central_endpoint_here"
    export ROX_API_TOKEN="your_rox_api_token_here"
    
    # Quay.io credentials
    export QUAY_IO_CREDS_USR="your_quay_username_here"
    export QUAY_IO_CREDS_PSW="your_quay_password_here"
    
    # 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"
    
    # 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
    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 false
    setVars ROX_API_TOKEN $ROX_API_TOKEN
    
    setVars GITOPS_AUTH_PASSWORD $MY_GITLAB_TOKEN
    setVars GITOPS_AUTH_USERNAME $MY_GITLAB_USER false
    
    setVars QUAY_IO_CREDS_USR $QUAY_IO_CREDS_USR false
    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 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
    
    setVars REKOR_HOST $REKOR_HOST false
    setVars TUF_MIRROR $TUF_MIRROR 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 でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。





改訂日時: 2024-12-11

法律上の通知

Copyright © 2024 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

© 2025 Red Hat