Kubernetes Service クラスターでの Secrets Manager のセットアップ

IBM Cloud Secrets Manager を IBM Cloud Kubernetes Service クラスターと統合すると、Ingressのサブドメイン証明書やその他のシークレットを一元的に管理できるようになります。

Secrets Manager について

Secrets Managerを使用すると、単一のサービスでシークレットを管理し、それらにアクセスできるユーザーを制御できます。 Secrets Manager インスタンスは、クラスターに自動的にプロビジョンされません。 ただし、1つの Secrets Manager インスタンスを複数のクラスターで共有することができ、また、1つのクラスターに複数のインスタンスを配置することも可能です。

Secrets Managerではどのような機能を利用できますか?

Secrets Managerを使用して、以下を行うことができます。

  • Ingressの TLS 証明書を含む、 Kubernetes のマネージドシークレットを作成します。
  • 所有する任意の Secrets Manager インスタンスの CRN を使用して、任意のタイプの Kubernetes シークレットを作成します。
  • クラスター内のシークレットを定期的に自動更新します。
  • IBM Cloud コンソールから証明書の有効期限を追跡します。
  • 承認済みユーザーのシークレット・グループを作成して、シークレットにアクセスできるユーザーを制御します。

シークレットを自動的に更新するには、クラスターに少なくとも1つの Secrets Manager インスタンスを登録する必要があることに注意してください。 詳細については、「 Secrets Manager インスタンスをクラスターに登録する 」を参照してください。

Secrets Manager の FAQ

Secrets Manager を使用する際は、以下の点に留意してください。

Secrets Managerでは、どのようなタイプのシークレットがサポートされますか?
Secrets Manager は、IAM 資格情報、キー値シークレット、ユーザー資格情報、任意のシークレット、および Kubernetes シークレットをサポートします。 Kubernetes のシークレットについては、 Secrets Manager は、 TLS および非 TLS (Opaque)の両方のシークレットタイプをサポートしています。 TLS のシークレットでは、1つの証明書CRNを指定できます。 TLS 以外のシークレットについては、複数のフィールドを指定して、証明書以外のシークレットを取得することができます。 シークレットを作成する際にシークレットの種類を指定しない場合、デフォルトで「 TLS 」が適用されます。 サポートされるシークレットについて詳しくは、さまざまなタイプのシークレットの処理を参照してください。
登録済みの Secrets Manager インスタンスに保管されているシークレットは自動的に更新されますか?
はい。 Secrets Manager インスタンスがクラスターに登録されている場合、クラスター上のシークレットは、 Secrets Manager からの値で 1 日 1 回自動的に更新されます。 これらの更新は、対応する CRN のシークレットの値を使用して行われます。
Secrets Manager インスタンスを作成して登録しない場合、シークレットは自動的に更新されますか?
Secrets Manager インスタンスがクラスターに登録されていない場合、デフォルトの Ingress シークレットは引き続き 90 日ごとに自動的に更新され、クラスターに適用されます。 ただし、デフォルトの Ingress シークレットを 参照 するために作成したシークレットは、自動的に更新されません。
シナリオ例: default 名前空間にデフォルトの Ingress 証明書があるとします。 ibmcloud ks ingress secret create コマンドを実行し、デフォルトの Ingress 証明書の CRN を参照して、 istio-system 名前空間内の証明書をミラーリングします。 Secrets Manager インスタンスがない場合、 default 名前空間内のデフォルトの Ingress 証明書が自動的に更新されます。 ただし、 kubectl コマンドまたは別のローテーション方式を使用して、 istio-system 名前空間内の証明書を定期的に更新する必要があります。
デフォルトの Ingress 証明書を参照するシークレットを作成しましたが、 Secrets Manager インスタンスを作成して登録していません。 シークレットを管理するにはどうすればよいですか?
Secrets Manager インスタンスを登録しない場合、 IBM Cloud Kubernetes Service はデフォルトの Ingress シークレットのみを自動的に更新します。 kubectl コマンドまたは別のローテーション方式を使用して他のシークレットを管理する必要があります。 デフォルトの Ingress 証明書を参照するシークレットがある場合は、 ibmcloud ks ingress secret rm を使用して削除する必要があります。
ibmcloud ks ingress instance CLI コマンドと ibmcloud ks ingress secret CLI コマンドの違いは何ですか?
IBM Cloud Kubernetes Service内の Secrets Manager インスタンスを直接処理する CLI コマンドには、 ibmcloud ks ingress secret コマンドと ibmcloud ks ingress instance コマンドの 2 つのセットがあります。 ibmcloud ks ingress instance コマンドは、 Secrets Manager インスタンスを管理するために使用されます。 ibmcloud ks ingress secret コマンドは、 Secrets Manager インスタンスに保管されている Ingress シークレット、またはクラスターに直接書き込まれているシークレットを管理するために使用されます。

Secrets Manager インスタンスのセットアップ

以下の手順に従って、クラスターに Secrets Manager を設定してください。

サービス間通信を有効にする

Secrets Manager を IBM Cloud Kubernetes Service クラスターと統合するには、サービス間通信の認証が必要です。 許可をセットアップする手順に従います。 詳細については、 「Secrets Manager の連携機能 」をご覧ください。

  1. IBM Cloud コンソールで、「管理」 > **「アクセス (IAM)」**をクリックします。
  2. 「許可」 をクリックします。
  3. 「作成」 をクリックします。
  4. ソース」サービス一覧で、 Kubernetes Service を選択します。
  5. アクセスの有効範囲を 「すべてのリソース」 に設定するオプションを選択します。
  6. ターゲット」サービス一覧で、 Secrets Manager を選択します。
  7. アクセスの有効範囲を 「すべてのリソース」 に設定するオプションを選択します。
  8. サービスへのアクセス 」セクションで、「 マネージャー 」オプションにチェックを入れます。
  9. 「許可」 をクリックします。

Secrets Manager のインスタンスを作成する

CLI または UI で Secrets Manager インスタンスを作成するには、『 Secrets Manager 』のドキュメントを参照してください。 Secrets Manager インスタンスのプロビジョニングが完了するまで、数分かかる場合があります。

Secrets Manager インスタンスを作成しても、そのインスタンスはクラスター内に直接プロビジョニングされるわけではありません。 次の手順で、新しい Secrets Manager インスタンスをクラスターに登録する必要があります。

Secrets Manager インスタンスをクラスターに登録します。

以下の手順に従って、 Secrets Manager インスタンスをクラスターに登録してください。

  1. Secrets Manager インスタンスの CRN を取得します。 出力では、CRN は ID 行にあります。

    ibmcloud resource service-instance <instance_name>
    

    出力例

    Name:                  my-secrets-manager-instance
    ID:                    crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1-111a-1111-1a1a1a1111a1:
    GUID:                  111a1111-11a1-111a-1111-1a1a1a1111a1
    Location:              us-south   
    Service Name:          secrets-manager   
    Service Plan Name:     standard   
    Resource Group Name:   default   
    State:                 active   
    Type:                  service_instance   
    Sub Type:                 
    Created at:            2022-06-08T12:46:45Z   
    Created by:            user@ibm.com   
    Updated at:            2022-06-08T12:54:45Z
    
  2. インスタンスをクラスターに登録します。 前のステップで見つかったインスタンス CRN を指定します。

    インスタンスをクラスターに登録し、それをデフォルト・インスタンスとして設定する場合は、--is-default オプションを含めます。 それ以外の場合は、ibmcloud ks ingress instance default set コマンドを使用してデフォルト・インスタンスを設定できます。

    ibmcloud ks ingress instance register --cluster CLUSTER_NAME_OR_ID --crn INSTANCE_CRN [--is-default]
    
  3. Secrets Manager インスタンスがクラスターに登録されていることを確認します。

    ibmcloud ks ingress instance ls --cluster CLUSTER_NAME_OR_ID
    

    出力例

    Name                                Type              Is Default   Status    Secret Group   CRN   
    my-secrets-manager-instance         secrets-manager   false        created   default        crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1-111a-1111-1a1a1a1111a1::   
    

ibmcloud ks cluster create classic または ibmcloud ks cluster create vpc-gen2 コマンドを使用して [クラスタを作成する](/docs/containers?topic=containers-clusters) を実行する際、 Secrets Manager インスタンスとシークレットグループを指定することができます。 クラスターにインスタンスを登録するには --sm-instance オプションを使用し、クラスター上のシークレットにアクセスできるシークレット・グループを指定するには --sm-group オプションを使用します。 「 クラスタ作成時の Secrets Manager インスタンスの登録 」を参照してください。

デフォルトの Secrets Manager インスタンスを設定して、シークレットを再生成します。

デフォルトの Secrets Manager インスタンスを設定すると、すべての新規 Ingress サブドメイン証明書がそのインスタンスに保管されます。

  1. コマンドを実行して、新しいデフォルトのインスタンスを設定してください。 オプションで、インスタンス内のシークレットへのアクセスを許可する シークレット・グループ を指定できます。

    ibmcloud ks ingress instance default set --cluster CLUSTER_NAME_OR_ID --name INSTANCE_NAME --secret-group SECRET_GROUP_ID
    
  2. シークレットを再生成します。 IBMによって管理されるすべてのシークレット (デフォルトの Ingress シークレットなど) は、新しいデフォルト・インスタンスにアップロードされます。 これらのシークレットは自動的に更新され、 Secrets Manager インスタンスを参照するように CRN が変更されます。

    1. クラスタ内の nlb-dns サブドメインを一覧表示してください。
        ibmcloud ks nlb-dns ls --cluster CLUSTER_NAME_OR_ID
        ```
    2. クラスター内のサブドメインごとに、コマンドを実行して IBM管理対象シークレットを再生成します。 これにより、これらのシークレットの CRN が、新しいデフォルト Secrets Manager インスタンスの CRN を参照するように更新されます。
    
        シークレットの再生成は、1 週間に 5 回に制限されています。 これらを繰り返すと制限に達する可能性があるため、本書の手順は慎重に実行してください。 シークレットを再生成しない場合、または上限に達している場合は、次回の更新サイクルでシークレットが Secrets Manager インスタンスにアップロードされます。
        {: important}
    
        ```sh {: pre}
        ibmcloud ks nlb-dns secret regenerate --cluster CLUSTER_NAME_OR_ID --nlb-subdomain NLB_SUBDOMAIN
        ```
    
    3. デフォルトの Ingress シークレットが再生成されたことを確認します。 出力では、デフォルトの Ingress シークレットの CRN に `secrets-manager` が含まれている必要があります。
    
        シークレットが再生成されるまでに数分かかる場合があります。 このプロセス中に、再生成が完了すると、出力の **「状況」** 列に `regenerating` と表示され、 `created` に切り替わります。
        {: note}
    
        ```sh {: pre}
        ibmcloud ks ingress secret ls --show-crn --cluster CLUSTER_NAME_OR_ID
        ```
        出力例
    
        ```sh {: screen}
        Name                                Namespace   Expiry              Domains                                Status    Type   CRN
        secret-11111aa1a1a11aa1111111-000   default     3 months from now   secret-11111aa1a1a.us-s…domain.cloud   created   TLS    crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1:secret:a111aa11-11a1
        secret-22222aa2a2a22aa2222222-000   default     3 months from now   secret-22222aa2a2a.us-s…domain.cloud   created   TLS    crn:v1:bluemix:public:secrets-manager:us-south:a/2aa222aa2:secret:a222aa22-22a2   
        ```
    

シークレット・グループによるシークレットへのアクセスの制御

Secrets Manager では、シークレットグループを使用して、クラスター内のシークレットへのアクセス権限を持つユーザーを制御できます。 シークレット・グループ内のシークレットにアクセスできるのは、選択したユーザーまたはサービス ID のみになるように、シークレット・グループを IAM アクセス・グループに割り当てることができます。 詳しくは、 シークレットの編成 を参照してください。

クラスタの作成時に Secrets Manager インスタンスを登録する

新しいClassicクラスターまたはVPCクラスターを作成する場合、作成時に既存の Secrets Manager インスタンスとシークレットグループをそのクラスターに登録することができます。 クラスター内のシークレットは、 Secrets Manager インスタンスに保存され、シークレットグループに適用されます。

クラスタの作成時に登録された Secrets Manager インスタンスは、自動的にデフォルトの Secrets Manager インスタンスにはなりません。 それでも、手動で デフォルト・インスタンスを設定 する必要があります。

CLI で ibmcloud ks cluster create classic または ibmcloud ks cluster create vpc-gen2 を使用して クラスターを作成 する場合、以下のコマンド・オプションを使用して Secrets Manager インスタンスまたはシークレット・グループを指定できます。

  • --sm-instance: インスタンス CRN を指定して Secrets Manager インスタンスをクラスターに登録するには、このオプションを使用します。 Secrets Manager インスタンスのCRNを見つけるには、 ibmcloud resource service-instance <name_of_instance> を実行するか、UIのリソースリストに移動してインスタンスをクリックします。
  • --sm-group: このオプションを使用して、シークレット・グループの ID を指定します。 シークレット・グループ ID を見つけるには、 ibmcloud secrets-manager secret-groups を実行します。

UI でクラスターを作成する場合は、以下のステップに従って Secrets Manager インスタンスまたはシークレット・グループを指定します。

  1. クラスター作成ページの 「統合 (Integrations)」 セクションで、 Secrets Manager を有効にするオプションを選択します。
  2. Secrets Manager インスタンス」 ドロップダウン・メニューから、クラスターに登録するインスタンスを選択します。 使用可能なインスタンスがない場合は、 作成 します。
  3. Secrets Manager グループ」 ドロップダウン・メニューから、適用するシークレット・グループを選択します。
  4. クラスターを作成します。
  5. Secrets Manager インスタンスがクラスターに登録されていることを確認します。
    1. クラスタが完全にプロビジョニングされたら、クラスタをクリックしてクラスタの詳細を表示します。 「統合 (Integrations)」 の下で Secrets Manager 見出しを見つけ、 「管理」 をクリックします。
    2. サイド・パネルで、 「登録済み Secrets Manager インスタンス」 の下に正しいインスタンスがリストされていることを確認します。
    3. 追加インスタンスをクラスターに登録するには、 「インスタンスの登録」 をクリックします。