Kubernetes Service クラスターでの Secrets Manager のセットアップ
IBM Cloud Secrets Manager を IBM Cloud Kubernetes Service クラスターと統合すると、Ingress ドメイン証明書およびその他のシークレットを一元的に管理できます。
Secrets Manager について
Secrets Managerを使用すると、単一のサービスでシークレットを管理し、それらにアクセスできるユーザーを制御できます。 Secrets Manager インスタンスは、クラスターに自動的にプロビジョンされません。 ただし、 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 秘密鍵を使用すると、証明書の CRL を1つ指定できます。 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 クラスターと統合するには、サービス間通信の許可が必要です。 許可をセットアップする手順に従います。 追加情報については、 Integrations for Secrets Manager を参照してください。
- IBM Cloud コンソールで、 [管理] > [アクセス(IAM) ]をクリックします。
- 「許可」 をクリックします。
- 「作成」 をクリックします。
- ソースサービスリストで、選択します Kubernetes Service 選択します。
- アクセスの有効範囲を 「すべてのリソース」 に設定するオプションを選択します。
- ターゲットサービスリストで、選択します Secrets Manager 選択します。
- アクセスの有効範囲を 「すべてのリソース」 に設定するオプションを選択します。
- サービスへのアクセスセクションで、 マネージャーオプションにチェックを入れます。
- 「許可」 をクリックします。
Secrets Manager インスタンスを作成する
CLI または UI で Secrets Manager インスタンスを作成するには、 Secrets Manager の資料を参照してください。 Secrets Manager インスタンスが完全にプロビジョンされるまでに数分かかる場合があります。
Secrets Manager インスタンスを作成しても、クラスターに直接プロビジョンされることはありません。 次のステップで、新しい Secrets Manager インスタンスをクラスターに登録する必要があります。
Secrets Manager インスタンスをクラスターに登録します。
手順に従って、 Secrets Manager インスタンスをクラスターに登録します。
-
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
-
インスタンスをクラスターに登録します。 前のステップで見つかったインスタンス CRN を指定します。
インスタンスをクラスターに登録し、それをデフォルト・インスタンスとして設定する場合は、
--is-default
オプションを含めます。 それ以外の場合は、ibmcloud ks ingress instance default set
コマンドを使用してデフォルト・インスタンスを設定できます。ibmcloud ks ingress instance register --cluster <cluster_name_or_id> --crn <instance_crn> [--is-default]
-
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
コマンドを使用して クラスターを作成 するときに、 Secrets Manager インスタンスとシークレット・グループを指定できます。 クラスターにインスタンスを登録するには --sm-instance
オプションを使用し、クラスター上のシークレットにアクセスできるシークレット・グループを指定するには --sm-group
オプションを使用します。 クラスター作成時の Secrets Manager インスタンスの登録 を参照してください。
デフォルトの Secrets Manager インスタンスを設定して、シークレットを再生成します。
デフォルトの Secrets Manager インスタンスを設定すると、すべての新規 Ingress サブドメイン証明書がそのインスタンスに保管されます。
-
新しいデフォルトのインスタンスを設定するコマンドを実行します。 オプションで、インスタンス内のシークレットへのアクセスを許可する シークレット・グループ を指定できます。
ibmcloud ks ingress instance default set --cluster <cluster_name_or_id> --name <instance_name> --secret-group <secret_group_id>
-
シークレットを再生成します。 IBMによって管理されるすべてのシークレット (デフォルトの Ingress シークレットなど) は、新しいデフォルト・インスタンスにアップロードされます。 これらのシークレットは自動的に更新され、 Secrets Manager インスタンスを参照するように CRN が変更されます。
-
クラスタ内の nlb-dns サブドメインをリストアップします。
ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
-
クラスター内のサブドメインごとに、コマンドを実行して IBM管理対象シークレットを再生成します。 これにより、これらのシークレットの CRN が、新しいデフォルト Secrets Manager インスタンスの CRN を参照するように更新されます。
シークレットの再生成は、1 週間に 5 回に制限されています。 これらを繰り返すと制限に達する可能性があるため、本書の手順は慎重に実行してください。 シークレットを再生成しない場合、または制限に達した場合、シークレットは次回の更新サイクルで Secrets Manager インスタンスにアップロードされます。
ibmcloud ks nlb-dns secret regenerate --cluster <cluster_name_or_id> --nlb-subdomain <nlb_subdomain>
-
デフォルトの Ingress シークレットが再生成されたことを確認します。 出力では、デフォルトの Ingress シークレットの CRN に
secrets-manager
が含まれている必要があります。シークレットが再生成されるまでに数分かかる場合があります。 このプロセス中に、再生成が完了すると、出力の 「状況」 列に
regenerating
と表示され、created
に切り替わります。ibmcloud ks ingress secret ls --show-crn --cluster <cluster_name_or_id>
出力例
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 インスタンスを登録する
新しいクラシック・クラスターまたは 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 インスタンスまたはシークレット・グループを指定します。
- クラスター作成ページの 「統合 (Integrations)」 セクションで、 Secrets Manager を有効にするオプションを選択します。
- Secrets Manager インスタンス」 ドロップダウン・メニューから、クラスターに登録するインスタンスを選択します。 使用可能なインスタンスがない場合は、 作成 します。
- Secrets Manager グループ」 ドロップダウン・メニューから、適用するシークレット・グループを選択します。
- クラスターを作成します。
- Secrets Manager インスタンスがクラスターに登録されていることを確認します。
- クラスタが完全にプロビジョニングされたら、クラスタをクリックしてクラスタの詳細を表示します。 「統合 (Integrations)」 の下で Secrets Manager 見出しを見つけ、 「管理」 をクリックします。
- サイド・パネルで、 「登録済み Secrets Manager インスタンス」 の下に正しいインスタンスがリストされていることを確認します。
- 追加インスタンスをクラスターに登録するには、 「インスタンスの登録」 をクリックします。