セキュリティのためのイメージの署名

コンテナ・レジストリに格納されているイメージに署名する方法を確認します。

コンプライアンスおよびセキュリティ上の理由から、システム管理者は多くの場合、次の条件を満たしている場合にのみ本番システムにソフトウェアをデプロイします:

  • ソフトウェアは信頼できるソースから取得されます

  • ソフトウェアは公開されてから変更されておらず、整合性が損なわれています。

これらの要件を満たすために、Oracle Cloud Infrastructure Registry (Container Registryとも呼ばれる)に格納されているイメージに署名できます。署名付きイメージは、イメージのソースとその整合性の両方を検証する方法を提供します。

コンテナ・レジストリを使用すると、ユーザーまたはシステムは、イメージをレジストリにプッシュして、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーを使用して署名し、イメージ署名を作成できます。イメージ署名は、署名されたイメージを、イメージの署名に使用される特定のマスター暗号化キーに関連付けます。イメージには複数の署名があり、それぞれが異なるマスター暗号化キーを使用して作成されます。

コンテナ・レジストリから署名付きイメージを取得するユーザーまたはシステムは、イメージのソースが信頼されていることと、イメージの整合性が侵害されていないことの両方を確信できます。コンプライアンスとセキュリティをさらに強化するために、クライアントは署名付きイメージのみをレジストリからプルするように構成できます。

概要レベルでは、署名付きイメージをコンテナ・レジストリに格納するために次のステップに従います。

  • 独自のマシンまたはCI/CDシステムでイメージを構築します。

  • イメージをタグ付けしてコンテナ・レジストリにプッシュします。

  • Oracle Cloud Infrastructure Vaultでマスター暗号化キーへのアクセス権がない場合は、既存のキーへのアクセス権を取得するか、新しいキーを作成します。

  • Container Registry CLIを使用してイメージに署名し、Vaultサービスでイメージをマスター暗号化キーおよびキー・バージョンに関連付けるイメージ署名を作成します。

イメージの署名とイメージ署名の作成

イメージを構築してコンテナ・レジストリにプッシュしたら、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーを使用してイメージに署名し、イメージ署名を作成できます。イメージ・シグネチャはイメージのOCIDに関連付けられ、イメージの特定のプッシュに固有になります。

イメージに署名してイメージ署名を作成するには:

  1. 自分のマシンまたはCI/CDシステムにイメージをビルドします(たとえば、docker buildコマンドを使用します)。

  2. イメージをコンテナ・レジストリにプッシュします。Docker CLIを使用したイメージのプッシュの手順に従って、次を実行します:

    1. docker loginコマンドを使用して、コンテナ・レジストリにログインします。

    2. docker tagコマンドを使用して、プッシュするイメージにタグを付けます。例:

      docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
    3. docker pushコマンドを使用して、イメージをコンテナ・レジストリにプッシュします。例:

      docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
  3. コンソール(イメージの詳細の取得を参照)を使用するか、CLI(oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>コマンドを使用)を使用して、イメージのOCIDを取得します。

  4. Oracle Cloud Infrastructure VaultでRSA非対称キーにアクセスできない場合は、既存のRSA非対称キーへのアクセス権を取得するか、RSA非対称キーとして新しいマスター暗号化キーを作成します(マスター暗号化キーの作成を参照)。

    AES対称キーを使用したイメージの署名はサポートされていません。様々なキー・タイプの詳細は、Vaultの概要を参照してください。

  5. マスター暗号化キーのOCIDと、Oracle Cloud Infrastructure Vaultに格納されているキー・バージョンのOCIDの両方をノートにとります。マスター暗号化キーのリストを参照してください。

  6. Vaultサービスでマスター・キーとキー・バージョンを使用してコンテナ・レジストリにプッシュしたイメージに署名し、次のように入力してイメージ署名を作成します:

    oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json>
    ここでは:
    • --compartment-id <compartment-ocid>は、イメージのリポジトリが属するコンパートメントのOCIDです。たとえば、--compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwaです。

    • --kms-key-id <key-ocid>は、イメージの署名に使用するマスター暗号化キーのOCIDです。たとえば、--kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qljです。

    • --kms-key-version-id <key-version-ocid>は、イメージの署名に使用するキー・バージョンのOCIDです。たとえば、--kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbbです。

    • --signing-algorithm <signing-algorithm>は、イメージの署名に使用する次のアルゴリズムのいずれかです。

      • SHA_224_RSA_PKCS_PSS

      • SHA_256_RSA_PKCS_PSS

      • SHA_384_RSA_PKCS_PSS

      • SHA_512_RSA_PKCS_PSS

      選択するアルゴリズムは、マスター暗号化キーのタイプによって異なります。

      たとえば、--signing-algorithm SHA_224_RSA_PKCS_PSSです。

    • --image-id <image-ocid>は、署名するイメージのOCIDです。たとえば、--image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yksです。

    • --description <signature-description>は、イメージを説明する任意のテキストです。説明は署名の一部として含まれ、コンソールに表示されます。たとえば、--description "Image for UAT testing"です。

    • --metadata <image-metadata-json>は、有効なJSON形式(空白やエスケープ文字を含まない英数字のみ)で、イメージに関する任意の情報です。たとえば、--metadata {"buildnumber":"8447"}です。

    例:

    oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}

    指定したイメージが署名されました。コンソールでリポジトリ内のイメージのリストを表示すると、イメージ名の横に「(署名済)」というテキストが表示されます。

署名付きイメージの表示

コンソールを使用して、リポジトリ内の署名済イメージを表示できます。

署名付きイメージを表示するには:

  1. 「コンテナ・レジストリ」リスト・ページで、作業するリポジトリを「リポジトリおよびイメージ」リストから選択します。リスト・ページまたはリポジトリの検索に関するヘルプが必要な場合は、リポジトリのリストを参照してください。

    リポジトリの詳細セクションが開きます。

  2. 「リポジトリおよびイメージ」リストでリポジトリをもう一度選択します。

    リポジトリ内のイメージ(バージョン識別子を含む)は、「リポジトリおよびイメージ」リストのリポジトリの下にリストされます。

    署名されたイメージの横に「(署名済)」というテキストが表示されます。

  3. (オプション)リストから署名付きイメージを選択し、「署名」タブを選択して、イメージの署名時に作成された署名を表示します。

イメージ署名の使用

イメージ署名は、イメージの署名に使用されたマスター・キー(Vaultサービスから取得)にイメージを関連付けます。イメージには複数の署名があり、それぞれ異なるマスター暗号化キーを使用して作成されます。

コンテナ・レジストリでイメージに署名し、イメージ署名を作成したら、次のことができます:

  • 署名の詳細を表示します。

  • Vaultサービスで署名を確認し、イメージの署名に使用されたマスター暗号化キーがまだ有効で利用可能であることを確認します。

  • フリーフォーム・タグおよび定義済タグを署名に追加します。

  • 署名を削除して、イメージが信頼済とみなされなくなったことを示します。

イメージの署名時に作成された署名を表示、検証、タグ付けまたは削除するには:

  1. 「コンテナ・レジストリ」リスト・ページで、作業するリポジトリを「リポジトリおよびイメージ」リストから選択します。リスト・ページまたはリポジトリの検索に関するヘルプが必要な場合は、リポジトリのリストを参照してください。

    リポジトリの詳細セクションが開きます。

  2. 「リポジトリおよびイメージ」リストでリポジトリをもう一度選択します。

    リポジトリ内のイメージ(バージョン識別子を含む)は、「リポジトリおよびイメージ」リストのリポジトリの下にリストされます。

    署名されたイメージの横に「(署名済)」というテキストが表示されます。

  3. リストから署名付きイメージを選択し、「署名」タブを選択して、イメージの署名時に作成された署名の詳細を表示します。

    • 説明: イメージが署名されたときに指定された署名の説明。

    • 検証レスポンス: Vaultサービスでイメージ署名を検証する最後の試行の結果。

    • タグ: イメージ・シグネチャに適用されるフリーフォームまたは定義済タグの数。

    • 日付: イメージが署名され、イメージ署名が作成されたとき。

  4. (オプション)特定の署名のマスター・キー、キー・バージョンおよび署名アルゴリズムを表示するには、署名の「アクション」メニューから「キー詳細の表示」を選択します。

  5. (オプション) Vaultサービスで特定の署名を確認するには、署名の「アクション」メニューから「署名の検証」を選択します。

    Vaultサービスは、イメージのプッシュ時にイメージのソースが有効な秘密キーにアクセスできること、およびイメージがプッシュされてから変更されていないことを確認します。両方の条件が満たされた場合、署名は「検証済」ステータスで表示されます。レジストリからイメージを取得するユーザーまたはシステムは、イメージのソースが信頼されていることと、イメージの整合性が侵害されていないことの両方を確信できます。

    イメージの検証に失敗した場合は、マスター・キーへのアクセス権があり、削除されていないことを確認します。

  6. (オプション)タグがまだ適用されていない署名にフリーフォーム・タグまたは定義済タグを追加するには、署名の「アクション」メニューから「タグの追加」を選択します。

    1つ以上のタグが署名にすでに適用されている場合は、署名の「アクション」メニューから「タグの表示」を選択し、「タグの表示」ダイアログで「タグの追加」を選択します。詳細は、リポジトリ、イメージおよびイメージ署名へのフリーフォーム・タグおよび定義済タグの適用を参照してください。

  7. (オプション)特定の署名を削除するには、その署名の「アクション」メニューから「署名の削除」を選択します。

    署名は削除され、「署名」タブに表示されなくなります。イメージにその他のシグネチャがない場合は、リポジトリ内のイメージのリストでイメージ名の横に「(署名済)」というテキストが表示されなくなります。

CLIの使用

CLIコマンドのフラグおよび変数オプションの完全なリストは、コマンドライン・リファレンスを参照してください。

イメージに署名してイメージ署名を作成するには

oci arts container image-signature sign-uploadコマンドおよび必須パラメータを使用して、イメージに署名し、イメージ署名を作成します:

oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json> [OPTIONS]
例:
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}

イメージ署名を使用して署名付きイメージを検証するには

oci arts container image-signature get-verifyコマンドおよび必須パラメータを使用して、イメージ署名を使用して署名付きイメージを検証します:

oci artifacts container image-signature get-verify --compartment-id <compartment-ocid> --repo-name <repository-name> --image-digest <image-digest> --trusted-keys <key-ocid> --compartment-id-in-subtree true|false [OPTIONS]

例:

oci artifacts container image-signature get-verify --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --repo-name project01/acme-web-app --image-digest sha256:da1f_____31fd --trusted-keys ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --compartment-id-in-subtree false