セキュリティのためのイメージの署名
コンテナ・レジストリに格納されているイメージの署名方法を確認します。
コンプライアンスおよびセキュリティ上の理由から、システム管理者は多くの場合、次の条件を満たしている場合にのみ本番システムにソフトウェアをデプロイします:
- ソフトウェアは信頼できるソースから取得されます
- ソフトウェアが公開されてから変更されていないため、整合性が損なわれています
これらの要件を満たすために、Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)に格納されているイメージに署名できます。署名付きイメージは、イメージのソースとその整合性の両方を検証する方法を提供します。
コンテナ・レジストリを使用すると、ユーザーまたはシステムは、イメージをレジストリにプッシュして、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーを使用して署名し、イメージ署名を作成できます。イメージ署名は、署名されたイメージを、イメージの署名に使用される特定のマスター暗号化キーに関連付けます。イメージには複数の署名があり、それぞれが異なるマスター暗号化キーを使用して作成されます。
コンテナ・レジストリから署名付きイメージを取得するユーザーまたはシステムは、イメージのソースが信頼されていることと、イメージの整合性が侵害されていないことの両方を確信できます。コンプライアンスとセキュリティをさらに強化するために、クライアントは署名付きイメージのみをレジストリからプルするように構成できます。
概要レベルでは、コンテナ・レジストリに署名付きイメージを格納するために次のステップに従います:
- 独自のマシンまたはCI/CDシステムでイメージを構築します。
- イメージをタグ付けしてコンテナ・レジストリにプッシュします。
- Oracle Cloud Infrastructure Vaultでマスター暗号化キーへのアクセス権がない場合は、既存のキーへのアクセス権を取得するか、新しいキーを作成します。
- コンテナ・レジストリのCLIを使用してイメージに署名し、Vaultサービスでイメージをマスター暗号化キーおよびキー・バージョンに関連付けるイメージ署名を作成します。
イメージの署名とイメージ署名の作成
イメージを構築してコンテナ・レジストリにプッシュしたら、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーを使用してイメージに署名し、イメージ署名を作成できます。イメージ・シグネチャはイメージのOCIDに関連付けられ、イメージの特定のプッシュに固有になります。
イメージに署名してイメージ署名を作成するには:
- 自分のマシンまたはCI/CDシステムにイメージをビルドします(たとえば、
docker build
コマンドを使用します)。 - イメージをコンテナ・レジストリにプッシュします。Docker CLIを使用したイメージのプッシュの手順に従って、次を実行します:
docker login
コマンドを使用して、コンテナ・レジストリにログインします。docker tag
コマンドを使用して、プッシュするイメージにタグを付けます。例:docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
docker push
コマンドを使用して、イメージをコンテナ・レジストリにプッシュします。例:docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
- コンソール(イメージの詳細の取得を参照)を使用するか、CLI(
oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>
コマンドを使用)を使用して、イメージのOCIDを取得します。 - Oracle Cloud Infrastructure VaultでRSA非対称キーにアクセスできない場合は、既存のRSA非対称キーへのアクセス権を取得するか、RSA非対称キーとして新しいマスター暗号化キーを作成します(マスター暗号化キーの作成を参照)。
AES対称キーを使用したイメージの署名はサポートされていません。様々なキー・タイプの詳細は、Vaultの概要を参照してください。
- マスター暗号化キーのOCIDと、Oracle Cloud Infrastructure Vaultに格納されているキー・バージョンのOCIDの両方をノートにとります。マスター暗号化キーのリストを参照してください。
- Sign the image you pushed to Container Registry using the master key and key version in the Vault service, creating an image signature, by entering:
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"}
指定したイメージが署名されました。コンソールでリポジトリ内のイメージのリストを表示すると、イメージ名の横に「(署名済)」というテキストが表示されます。
署名付きイメージの表示
コンソールを使用して、リポジトリ内の署名付きイメージを表示できます。
署名付きイメージを表示するには:
- ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「コンテナ・レジストリ」をクリックします。
- リポジトリを含むリージョンを選択します。
-
リポジトリを含むコンパートメントを選択します。
「リポジトリおよびイメージ」フィールドには、アクセス権がある選択したリージョンおよびコンパートメント内のリポジトリがリストされます。
- 署名付きイメージを含むリポジトリの名前の横にあるプラス(+)ボタンをクリックします。
リポジトリの名前の下に、各イメージのバージョン識別子で識別されるリポジトリ内のイメージがリストされます。
署名されたイメージの横に「(署名済)」というテキストが表示されます。
- (オプション)リストから署名付きイメージを選択し、「署名」タブを表示して、イメージの署名時に作成された署名を表示します。
イメージ署名の使用
イメージ署名は、イメージの署名に使用されたマスター・キー(Vaultサービスから取得)にイメージを関連付けます。イメージには複数の署名があり、それぞれが異なるマスター暗号化キーを使用して作成されます。
コンテナ・レジストリでイメージに署名し、イメージ署名を作成したら、次のことができます:
- 署名の詳細の表示
- Vaultサービスで署名を検証し、イメージの署名に使用されるマスター暗号化キーがまだ有効で、使用可能であることを確認します
- 署名へのフリーフォーム・タグおよび定義済タグの追加
- 署名を削除して、イメージが信頼済とみなされなくなったことを示します。
イメージの署名時に作成された署名を表示、検証、タグ付けまたは削除するには:
- ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「コンテナ・レジストリ」をクリックします。
- レジストリを含む地域を選択します。
-
イメージを含むコンパートメントを選択します。
「リポジトリおよびイメージ」フィールドには、アクセス権がある選択したリージョンおよびコンパートメント内のリポジトリがリストされます。
- 署名付きイメージを含むリポジトリの名前の横にあるプラス(+)ボタンをクリックします。
リポジトリの名前の下に、各イメージのバージョン識別子で識別されるリポジトリ内のイメージがリストされます。
署名されたイメージの横に「(署名済)」というテキストが表示されます。
- リストから署名付きイメージを選択し、「署名」タブを表示して、イメージの署名時に作成された署名の詳細を表示します。
- 説明:イメージが署名されたときに指定された署名の説明。
- 検証レスポンス: Vaultサービスでイメージ署名を検証する最後の試行の結果。
- タグ:イメージ・シグネチャに適用されるフリーフォームまたは定義済タグの数。
- 日付:イメージが署名され、イメージ署名が作成されたとき。
- (オプション)特定の署名のマスター・キー、キー・バージョンおよび署名アルゴリズムを表示するには、署名の横にあるから「キー詳細の表示」を選択します。
- (オプション)Vaultサービスを使用して特定の署名を検証するには、署名の横にある「アクション」メニュー(
)から「署名の検証」を選択します。
Vaultサービスは、イメージのプッシュ時にイメージのソースが有効な秘密キーにアクセスできること、およびイメージがプッシュされてから変更されていないことを確認します。両方の条件が満たされた場合、署名は「検証済」ステータスで表示されます。レジストリからイメージを取得するユーザーまたはシステムは、イメージのソースが信頼されていることと、イメージの整合性が侵害されていないことの両方を確信できます。
イメージの検証に失敗した場合は、マスター・キーへのアクセス権があり、削除されていないことを確認します。
- (オプション)タグがまだ適用されていない署名にフリーフォーム・タグまたは定義済タグを追加するには、署名の横にある「アクション」メニュー(
)から「タグの追加」を選択します。1つ以上のタグがすでに署名に適用されている場合は、署名の横にある「アクション」メニュー(
)から「タグの表示」を選択し、「タグの表示」ダイアログで「タグの追加」をクリックします。
詳細は、リポジトリ、イメージおよびイメージ署名へのフリーフォーム・タグおよび定義済タグの適用を参照してください。
- (オプション)特定の署名を削除するには、署名の横にある「アクション」メニュー(
)から「署名の削除」を選択します。署名は削除され、「署名」タブに表示されなくなります。イメージにその他のシグネチャがない場合は、リポジトリ内のイメージのリストでイメージ名の横に「(署名済)」というテキストが表示されなくなります。
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
APIの使用
CreateContainerImageSignature操作を実行して、イメージに署名し、イメージ署名を作成します。
GetContainerImageSignature操作を実行してイメージ・シグネチャをフェッチし、Verify操作を実行してシグネチャを確認します。