Oracle Cloud Infrastructureドキュメント

EtcdにあるRestでのKubernetesのシークレットの暗号化

Kubernetesクラスタ内のマスター・ノードは、機密構成データ(認証トークン、パスワード、SSHキーなど)をKubernetesシークレット・オブジェクトとして格納します。 Etcdは、Kubernetesがクラスタのコーディネーションと状態管理に使用する、オープン・ソースの分散キーと値ストアです。 「Kubernetesのコンテナ・エンジン」で作成されるKubernetesクラスタでは、Oracle Cloud InfrastructureBlock Volumeサービスのブロック・ストレージ・ボリュームとの間でデータの書込みおよび読取りを行います。 ブロック・ストレージ・ボリューム内のデータは暗号化されていますが、その他の場所でのKubernetesのシークレットはデフォルトでは暗号化されません。

追加のセキュリティを確保するために、新しいクラスタを作成する場合、残りのKubernetesシークレットをOracle Cloud Infrastructure 「キー管理」サービスを使用して暗号化するように指定できます(「Key Managementの概要」を参照)。 Kubernetesシークレットがエッチングされたキー/値ストアで暗号化されるクラスタを作成する前に、次のことを行う必要があります:

  • 「キー管理」内の適切なマスター暗号化キーの名前およびOCIDを認識
  • 新規クラスタを作成するコンパートメント内のすべてのクラスタを含む動的グループを作成
  • マスター暗号化キーを使用する動的グループを認可するポリシーの作成

クラスタを作成し、エッチングされたキーストアの残りの部分でKubernetesのシークレットを暗号化するように指定したら、必要に応じて、そのクラスタのみを含めるように動的グループを変更することによって、マスター暗号化キーの使用を制限できます。

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

  • 新しいカスタム・クラスタを作成する場合には、クラスタのフェッチされたキーと値のストアでKubernetesのシークレットを暗号化するオプションのみを選択できます。 既存のカスタム・クラスタのフェッチされたキーストア、またはクイック・クラスタのフェッチされたキーストアでは、Kubernetesのシークレットを暗号化できません。
  • クラスタのマスター・ノードで実行するKubernetesのバージョンとしてKubernetesバージョンの1.13.xを指定した場合、またはあとでKubernetesのシークレットをクラスタのフェッチされたキーストアで暗号化するオプションのみ選択できます。
  • 新しいクラスタのマスター暗号化キーを指定してクラスタを作成した後は、「キー管理」サービスのマスター暗号化キーを削除しないでください。 「キー管理」でキーを削除するようにスケジュールすると、そのクラスタ用に格納されているKubernetesのシークレットにアクセスできなくなります。 キーの削除がすでにスケジュールされている場合、削除保留中状態の可能性があります。 その場合は、Kubernetesシークレットへのアクセスをリストアするために、スケジュールされているキーの削除を取り消します(「キーの削除を取り消すには」を参照)。 スケジュール済キーの削除操作が完了し、マスター暗号化キーの削除が許可されると、クラスタ用に格納されたKubernetesシークレットにアクセスできなくなります。 その結果、クラスタのアップグレードに失敗します。 この場合、選択肢はありませんが、クラスタを削除して再作成します。

コンソールの使用

Kubernetesのシークレットがクラスタ内のフェッチされたキーと値のストアに暗号化される新しいカスタム・クラスタを作成するには:

  1. コンソールにログインします。
  2. Kubernetesシークレットの暗号化に使用するマスター暗号化キーのOCIDがわかっている場合は、次のステップに進みます。 そうでない場合は、次のようになります。
    • 適切なマスター暗号化キーが「キー管理」に存在するが、そのOCIDが不明な場合は、「キーの詳細を表示するには」の指示に従い、マスター暗号化キーOCIDをノートします。
    • 適切なマスター暗号化キーが「キー管理」に存在しない場合は、「新しいキーを作成するには」の指示に従って作成します。 新しいマスター暗号化キーを作成したら、OCIDをノートします。
  3. 新規クラスタを作成する予定のコンパートメント内のすべてのクラスタを含む新規動的グループを作成します:

    1. 「ナビゲーション・メニュー」を開きます。 ガバナンスと管理の下で、アイデンティティに移動して「動的グループ」をクリックします。
    2. 「動的グループを作成するには」の指示に従って、動的グループに名前を付けます(たとえば、acme-oke-kms-dyn-grp)。
    3. コンパートメント内のすべてのクラスタを含むルールを次の形式で入力します:

      ALL {resource.type = 'cluster', resource.compartment.id = '<compartment-ocid>'}

      <compartment-ocid>は、新しいクラスタを作成しようとしているコンパートメントのOCIDです。

      例えば:

      ALL {resource.type = 'cluster', resource.compartment.id = 'ocid1.compartment.oc1..aaaaaaaa23______smwa'}
    4. 「動的グループの作成」をクリックします。

    コンパートメント内のすべてのクラスタを含む動的グループを作成しました。「キー管理」で、動的グループにマスター暗号化キーへのアクセス権を付与するポリシーを作成できるようになりました。

  4. マスター暗号化キーの使用を有効にする新しいポリシーを作成します:

    1. 「ナビゲーション・メニュー」を開きます。 ガバナンスと管理の下で、アイデンティティに行き、「ポリシー」をクリックします。

    2. 「ポリシーを作成するには」の指示に従って、ポリシー名を指定します(たとえば、acme-oke-kms-dyn-grp-policy)。
    3. 次の形式で、マスター暗号化キーへの動的グループ・アクセス権を付与するポリシー文を入力します:

      Allow dynamic-group <dynamic-group-name> to use keys in compartment <compartment-name> where target.key.id = '<key-OCID>'

      説明:

      • <dynamic-group-name>は、以前に作成した動的グループの名前です。
      • <compartment-name>は、マスター暗号化キーを含むコンパートメントの名前です。
      • <key-OCID>は、「キー管理」のマスター暗号化キーのOCIDです。

      例えば:

      Allow dynamic-group <acme-oke-kms-dyn-grp> to use keys in compartment acme-kms-key-compartment where target.key.id = 'ocid1.key.oc1.iad.annrl______trfg'
    4. 新しいポリシーを作成するには、「作成」をクリックします。
  5. 手順に従い、「コンソールを使用して、明示的に定義された設定でカスタム・クラスタを作成する」で新しいカスタム・クラスタを作成し、「顧客管理キーを使用した暗号化」オプションを選択して、次を選択します:

    • <compartment-name>でVaultを選択します: 指定されたコンパートメント内のボールトのリストから、マスター暗号化キーが含まれるボールト。 デフォルトでは、<compartment-name>はクラスタを作成するコンパートメントですが、「コンパートメントの変更」をクリックすると別のコンパートメントを選択できます。
    • <compartment-name>のキーの選択: 指定されたコンパートメント内のキーのリストからの、マスター暗号化キーの名前です。 デフォルトでは、<compartment-name>はクラスタを作成するコンパートメントですが、「コンパートメントの変更」をクリックすると別のコンパートメントを選択できます。 クラスタの作成後は、マスター暗号化キーを変更できないことに注意してください。
  6. (オプション)クラスタを作成した後、セキュリティを強化するには、次の手順を実行します:

    1. 作成した新しいクラスタのOCIDを書き留めます。
    2. 以前に作成した動的グループ・ルールを変更し、コンパートメント内のすべてのクラスタではなく、新規クラスタのOCIDを明示的に指定することで、マスター暗号化キーの使用を制限します。 例えば:

      resource.id = 'ocid1.cluster.oc1.iad.aaaaaaaaaf______yg5q'

APIの使用

APIおよび署名リクエストの使用については、REST APIおよび「セキュリティ資格証明」を参照してください。 SDKの詳細は、「ソフトウェア開発キットとコマンドライン・インタフェース」を参照してください。

CreateCluster操作を使用してクラスタを作成します。