GitHub Actions の設定
セキュアな CI/CD ワークフロー用に GitHub Actions を設定する方法を学ぶ
概要
はじめに
アプリケーションに GitHub Actions を使用している場合、シークレットが欠落しているためにパイプラインの実行が失敗する可能性があります。シークレットがないと、Quay、JFrog、Red Hat Advanced Cluster Security (ACS) との統合が機能せず、脆弱性スキャン、イメージ署名、コンプライアンスのための SBOM 生成などのセキュリティータスクが機能しなくなります。
これを防ぐには、GitHub Actions にシークレットをセキュアに保存する必要があります。このガイドでは、パイプラインをスムーズかつセキュアに実行するためのプロセスを順を追って説明します。
第1章 外部ツールとの統合のために GitHub Actions にシークレットと変数を追加する
前提条件
GitHub Actions を設定する前に、次のものがあることを確認してください。
- GitHub リポジトリーと CI/CD 設定への 管理者 アクセス権。
- Quay.io、JFrog Artifactory、または Sonatype Nexus からコンテナーイメージをプルするための コンテナーレジストリー認証情報。
特定の GitHub Actions タスクの 認証の詳細:
ACS セキュリティータスクの場合:
- ROX Central サーバーエンドポイント
- ROX API トークン
SBOM およびアーティファクト署名タスクの場合:
- 署名鍵のパスワード、秘密鍵、公開鍵に署名する
- Trustification API と発行者 URL、クライアント ID、クライアントシークレット、サポートされている CycloneDX バージョン
注記認証情報やその他の詳細は、すでに Base64 でエンコードされているため、再度エンコードする必要はありません。これらの認証情報は、RHTAP のインストール中に作成した
private.env
ファイルにあります。
1.1. オプション 1: UI を使用して GitHub Actions にシークレットと変数を追加する
手順
- GitHub にログインし、ソースリポジトリーに移動します。
- Settings タブに移動します。
- 左側のナビゲーションペインで、Secrets and variables を選択し、Actions を選択します。
Actions secrets and variables ページで、Secrets タブを選択します。
- New repository secret を選択します。
- Name フィールドに MY_GITHUB_TOKEN を入力します。
- Secret フィールドに、GitHub アカウントに関連付けられた トークン を入力します。
- Add secret を選択します。
手順 4 を繰り返して、必要なシークレットを追加します。
表1.1 イメージレジストリーおよび GitOps シークレット 変数 説明 IMAGE_REGISTRY_PASSWORD
コンテナーイメージレジストリーにアクセスするためのパスワード。
GITOPS_AUTH_PASSWORD
新しくビルドされたイメージの GitOps リポジトリーを更新するためにシステムが使用するトークン。
表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 と一緒に使用されるクライアントシークレット。
Actions secrets and variables ページで、Variables タブに切り替えます。
- New repository variable を選択します。
- Name フィールドに IMAGE_REGISTRY_USER を入力します。
- Value フィールドに、コンテナーイメージレジストリーにアクセスするためのユーザー名を入力します。
- Add variable を選択します。
手順 6 を繰り返して、必要な変数を追加します。
表1.3 イメージレジストリー変数 変数 説明 IMAGE_REGISTRY_USER
コンテナーイメージレジストリーにアクセスするためのユーザー名
表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 プロバイダーランナーが RHTAP インスタンスと同じクラスター上で実行されていない場合は、Rekor および TUF 変数を設定します。
表1.5 Rekor および TUF 変数 変数 説明 REKOR_HOST
Rekor サーバーの URL。
TUF_MIRROR
TUF サービスの URL。
最後のパイプライン実行を再実行して、シークレットが正しく適用されていることを確認します。
- または、GitHub でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。
1.2. オプション 2: CLI を使用して GitHub Actions にシークレットと変数を追加する
手順
Visual Studio Code などの任意のテキストエディターで、次の 2 つのファイルを含むプロジェクトを作成します。
- env_vars.sh
- ghub-set-vars
次の環境変数を使用して
env_vars.sh
ファイルを更新します。# env_vars.sh # GitHub credentials export MY_GITHUB_TOKEN="your_github_token_here" export MY_GITHUB_USER="your_github_username_here" export GITOPS_AUTH_PASSWORD="your_OpenShift_GitOps_password_here" # Image registry variables export IMAGE_REGISTRY_USER="your_registry_username_here" export IMAGE_REGISTRY_PASSWORD="your_registry_password_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"
ghub-set-vars
ファイルを次の情報で更新します。#!/bin/bash # Helper script used to simplify setting variables and secrets in a GitHub repository set -euo pipefail function echo_usage() { echo "Usage: $0 OWNER/REPO" echo " $0 https://github.com/OWNER/REPO" } if [ $# -ne 1 ]; then echo "Invalid number of arguments" echo echo_usage exit 1 fi github_repository=$1 # Naive check that the provided repository in the argument matches # the expected format (see usage) if ! [[ "$github_repository" =~ ^(https://github.com/)?(.+/.+)$ ]]; then echo "Invalid format of the provided argument '${github_repository}'" echo echo_usage fi # Set repository variable via GitHub CLI # The value of the variable will NOT be hidden in the logs function set_variable() { echo "Setting variable '$1' in $github_repository..." gh variable set "$1" --body "$2" --repo "$github_repository" } # Set repository secret via GitHub CLI function set_secret() { echo "Setting secret '$1' in $github_repository..." gh secret set "$1" --body "$2" --repo "$github_repository" } # Set the minimum required variables and secrets # Depending on which image repository you use, set: set_variable IMAGE_REGISTRY quay.io/"$QUAY_IO_CREDS_USR" set_variable IMAGE_REGISTRY_USER "$QUAY_IO_CREDS_USR" set_secret IMAGE_REGISTRY_PASSWORD "$QUAY_IO_CREDS_PSW" # or set_variable IMAGE_REGISTRY_USER "$ARTIFACTORY_IO_CREDS_USR" set_secret IMAGE_REGISTRY_PASSWORD "$ARTIFACTORY_IO_CREDS_PSW" # or set_variable IMAGE_REGISTRY_USER "$NEXUS_IO_CREDS_USR" set_secret IMAGE_REGISTRY_PASSWORD "$NEXUS_IO_CREDS_PSW" set_variable ROX_CENTRAL_ENDPOINT "$ROX_CENTRAL_ENDPOINT" set_secret ROX_API_TOKEN "$ROX_API_TOKEN" set_secret GITOPS_AUTH_PASSWORD "$GITOPS_AUTH_PASSWORD" set_variable QUAY_IO_CREDS_USR "$QUAY_IO_CREDS_USR" set_secret QUAY_IO_CREDS_PSW "$QUAY_IO_CREDS_PSW" set_secret COSIGN_SECRET_PASSWORD "$COSIGN_SECRET_PASSWORD" set_secret COSIGN_SECRET_KEY "$COSIGN_SECRET_KEY" set_variable COSIGN_PUBLIC_KEY "$COSIGN_PUBLIC_KEY" set_variable TRUSTIFICATION_BOMBASTIC_API_URL "$TRUSTIFICATION_BOMBASTIC_API_URL" set_variable TRUSTIFICATION_OIDC_ISSUER_URL "$TRUSTIFICATION_OIDC_ISSUER_URL" set_variable TRUSTIFICATION_OIDC_CLIENT_ID "$TRUSTIFICATION_OIDC_CLIENT_ID" set_variable TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION "$TRUSTIFICATION_SUPPORTED_CYCLONEDX_VERSION" set_secret TRUSTIFICATION_OIDC_CLIENT_SECRET "$TRUSTIFICATION_OIDC_CLIENT_SECRET" # If you need to use the Rekor and TUF variables and you've added them to env_vars.sh, # set them here too: set_variable REKOR_HOST "$REKOR_HOST" set_variable TUF_MIRROR "$TUF_MIRROR" echo echo "All variables and secrets are set."
現在のシェルセッションに環境変数を読み込みます。
source env_vars.sh
ghub-set-vars
スクリプトを実行可能にして、リポジトリー名で実行し、GitHub リポジトリーに変数を設定します。chmod +x ghub-set-vars ./ghub-set-vars your_repository_name
最後のパイプライン実行を再実行して、シークレットが正しく適用されていることを確認します。
- または、GitHub でアプリケーションのソースリポジトリーに切り替えて、小さな変更を加え、コミットして新しいパイプラインの実行をトリガーします。
改訂日時: 2025-05-01