Skip to main content

成果物の構成証明と再利用可能なワークフローを使用して SLSA v1 ビルド レベル 3 を実現する

再利用可能なワークフローと成果物の構成証明を使用してソフトウェアを構築することで、サプライ チェーンのセキュリティを合理化し、SLSA v1.0 ビルド レベル 3 を達成するのに役立ちます。

はじめに

構成証明は、ビルドするソフトウェアに対して検証不可能な証明と整合性の保証を作成するための優れた方法です。

ただし、成果物の構成証明自体には、SLSA v1.0 ビルド レベル 2 を満たす成果物のビルドに使用されたビルド手順のようなリンクが用意されていることに注意してください。 情報に基づくリスクの決定を行うには、これらのリンクに従って、それらのビルド手順を評価する必要があります。

ビルドに既知で検証済みのビルド手順を使用することで、さらに踏み込んだセキュリティ対策を行えます。 これを行う優れた方法として、組織全体の多くのリポジトリが共有する再利用可能なワークフローでビルドを実行します。 再利用可能なワークフローは、SLSA v1.0 ビルド レベル 3 を満たすために、ビルド プロセスと呼び出しワークフローを分離できます。

このガイドを開始する前に、以下について理解しておく必要があります。

手順 1: ビルドの構成

まず、成果物の構成証明と再利用可能なワークフローの両方を使用してビルドする必要があります。

再利用可能なワークフローを使用するビルド

再利用可能なワークフローを使用してソフトウェアをビルドしていない場合は、ビルド手順を実行し、再利用可能なワークフローに移動する必要があります。 再利用可能なワークフローを記述して呼び出す方法の詳細については、「ワークフローの再利用」を参照してください。

構成証明が生成されるビルド

ソフトウェアのビルドに使用する再利用可能なワークフローでは、ビルドの実績を確立するために成果物の構成証明も生成する必要があります。 詳しくは、「成果物の構成証明を使用してビルドの実績を確立します」を参照してください。

再利用可能なワークフローを使用して成果物の構成証明を生成する場合、呼び出し元のワークフローと再利用可能なワークフローの両方に次のアクセス許可が必要です。

YAML
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.ymlREUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml を使用する場合、次のようにすることができます。

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

または、正確なワークフローを指定する場合は、次のようにします。

Bash
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 で必要な分離を実現できます。 成果物が既知の検証済みのビルド手順でビルドされていることを確認するには、特定のワークフローでビルドされたことを確認します。成果物が再利用可能かどうかは関係ありません。