GitHub と JFrog パートナーシップにより、ソースコードとバイナリをシームレスに統合して、お気に入りのソリューションを簡単に組み合わせることができます。つまり、一つのシームレスなシステム内で、安全性が確保された状態で、ソフトウェア開発の全プロセスを包括的にサポートします。
この統合は、オープンソース パッケージのキュレーションからコーディング、CI、リリース管理、デプロイ、本番環境まで、すべてをカバーしています。これには、開発者エクスペリエンスに対する 3 つの主要な改善も含まれています。
- 統一された認証と認可 – GitHub ワークフロー アクションと、JFrog と GitHub 間のシームレスな SSO 認証。
- 双方向のコードとパッケージのリンク – コードとパッケージを両方のプラットフォームでリンク。
- 統合セキュリティ – JFrog Advanced Security の調査結果は GitHub ダッシュボードから直接入手でき、マージ時にプル リクエストをチェック。
このブログ記事では、統合方法の具体的な手順を示しながら、ユースケースの流れに沿って説明します。
それでは始めましょう。
はじめに
事前に準備しておくものは以下の通りです。
- JFrog Platform Cloud
- 「CodeNinjas_AI」 という JFrog プロジェクトを作成します。
- GitHub のサンプルリポジトリ
- このサンプル リポジトリをフォークして、ご自身のコピーで試せるようにします。
1.認証と認可
両方のプラットフォームで認証と認可を行うには、次の構成が必要です。
Github 変数
GitHub 変数は、機密性の高い認証を保存するために使用されます。JFrog を指す次の 2 つの変数を GitHub で定義します。Settings > Secrets and variables > Actions に移動し、変数を追加します。
- JF_URL – JFrog サーバーへのベース URL
- JF_PROJECT – GitHub リポジトリに接続する JFrog プロジェクト キー
OAuth
GitHub 認証である GitHub OAuth に基づいて JFrog Platform にログインするように 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: トークンの有効期限 (分)
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 Action で 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 プロジェクト パッケージのビューに移動し、アーティファクトとセキュリティ スキャンに関する追加情報を取得できます。
3. 統合セキュリティ
JFrog Frogbot は、依存関係の潜在的な脆弱性、公開されたシークレット、マルウェアについて、リポジトリを自動的にスキャンします。脆弱性が検出されると、Frogbot は警告を発するだけでなく、修正案を含むプル リクエストを自動的に開き、修復プロセスを合理化することもできます。これらのチェックにより、許可されていないコードや危険なコードの変更がリポジトリにマージされるのを防ぎます。
また、コンプライアンス要件に役立つ詳細なレポートとダッシュボードや、プロジェクトのセキュリティ体制に関する洞察も得ることができます。
この例では、Frogbot が安全でないハッシュ アルゴリズムを検出したことがわかります。
安全でないハッシュ アルゴリズムの脆弱性は、既知の安全でないハッシュ アルゴリズムを使用するときに発生します。 ハッシュ アルゴリズムは、任意で入力でき、ハッシュ値 (パスワードやファイルなどのデータの整合性を検証するために使用できる固定長の出力) を生成します。 安全ではないハッシュ アルゴリズムとは、攻撃者が異なる入力データに対して同じハッシュ値を生成することが可能なアルゴリズムであり、これを合理的な時間内に行うことができる「ハッシュ衝突攻撃」を指します。 |
また、問題を簡単に修正できるように、次の対策を行いました。
以上です。ぜひ試してみてください!
JFrog Platform の無料体験版お申し込みはこちらから。
GitHub Enterprise の無料体験版お申込みはこちらから。
世界中の優れたソフトウェアを提供するエクセルソフトは JFrogと GitHub の正規代理店として、JFrog Platform および GitHub Enterprise 製品の購入から導入までを日本語でサポートしています。各製品に関するお問い合わせはエクセルソフトまで。