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

GitHubとJFrogのプラットフォームを統合するためのガイドであり、コーディングとビルドのフェーズを通じてソフトウェアプロジェクトを管理し、保護するための統一されたエクスペリエンスを提供します。

GitHub JFrog Integration

GitHubとの最新のJFrogコラボレーションにより、ソースコードとバイナリのお気に入りのソリューションをシームレスな統合で簡単に組み合わせることができます。つまり、これにより、ソフトウェアプロジェクトをサポートする、統合された包括的でセキュアなエンドツーエンドのエクスペリエンスが得られます。

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

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

Flow chart demonstrating how GitHub and JFrog interact throughout the software development lifecycle.

コードからパッケージまで、統合されたエンドツーエンドの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を構成します。

GitHub OAuth Login to the JFrog PlatformJFrog 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 - Identity MappingJFrog Platform – IDマッピング

JFrog Platform and GitHub - OIDC IntegrationJFrog 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ビルドアクションJFrog 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プロジェクトパッケージのビューに移動し、アーティファクトとセキュリティスキャンに関する追加情報を取得することもできます。

JFrog Job Summary, and Build-Info SBOM pointing back to GitHub JobGitHubジョブを参照するJFrogジョブの概要、パッケージ、脆弱性、ビルド情報SBOM

3.統合セキュリティ

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

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

GitHubアクションを使用してFrogbotを設定する >

Unsafe Hash Algorithm

 

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

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

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

Remediation

以上になります。

あとは、自分で試してみるだけです。

 

6月13日にGitHubとJFrogの連携による相乗効果をご覧ください。

共同ウェビナーに登録する