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

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

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

  • ソフトウェアは信頼できるソースから取得されます
  • ソフトウェアが公開されてから変更されていないため、整合性が損なわれています

これらの要件を満たすために、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の両方をノートにとります。Vaultキーの詳細の表示を参照してください。
  6. Vaultサービスでマスターキーとキーバージョンを使用してContainer Registryにプッシュしたイメージに署名し、次のように入力してイメージ署名を作成します。
    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"}

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

署名済イメージの表示

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

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

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「コンテナ・レジストリ」をクリックします。
  2. リポジトリを含むリージョンを選択します。
  3. リポジトリを含むコンパートメントを選択します。

    「リポジトリおよびイメージ」フィールドには、アクセス権がある選択したリージョンおよびコンパートメント内のリポジトリがリストされます。

  4. 署名付きイメージを含むリポジトリの名前の横にあるプラス(+)ボタンをクリックします。

    リポジトリの名前の下に、各イメージのバージョン識別子で識別されるリポジトリ内のイメージがリストされます。

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

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

イメージ署名の操作

イメージシグニチャは、イメージの署名に使用されたマスターキー(Vaultサービスから取得)にイメージを関連付けます。イメージには、それぞれ異なるマスター暗号化キーを使用して作成された複数の署名を含めることができます。

コンテナ・レジストリでイメージに署名し、イメージ・シグネチャを作成すると、次のことができます。

  • 署名詳細の表示
  • Vaultサービスで署名を確認し、イメージの署名に使用されたマスター暗号化キーがまだ有効で使用可能であることを確認します。
  • 署名へのフリーフォーム・タグおよび定義済タグの追加
  • 署名を削除して、イメージが信頼できるとみなされなくなったことを示します

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

  1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「コンテナ・レジストリ」をクリックします。
  2. レジストリを含むリージョンを選択します。
  3. イメージを含むコンパートメントを選択します。

    「リポジトリおよびイメージ」フィールドには、アクセス権がある選択したリージョンおよびコンパートメント内のリポジトリがリストされます。

  4. 署名付きイメージを含むリポジトリの名前の横にあるプラス(+)ボタンをクリックします。

    リポジトリの名前の下に、各イメージのバージョン識別子で識別されるリポジトリ内のイメージがリストされます。

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

  5. リストから署名済イメージを選択し、「署名」タブを表示して、イメージの署名時に作成された署名の詳細を表示します:
    • 説明:イメージの署名時に指定された署名の説明。
    • 検証レスポンス: Vaultサービスでイメージ署名を最後に検証しようとした結果。
    • タグ:イメージ署名に適用されるフリーフォーム・タグまたは定義済タグの数。
    • Date:イメージが署名され、イメージ署名が作成された日付。
  6. (Optional) To see the master key, key version, and signing algorithm for a particular signature, select View key details from the Actions menu (アクション・メニュー) beside the signature.
  7. (Optional) To verify a particular signature with the Vault service, select Verify signature from the Actions menu (アクション・メニュー) beside the signature.

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

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

  8. (オプション)タグがまだ適用されていない署名にフリーフォーム・タグまたは定義済タグを追加するには、署名の横にある「アクション」メニュー(アクション・メニュー)から「タグの追加」を選択します。If one or more tags have already been applied to the signature, select View tags from the Actions menu (アクション・メニュー) beside the signature and then click Add tags in the View tags dialog.

    詳細は、リポジトリ、イメージおよびイメージ署名へのフリーフォーム・タグおよび定義済タグの適用を参照してください。

  9. (オプション)特定の署名を削除するには、署名の横にある「アクション」メニュー(アクション・メニュー)から「署名の削除」を選択します。署名が削除され、「署名」タブに表示されなくなります。イメージに他の署名がない場合は、リポジトリ内のイメージのリスト内のイメージ名の横にテキスト「(署名済)」が表示されなくなります。

CLIの使用

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

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

ociifact 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"}

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

ociifact 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