JFrog Platform を GitHub 環境に接続してシームレスな統合を実現する方法

GitHub と JFrog パートナーシップにより、ソースコードとバイナリをシームレスに統合して、お気に入りのソリューションを簡単に組み合わせることができます。つまり、一つのシームレスなシステム内で、安全性が確保された状態で、ソフトウェア開発の全プロセスを包括的にサポートします。

この統合は、オープンソース パッケージのキュレーションからコーディング、CI、リリース管理、デプロイ、本番環境まで、すべてをカバーしています。これには、開発者エクスペリエンスに対する 3 つの主要な改善も含まれています。

  1. 統一された認証と認可 – GitHub ワークフロー アクションと、JFrog と GitHub 間のシームレスな SSO 認証。
  2. 双方向のコードとパッケージのリンク – コードとパッケージを両方のプラットフォームでリンク。
  3. 統合セキュリティ – JFrog Advanced Security の調査結果は GitHub ダッシュボードから直接入手でき、マージ時にプル リクエストをチェック。
コードからパッケージまで、統合されたエンドツーエンドの JFrog と GitHub エクスペリエンス

このブログ記事では、統合方法の具体的な手順を示しながら、ユースケースの流れに沿って説明します。

それでは始めましょう。

はじめに

事前に準備しておくものは以下の通りです。

1.認証と認可

両方のプラットフォームで認証と認可を行うには、次の構成が必要です。

Github 変数

GitHub 変数は、機密性の高い認証を保存するために使用されます。JFrog を指す次の 2 つの変数を GitHub で定義します。Settings > Secrets and variables > Actions に移動し、変数を追加します。

  • JF_URL – JFrog サーバーへのベース URL
  • JF_PROJECT – GitHub リポジトリに接続する JFrog プロジェクト キー
GitHub Actions のシークレットと変数

OAuth

GitHub 認証である GitHub OAuth に基づいて JFrog Platform にログインするように OAuth を構成します。

JFrog Platform への GitHub OAuth のログイン

OIDC

JFrog の OIDC と GitHub Actions の統合により、GitHub Actions と JFrog Platform の間に信頼性のある接続を確立することができます。

JFrog Platform の UI から、[Administration] タブ > General > Manage Integrations > New Integration > OpenID Connect に移動します。

OIDC 統合を構成し、[Save] と [Continue] をクリックします。

ID マッピングを構成します。

  • Name: ID マッピング名
  • Description: 元のリポジトリとマッピングされた ID を識別できることが望ましい
  • Priority: ID マッピングが評価される優先順位
  • Claims json: このマッピングを true と評価するために検証するクレームを含む JSON ファイル
    • iss:クレームが Github で生成されたことを確認するために、https://token.actions.githubusercontent.com に設定
    • Enterprise: リポジトリが属するエンタープライズ名に対するクレーム制限 (オプション)
    • Repository: お使いの Github のリポジトリ名
    • クレーム (オプション): 環境、アクター、runner_environment、サブ、repository_owner、repository_visibility、ワークフローなど

例:

{"repository":"<repository_name>, "enterprise":"<your_github_enterprise_name>"}
  • Token scope: Group / User / Admin: 特定のグループ/ユーザーを持つスコープ付きトークン
  • Service: アクセスを許可する特定の、またはすべての JFrog 製品
  • Token Expiration Time: トークンの有効期限 (分)
JFrog Platform – ID マッピング
JFrog Platform と GitHub – OIDC 統合

GitHub Actions

Github Action の構成を作成して、JFrog CLI をセットアップし、JFrog FrogBot を実行します。

JFrog CLI 設定の構成:

- name:Setup JFrog CLI
    uses:jfrog/setup-jfrog-cli@v4
    env:
      JF_URL:https://${{ vars.JF_URL }}/
      JF_PROJECT:${{ vars.JF_PROJECT }}
    with:
      oidc-provider-name:<OIDC integration name set on JFrog platform>

Frogbot の構成:

- uses:jfrog/frogbot@v2
      with:
          oidc-provider-name:
env:
          # JFrog PlatformのURL
          JF_URL:https://${{ vars.JF_URL }}/
          JF_PROJECT:${{ vars.JF_PROJECT }}
          JF_GIT_TOKEN:${{ secrets.GITHUB_TOKEN }}
          …

2.双方向のコードとパッケージのリンク

GitHub Build ActionJFrog CLI を使用すると、ビルドを JFrog に関連するビルド情報、パッケージ、およびセキュリティ スキャンに接続します。この統合により、GitHub Actions と JFrog Artifactory を組み合わせることができます。

この例に見られるビルドジョブの yml は、すべてのプル リクエストやプッシュの後に自動的にトリガーするように構成されています。

# 厳選された Python リポジトリを使用するように Python を設定する
- name:configure jfrog environment
    run:|
      jf pip-config --repo-resolve=python-virtual
# Python の構成
- name:configure environment
              run:|
                python3 -m pip install --upgrade pip setuptools wheel sigstore
                wheel -h
                pip show setuptools
                echo $VIRTUAL_ENV
# Python パッケージのビルド
- name:build project
    run:|
      jf pip install -r requirements.txt
python setup.py sdist bdist_wheel
cd dist && echo "hashes=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT

# JFrog Platform への Python パッケージのアップロード
- name:publish python package
    run:|
      jf rt upload dist/ python-virtual/example-projects/

# Docker の設定
- name:Setup Docker Buildx
  uses:docker/setup-buildx-action@v3

# OIDC の有効期間の短い認証情報を使用した Docker 認証
- name:Authenticate Docker
    uses:docker/login-action@v3
    with:
      registry:${{ vars.JF_URL }}
      username:${{ steps.setup-cli.outputs.oidc-user }}
      password:${{ steps.setup-cli.outputs.oidc-token }}
# Docker イメージのビルド
- name:Build Docker image
    uses:docker/build-push-action@v5
    id:build
    with:
      push:true
      platforms:linux/amd64 #, linux/arm64
      tags:${{ vars.JF_URL }}/${{ env.DOCKER_REPO }}/${{ env.IMAGE_NAME }}
# Docker Xray のスキャン
- name:docker scan
     run:|
       jf docker pull ${{ vars.JF_URL }}/${{ env.DOCKER_REPO }}/${{ env.IMAGE_NAME }}
       jf docker scan ${{ vars.JF_URL }}/${{ env.DOCKER_REPO }}/${{ env.IMAGE_NAME }}

# ビルドされた Docker を JFrog のビルド情報に追加する
- name:add docker package to build
    run:|
      echo "${{ vars.JF_URL }}/${{ env.DOCKER_REPO }}/${{ env.IMAGE_NAME }}@${{ steps.build.outputs.digest }}" > metadata.json
      jf rt build-docker-create ${{ env.DOCKER_REPO }} --image-file metadata.json

# ビルドのビルド情報の公開とスキャン
- name:publish build info
    run:|
      jf rt build-collect-env      # 環境変数の収集
      jf rt build-publish       # ビルド情報の公開
      jf build-scan  # Xray Scanのビルド情報

GitHub の JFrog ジョブの概要

ビルドの実行が完了すると、ビルドとセキュリティ情報を含むジョブの概要が生成されます。JFrog と GitHub のプラットフォームの間を簡単に移動できます。これにより、Xray セキュリティ スキャン データ、ビルド差分などのプロジェクト ビルドの詳細、環境変数、ビルド JSON 情報などを確認できます。プロジェクト パッケージのリンクをクリックすると、JFrog プロジェクト パッケージのビューに移動し、アーティファクトとセキュリティ スキャンに関する追加情報を取得できます。

GitHub ジョブを参照する JFrog ジョブの概要、パッケージ、脆弱性、ビルド情報 SBOM

3. 統合セキュリティ

JFrog Frogbot は、依存関係の潜在的な脆弱性、公開されたシークレット、マルウェアについて、リポジトリを自動的にスキャンします。脆弱性が検出されると、Frogbot は警告を発するだけでなく、修正案を含むプル リクエストを自動的に開き、修復プロセスを合理化することもできます。これらのチェックにより、許可されていないコードや危険なコードの変更がリポジトリにマージされるのを防ぎます。

また、コンプライアンス要件に役立つ詳細なレポートとダッシュボードや、プロジェクトのセキュリティ体制に関する洞察も得ることができます。

この例では、Frogbot が安全でないハッシュ アルゴリズムを検出したことがわかります。

安全でないハッシュ アルゴリズムの脆弱性は、既知の安全でないハッシュ アルゴリズムを使用するときに発生します。
ハッシュ アルゴリズムは、任意で入力でき、ハッシュ値 (パスワードやファイルなどのデータの整合性を検証するために使用できる固定長の出力) を生成します。
安全ではないハッシュ アルゴリズムとは、攻撃者が異なる入力データに対して同じハッシュ値を生成することが可能なアルゴリズムであり、これを合理的な時間内に行うことができる「ハッシュ衝突攻撃」を指します。

また、問題を簡単に修正できるように、次の対策を行いました。

以上です。ぜひ試してみてください!

JFrog Platform の無料体験版お申し込みはこちらから。

GitHub Enterprise の無料体験版お申込みはこちらから。


世界中の優れたソフトウェアを提供するエクセルソフトは JFrogと GitHub の正規代理店として、JFrog Platform および GitHub Enterprise 製品の購入から導入までを日本語でサポートしています。各製品に関するお問い合わせはエクセルソフトまで


記事参照: JFrog PlatformをGitHub環境に接続してシームレスな統合を作成する方法

タイトルとURLをコピーしました