レジストリからの署名付きイメージの使用の強制

Kubernetes Engine (OKE)を使用して作成したクラスタにアプリケーションをデプロイする際に、Oracle Cloud Infrastructure Registryからの署名付きイメージの使用を強制する方法をご紹介します。

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

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

これらの要件を満たすために、Oracle Cloud Infrastructure Registryに格納されているイメージに署名できます。署名付きイメージは、イメージのソースとその整合性の両方を検証する方法を提供します。Oracle Cloud Infrastructure Registryを使用すると、ユーザーまたはシステムは、イメージをレジストリにプッシュして署名し、イメージ署名を作成できます。イメージ署名は、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーにイメージを関連付けます。

Oracle Cloud Infrastructure Registryから署名付きイメージを取得するユーザーまたはシステムは、イメージのソースが信頼されていることと、イメージの整合性が損なわれていないことの両方を確信できます。詳細は、セキュリティのためのイメージの署名を参照してください。

セキュリティをさらに強化するために、Kubernetesエンジンで作成したクラスタを構成して、特定のマスター暗号化キーによって署名されたOracle Cloud Infrastructure Registryからのイメージのデプロイメントのみを許可できます。大まかには、次のステップに従います:

  • Oracle Cloud Infrastructure Vaultのマスター暗号化キーを使用するイメージ署名を使用して、Oracle Cloud Infrastructure Registryのイメージに署名します(セキュリティのためのイメージの署名を参照)。
  • イメージの署名に使用されている必要があるマスター暗号化キーを指定するクラスタのイメージ検証ポリシーを作成します。
  • クラスタがイメージ検証ポリシーを使用して、適切に署名されたイメージの使用を強制できるようにします。

次の点に注意してください:

  • Oracle Cloud Infrastructure Registryのイメージは、それぞれ異なるマスター暗号化キーに関連付けられた複数の署名を使用して署名できます。クラスタのイメージ検証ポリシーにマスター暗号化キーの少なくとも1つが含まれている場合、クラスタではOracle Cloud Infrastructure Registryからイメージをプルできます。
  • クラスタのイメージ検証ポリシーには、最大5つのマスター暗号化キーを指定できます。
  • クラスタでそのイメージ検証ポリシーを使用できるようにしても、イメージの署名に使用しておく必要があるマスター暗号化キーを指定しない場合:
    • 署名に使用したマスター暗号化キーに関係なく、Oracle Cloud Infrastructure Registryから任意の署名済イメージをプルできます
    • Oracle Cloud Infrastructure Registryから任意の未署名のイメージをプルできます
  • クラスタがイメージ検証ポリシーを使用できるようにしても、Kubernetes EngineがOracle Cloud Infrastructure Registryに接続できない場合、Oracle Cloud Infrastructure Registryからイメージをプルすることはできません。
  • Oracle Cloud Infrastructure Registryのイメージは、リポジトリ、名前およびタグで識別されます。さらに、イメージの各バージョンには、一意の英数字の消化が与えられます。クラスタでイメージ検証ポリシーを使用できるようにする場合は、ポッド仕様(および他のマニフェスト・ファイル)で、イメージ・タグではなくイメージ・ダイジェストを使用してイメージを参照する必要があります。たとえば、次を使用します:
    image: phx.ocir.io/ansh81vru1zp/project01/ngnix-lb@sha256:ee44b399d______49c775b

    単純ではなく、

    image: phx.ocir.io/ansh81vru1zp/project01/ngnix-lb:latest

    イメージ・タグではなくイメージ・ダイジェストを使用するには、既存のすべてのポッド仕様(およびイメージを参照する他のマニフェスト・ファイル)を変更する必要があることに注意してください。

  • クラスタでイメージ検証ポリシーを使用できるようにした後、特定のポッドがポリシーに違反するイメージをプルすることが緊急に必要になる場合があります。この場合、ポッド仕様にoracle.image-policy.k8s.io/break-glass: "true"注釈を追加できます。ポッド仕様に注釈を追加すると、ポッドは、クラスタのイメージ検証ポリシーに関係なく、Oracle Cloud Infrastructure Registryから署名済および未署名のイメージをプルできます。
  • クラスタは、次の場合に、イメージ検証ポリシーに含まれるマスター暗号化キーによって署名されたイメージの使用を強制します:
    • イメージは、(他のレジストリからではなく)Oracle Cloud Infrastructure Registryからプルされます
    • イメージは、Oracle Cloud Infrastructure Vaultから取得したマスター暗号化キーを使用して署名されます

署名付きイメージの使用を強制するために必要なIAMポリシー

クラスタでイメージ検証ポリシーにマスター暗号化キーを含めるには、Oracle Cloud Infrastructure Vaultのキーを使用する権限をクラスタに付与する必要があります。たとえば、テナンシ内の特定のクラスタにこの権限を付与するには:

Allow any-user to use keys in tenancy where request.user.id=<CLUSTER_OCID>

クラスタがOracle Cloud Infrastructure Registryから署名付きイメージをプルできるようにするには、Oracle Cloud Infrastructure Registryのリポジトリにアクセスする権限をクラスタに付与する必要があります。たとえば、テナンシ内の特定のクラスタにこの権限を付与するには:

Allow any-user to read repos in tenancy where request.user.id=<CLUSTER_OCID>

より詳細なポリシーの作成方法の例は、Etcdに格納されたKubernetesシークレットの暗号化を参照してください。

署名付きイメージの使用の強制

クラスタで、アプリケーションが特定のマスター暗号化キーを使用して署名されたイメージのみをOracle Cloud Infrastructure Registryからプルできるようにするには:

  1. Oracle Cloud Infrastructure VaultでRSA非対称キーにアクセスできない場合は、RSA非対称キーとして1つ以上のマスター暗号化キーを作成します。「マスター暗号化キーの作成」を参照してください。
  2. クラスタのイメージ検証ポリシーを定義し、イメージの署名に使用されている必要があるマスター暗号化キーを少なくとも1つ指定します:
    1. ナビゲーション・メニューを開き、「開発者サービス」をクリックします。「コンテナとアーティファクト」で、「Kubernetesクラスタ(OKE)」をクリックします。
    2. 作業する権限があるコンパートメントを選択します。
    3. 「クラスタ・リスト」ページで、イメージ検証ポリシーを定義するクラスタを選択します。
    4. 「リソース」で、「イメージの検証」をクリックします。
    5. 「イメージ検証の編集」をクリックします。
    6. 定義したイメージ検証ポリシーをクラスタで使用できるようにするには、「このクラスタでのイメージ検証ポリシーの有効化」を選択します。
    7. イメージの署名に使用されている必要があるOracle Cloud Infrastructure Vaultのマスター暗号化キーを選択します。

      異なるキーで署名されたイメージのプルを許可する場合は、複数のマスター暗号化キーを指定できます。

      複数のマスター暗号化キーを指定する場合、イメージはこれらのキーのいずれかによってのみ署名される必要があることに注意してください。イメージは、指定するすべてのマスター暗号化キーで署名されている必要はありません。クラスタのイメージ検証ポリシーには、最大5つのマスター暗号化キーを指定できます。

    8. 「イメージ検証設定の保存」をクリックします。

      これ以降、クラスタでは、アプリケーションは、イメージ検証ポリシーに含まれているマスター暗号化キーを使用して署名されたイメージのみをOracle Cloud Infrastructure Registryからプルできます。許可されていないイメージをプルしようとすると、アプリケーション・ログに記録されます(管理対象ノードおよび自己管理ノードでのアプリケーション・ログの表示を参照)。

  3. 定義したイメージ検証ポリシーの1つ以上のマスター暗号化キーにイメージを関連付けるイメージ署名を使用して、クラスタで許可するイメージに署名します。セキュリティのためのイメージの署名を参照してください。
  4. (オプション)Oracle Cloud Infrastructure Registryから署名付きイメージをプルするアプリケーションをデプロイするには、デプロイメント中のレジストリからのイメージのプルのステップに従い、アプリケーションのマニフェスト・ファイルでイメージを指定します。