作業概要
設定済みのSecret ManagerをIKSクラスタと接続し構成することで、デフォルトのIKS Ingress証明書ではなく、Secret Managerで自動更新された証明書をIKSで利用できるため、証明書管理という観点ではSecret ManagerのみでOKとなる。
通常、デフォルトで発行されるIKS証明書の場合、90日ごとに更新される
しかし、それを参照して利用するアプリケーションなどは自動更新されないため、手動で更新する運用が必要となる。
これを解消するためにSecret Managerで一元管理し証明書を自動更新することで手間を減らすことができる。また、カスタムドメインの証明書も自動更新して利用できるため、運用性は高くなる。
全体の流れ
ボリュームがあるので、全5回で記事を記載します。
本記事では「3.IKSとSecret Managerの連携設定と自動更新の確認」の内容を記載
前回
1.自動証明書管理環境(ACME)のセットアップと認証局の構成
2.DNS Providerの設定と自動更新カスタムドメイン証明書(パブリック)の発行
本記事はこちら
3.[IKSとSecret Managerの連携設定と自動更新の確認]
次回以降
4.IKSからパブリック証明書の参照と自動更新
5.IngressALBから証明書の利用とアプリケーションへのHTTPS動作確認
全体図
IKSでSecret Managerを利用して、IngressALBにPublic証明書を適用し、証明書の自動更新を行う一例
Secret ManagerとIKSのサービス間アクセス許可
はじめに、SecretManagerとIKS間のサービス連携のためのアクセス権の追加が必要になるため、その設定を実施する
IAM -> Authorizations -> Createを選択
Sourceの設定
Source account: This account
Routing: Kubernetes Service
Resources: All
Targetの設定
Service: Secrets Manager
Resources: All
Roles: Manager
SecretsManagerインスタンスをクラスターに登録
まずSecrets Managerのinstance IDを確認する
"5074d80d-949c-468e-9991-7cb884063380"がInstance IDとなる
% ibmcloud resource service-instances --service-name secrets-manager
xxx@ibm.com としてアカウント xxx's Account の すべての場所 で リソース・グループ acs-paas 内の タイプ service_instance のインスタンスを取得しています...
OK
名前 ロケーション 状態 タイプ リソース・グループ ID
Secrets Manager-acs-paas jp-tok active service_instance d72766061fce4e839ce2bdd1247e621c
% ibmcloud resource service-instance "Secrets Manager-acs-paas" --guid
xxx@ibm.com としてアカウント xxx's Account の リソース・グループ acs-paas のサービス・インスタンス Secrets Manager-acs-paas を取得しています...
5074d80d-949c-468e-9991-7cb884063380
Instance IDがわかったら、下記コマンドにてCRNを確認
ibmcloud resource service-instance
CRNは「crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380::」であることがわかる
% ibmcloud resource service-instance 5074d80d-949c-468e-9991-7cb884063380
xxx@ibm.com としてアカウント xxx's Account の リソース・グループ acs-paas のサービス・インスタンス 5074d80d-949c-468e-9991-7cb884063380 を取得しています...
OK
名前: Secrets Manager-acs-paas
ID: crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380::
GUID: 5074d80d-949c-468e-9991-7cb884063380
場所: jp-tok
サービス名: secrets-manager
サービス・プラン名: standard
リソース・グループ名: acs-paas
状態: active
タイプ: service_instance
サブタイプ:
ロック中: false
1回限りのクレデンシャル: false
作成日時: 2024-04-07T23:44:00Z
作成元: xxx@ibm.com
更新日時: 2024-05-13T08:05:41Z
最後の操作:
状況 sync succeeded
メッセージ Synchronized the instance
次に確認したCRNを元にクラスターとSecret Managerを登録する
% ibmcloud ks ingress instance register --cluster cv4ef49t0jeirigoaasg --crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:: --is-default
OK
Secrets Manager インスタンスがクラスターに登録されていることを確認
% ibmcloud ks ingress instance ls --cluster cv4ef49t0jeirigoaasg
OK
名前 タイプ デフォルト 状況 シークレット・グループ CRN
secrets-manager-acs-paas secrets-manager true created acs-paas crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380::
削除したい場合は下記のコマンドで実施できる
% ibmcloud ks ingress secret rm --cluster cv4ef49t0jeirigoaasg --name ingress-alb-tls --namespace default
OK
SecretsManagerインスタンスを設定して、シークレットを再生成
すべての新規 Ingress サブドメイン証明書がこのインスタンスに保管されるように、
デフォルトとしてSecret managerを指定する
% ibmcloud ks ingress instance default set --cluster cv4ef49t0jeirigoaasg --name secrets-manager-acs-paas
OK
現在のSecretを確認する
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-03T23:14:32+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-03T23:14:32+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-03T23:14:32+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
クラスター内の nlb-dns サブドメインを一覧表示
% ibmcloud ks nlb-dns ls --cluster cv4ef49t0jeirigoaasg
OK
サブドメイン ターゲット SSL 証明書の状況 SSL 証明書の秘密名 秘密の名前空間 状況
acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud 3bc64147-jp-tok.lb.appdomain.cloud created acs-sectest-d13c20a300620486546182a0effece00-0000 default OK
IBM管理対象シークレットの再生成
% ibmcloud ks nlb-dns secret regenerate --cluster cv4ef49t0jeirigoaasg --nlb-subdomain acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud
NLB サブドメインの証明書および秘密を再生成中...
注: 変更が適用されるまで数分かかる場合があります。
OK
有効期限が変わっているため、シークレットが再生成されたことがわかる
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
Secret Managerに登録された証明書を参照し、新しいシークレットを作成
Secret Managerで証明書が管理・自動更新されるようになったため
その証明書を参照する形で新しいシークレットを作成することができる
ibmcloud ks ingress secret create --name <任意名> --cluster <対象クラスタID> --cert-crn <参照CRN> --namespace <利用するPODを作成するNamespace>
参照CRNはSecret Managerで管理されるようになった証明書のCRNを記載する
調べ方1:下記コマンドで表示される証明書のCRN
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
調べ方2:IBMCloud Portalより確認
Secret Managerのリソースから対象インスタンスを選択すると、右下にCRNが表示される
CRNが確認できたので、新しいシークレットを作成
"testcert"という名前で"test"のネームスペースに作成
ibmcloud ks ingress secret create --name testcert --cluster cv4ef49t0jeirigoaasg --cert-crn crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 --namespace test
OK
確認
CRNと有効期限が一致した"testcert"が作成される
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
testcert test crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest.jp-tok.containers.appdomain.cloud created TLS
証明書更新時の動作
Secret Managerの証明書はデフォルトで90日間の有効期限を持っており、有効期限の31日前に自動で更新が行われる参照元の証明書が更新された場合、参照した証明書も自動で更新されるか確認する
下記三つの証明書である"crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380ae2673ed-958c-0324-b6db-dd75277acd12"を手動でローテートする
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
ローテート対象のSecretsを選択し、右のメニューから"Rotate"を選択
ローテートが完了すると、しばらくしたら有効期限が新しい状態になるため更新されたことがわかる
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
testcert test crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T01:56:05+0000 acs-sectest.jp-tok.containers.appdomain.cloud created TLS
先ほど作った"testcert"と更新した証明書の有効期限だけが異なる状態
testcertは今回更新した証明書を参照しているため、有効期限も一緒になるはずだが、この同期処理は1日1回行われる。まだ反映されていないことから、有効期限が異なって見えている。
参考:登録済みの Secrets Manager インスタンスに保管されているシークレットは自動的に更新されますか?
1日経過後の状態は下記
% ibmcloud ks ingress secret ls --cluster cv4ef49t0jeirigoaasg
OK
名前 名前空間 CRN 有効期限 ドメイン 状況 タイプ
acs-sectest-d13c20a300620486546182a0effece00-0000 default crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 ibm-cert-store crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
acs-sectest-d13c20a300620486546182a0effece00-0000 kube-system crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest-d13c20a300620486546182a0effece00-0000.jp-tok.containers.appdomain.cloud created TLS
testcert test crn:v1:bluemix:public:secrets-manager:jp-tok:a/db415c559c0e468cb9414edb82aee6fe:5074d80d-949c-468e-9991-7cb884063380:secret:ae2673ed-958c-0324-b6db-dd75277acd12 2025-06-04T03:13:29+0000 acs-sectest.jp-tok.containers.appdomain.cloud created TLS
証明書の有効期限が参照元と一致し、1日一回の同期がうまくいっていることを確認できる