JFrog PlatformをGitHub環境に接続してシームレスな統合を作成する方法
GitHubとJFrogのプラットフォームを統合するためのガイドであり、コーディングとビルドのフェーズを通じてソフトウェアプロジェクトを管理し、保護するための統一されたエクスペリエンスを提供します。
GitHubとの最新のJFrogコラボレーションにより、ソースコードとバイナリのお気に入りのソリューションをシームレスな統合で簡単に組み合わせることができます。つまり、これにより、ソフトウェアプロジェクトをサポートする、統合された包括的でセキュアなエンドツーエンドのエクスペリエンスが得られます。
この統合は、オープンソースパッケージのキュレーションからコーディング、CI、リリース管理、デプロイ、本番環境まで、すべてをカバーしています。これには、開発者エクスペリエンスに対する3つの大きな改善が含まれます。
- 統一された認証と認可 – GitHubワークフローアクションと、JFrogとGitHub間のシームレスなSSO認証について統一が図られます。
- 双方向のコードとパッケージのリンク – コードとパッケージは両方のプラットフォームでリンクされます。
- 統合セキュリティ – JFrog Advanced Securityの調査結果はGitHubダッシュボードから直接入手でき、マージ時にプルリクエストのチェックが実行されます。
コードからパッケージまで、統合されたエンドツーエンドのJFrogと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プロジェクトキーを表します
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ビルドアクションで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プロジェクトパッケージのビューに移動し、アーティファクトとセキュリティスキャンに関する追加情報を取得することもできます。
GitHubジョブを参照するJFrogジョブの概要、パッケージ、脆弱性、ビルド情報SBOM
3.統合セキュリティ
JFrog Frogbotは、依存関係の潜在的な脆弱性、公開されたシークレット、マルウェアについて、リポジトリを自動的にスキャンします。脆弱性が検出されると、Frogbotは警告を発するだけでなく、修正案を含むプルリクエストを自動的に開き、修復プロセスを合理化することもできます。これらのチェックにより、許可されていないコードや危険なコードの変更がリポジトリにマージされるのを防ぐことができます。
また、コンプライアンス要件に役立つ詳細なレポートとダッシュボードや、プロジェクトのセキュリティ体制に関する洞察も得ることができます。
GitHubアクションを使用してFrogbotを設定する >
この例では、Frogbotが安全でないハッシュアルゴリズムを検出したことがわかります。
安全でないハッシュアルゴリズムの脆弱性は、既知の安全でないハッシュアルゴリズムを使用するときに発生します。 ハッシュアルゴリズムは、任意の入力を受け入れ、ハッシュ値 (パスワードやファイルなどのデータの整合性を 検証するために使用できる固定長の出力) を生成します。 攻撃者があるまとまった時間内に異なる入力データに対して同じハッシュ値を生成するために使用できる、 アルゴリズム内の安全でないハッシュアルゴリズム (「ハッシュ衝突攻撃」)。 |
また、問題を簡単に修正できるように、次の修正を行いました。
以上になります。
あとは、自分で試してみるだけです。