はじめに
構成証明は、ビルドするソフトウェアに対して検証不可能な証明と整合性の保証を作成するための優れた方法です。
ただし、成果物の構成証明自体には、SLSA v1.0 ビルド レベル 2 を満たす成果物のビルドに使用されたビルド手順のようなリンクが用意されていることに注意してください。 情報に基づくリスクの決定を行うには、これらのリンクに従って、それらのビルド手順を評価する必要があります。
ビルドに既知で検証済みのビルド手順を使用することで、さらに踏み込んだセキュリティ対策を行えます。 これを行う優れた方法として、組織全体の多くのリポジトリが共有する再利用可能なワークフローでビルドを実行します。 再利用可能なワークフローは、SLSA v1.0 ビルド レベル 3 を満たすために、ビルド プロセスと呼び出しワークフローを分離できます。
このガイドを開始する前に、以下について理解しておく必要があります。
- 成果物の構成証明の生成 「アーティファクトの構成証明を使用して構築の実績を確立する」を参照してください。
- 再利用可能なワークフローの作成と使用。 「ワークフローの再利用」を参照してください。
手順 1: ビルドの構成
まず、成果物の構成証明と再利用可能なワークフローの両方を使用してビルドする必要があります。
再利用可能なワークフローを使用するビルド
再利用可能なワークフローを使用してソフトウェアをビルドしていない場合は、ビルド手順を実行し、再利用可能なワークフローに移動する必要があります。 再利用可能なワークフローを記述して呼び出す方法の詳細については、「ワークフローの再利用」を参照してください。
構成証明が生成されるビルド
ソフトウェアのビルドに使用する再利用可能なワークフローでは、ビルドの実績を確立するために成果物の構成証明も生成する必要があります。 詳しくは、「アーティファクトの構成証明を使用して構築の実績を確立する」をご覧ください。
再利用可能なワークフローを使用して成果物の構成証明を生成する場合、呼び出し元のワークフローと再利用可能なワークフローの両方に次のアクセス許可が必要です。
permissions: attestations: write contents: read id-token: write
permissions:
attestations: write
contents: read
id-token: write
コンテナー イメージをビルドする場合は、packages: write
アクセス許可も含める 必要があります。
手順 2: 再利用可能なワークフローで構築された成果物の構成証明の確認
ビルドで生成された成果物の構成証明を確認するには、GitHub CLI から gh attestation verify
を使用できます。
この gh attestation verify
コマンドでは、--owner
または --repo
フラグを使用する必要があります。 これらのフラグは 2 つのことを行います。
gh attestation verify
にどこから構成証明を取得するかを指示します。 これは常に呼び出し元のワークフローになります。- 署名を行ったワークフローの発信元を
gh attestation verify
に伝えます。 これは常にattest-build-provenance
アクションを使用するワークフローであり、再利用可能なワークフローである可能性があります。
gh attestation verify
コマンドラインと共に使用することはできません。
- 再利用可能なワークフローが呼び出し元ワークフローと同じリポジトリにない場合は、
--signer-repo
フラグを使用して、再利用可能なワークフローを含むリポジトリを指定します。 - 特定のワークフローで成果物の構成証明に署名する必要がある場合は、
--signer-workflow
フラグを使用して、使用するワークフロー ファイルを指定します。
たとえば、呼び出し元のワークフローが ORGANIZATION_NAME/REPOSITORY_NAME/.github/workflows/calling.yml
で REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml
を使用する場合、次のようにすることができます。
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
または、正確なワークフローを指定する場合は、次のようにします。
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
まとめ
これで、再利用可能なワークフローで成果物をビルドして署名します。これにより、SLSA v1.0 ビルド レベル 3 で必要な分離を実現できます。 成果物が既知の検証済みのビルド手順でビルドされていることを確認するには、特定のワークフローでビルドされたことを確認します。成果物が再利用可能かどうかは関係ありません。