Azure Kubernetes Service (AKS) クラスターでは、AKS マネージド コントロール プレーン コンポーネントやデータ プレーン コンポーネントなど、さまざまなコンポーネント間の認証に証明書が使用されます。 この記事では、AKS での証明書の管理とローテーションの概要について説明します。
重要
2027 年 4 月 1 日から、Azure Kubernetes Service (AKS)では、Kubelet Serving Certificate Rotation (KSCR) を無効にする aks-disable-kubelet-serving-certificate-rotation=true ノード プール タグがサポートされなくなりました。 このタグを使用して新しいノード プールを作成できますが、AKS ではそれを尊重しません。 この動作は、KSCR を有効にしてノード プールが作成されることを意味します。 既存のノード プールの場合、KSCR は次回の再イメージ化操作で自動的に有効になります。 この日付より前に、 az aks nodepool update コマンドと aks-disable-kubelet-serving-certificate-rotation=true タグを使用してノード プールを更新できます。 削除を準備するには、適切な証明書パスでワークロードを更新する必要があります。 詳細については、 廃止に関する GitHub の問題を参照してください。 お知らせや更新情報を常に把握するには、 AKS のリリース ノートに従ってください。
注
Kubernetes RBAC を有効にするクラスターでは、ノード クライアントとサービス証明書の証明書の自動ローテーションが既定で有効になっています。
- 2019 年 5 月より前に作成された AKS クラスターには、2 年後に有効期限が切れるクラスター CA 証明書があります。
- 2019 年 5 月以降に作成された AKS クラスターには、30 年後に有効期限が切れるクラスター CA 証明書があります。
証明書のローテーションとは
証明書のローテーションは、セキュリティを維持し、中断を防ぐために、デジタル証明書を新しい証明書に置き換えるプロセスです。 これは、期限切れの証明書を置き換え、侵害されたキーからのリスクを軽減し、新しいセキュリティ要件に対応するために実行される重要なセキュリティプラクティスです。 このプロセスでは、証明書を自動的に更新したり、手動で置き換えたりする必要があります。 多くの場合、特にルート証明書が関係する場合は、複雑な置換のために計画メンテナンス期間が必要です。
AKS の証明書、証明機関、およびサービス アカウント トークン
AKS は、次の証明書、証明機関 (CA)、サービス アカウント (SA) トークンを生成して使用します。
| Certificate | 説明 | 回転方法 |
|---|---|---|
| クラスター証明機関 | ユーザーに代わって AKS によって作成され、クラスターに固有です。 この CA 証明書は、データ プレーンで実行されている kubelets と API サーバーで使用される証明書にクライアント証明書とサーバー証明書の両方を発行するために使用されます。 | Manual |
| サービス アカウント トークン | クラスター CA 証明書によって署名された JSON Web トークン (JWT)。 エージェント ノードで実行されている kubelets は、これらのトークンを自動的に要求して更新します。 詳細については、「 サービス アカウント トークンプロジェクションを使用してポッドを起動する」を参照してください。 | クラスター CA の手動ローテーションの一部として自動的に更新される |
| API サーバー証明書 | クラスター CA 証明書によって署名および発行されます。 この証明書は、kubectl などで API サーバーとの TLS ベースの接続を確立する際に使用されます。 |
クラスター CA の手動ローテーションの一部として自動的に更新される |
| Kubelet サービス証明書 | 証明書のローテーションを提供する kubelet を有効にするクラスターでは、クラスター CA 証明書が発行され、この証明書に署名されます。 それ以外の場合、エージェント ノードはこの証明書を生成して自己署名します。 この証明書は、 metrics-server などのいずれかの kubelet サービス エンドポイントに接続する必要があるコンポーネントとの TLS ベースの接続を確立します。 | kubelet のサービング証明書ローテーションが有効なクラスターでは自動 |
| Kubelet クライアント証明書 | クラスター CA 証明書によって署名および発行されます。 この証明書では、kubelet を開始する前に kubelet のクライアント証明書と対応する kubeconfig を提供する AKS 固有の TLS ブートストラップ プロトコル を使用します。 AKS TLS プロトコルは、Kubernetes クラスター バージョン 1.32 以降でのみ有効です。 | 標準の TLS ブートストラップを使用して既定で自動更新され、手動によるクラスター CA ローテーションの一環として行われる |
kubectl クライアント証明書 |
API サーバーでの証明書ベースの認証に使用されます。 | クラスター CA の手動ローテーション後に手動で回転する |
注
AKS では、顧客のワークロードに対して作成された証明書や特定の証明書は管理されません。
AKS での証明書の自動ローテーション
AKS は、次の証明書を自動的にローテーションします。
- Kubernetes RBAC が有効になっている 2022 年 3 月以降に作成されたクラスターでは、kubelet クライアント証明書の自動ローテーションが既定で有効になります。
注
セキュリティまたはポリシー上の理由から、これらの証明書を手動で定期的にローテーションすることが必要になる場合があります。 たとえば、すべての証明書を 90 日ごとにローテーションするポリシーがあるとします。 既定では、kubelet クライアント証明書の自動ローテーションは手動で行われます。
証明書の自動ローテーションに関する制限事項
証明書の自動ローテーションには、次の制限事項が適用されます。
- クラスターでは、バニラ TLS ブートストラップまたは AKS のセキュリティで保護された TLS ブートストラップを使用する必要があります。これは、既定ですべてのAzure リージョンにロールアウトされます。
- 既存のクラスターの場合は、証明書の自動ローテーションを有効にするためにクラスターをアップグレードする必要があります。
AKS での証明書の手動ローテーション
次の証明書を 手動でローテーション する必要があります。
-
az aks rotate-certsを使用したクラスター CA 証明書。 -
kubectlaz aks get-credentialsコマンドを使用したクライアント証明書 (クラスター CA 証明書の手動ローテーション後)。
クラスター CA 証明書をローテーションすると、次の子証明書も更新されます。
- サービス アカウント (SA) トークン
- API サーバー証明書
- Kubelet クライアント証明書
- Kubelet サーバー証明書 (クラスターで kubelet サービス証明書のローテーションが有効になっている場合)
クラスター CA 証明書をローテーションした後、 クライアント証明書を手動でローテーションして、API サーバーへの継続的なアクセスを確保する必要もあります。
kubelet クライアント証明書の TLS ブートストラップ
Kubelet は AKS 固有の TLS ブートストラップ プロトコルを使用し、Entra ID内のノードの ID に依存します。 この ID は、kubelet が開始される前に、kubelet のクライアント証明書と対応する kubeconfig を提供します。 この変更は、静的ブートストラップ トークン シークレットに対する kubelet の依存関係を排除して API サーバーに自身を登録することで、AKS ノードのセキュリティ体制を強化することを目的としています。 何らかの理由でセキュリティで保護された TLS ブートストラップ プロトコルが失敗した場合でも、kubelet はブートストラップ トークンを使用して API サーバーに自身を登録でき、最終的にノードの準備が整います。 プロトコルによって作成された証明書署名要求 (CSR) オブジェクトのリクエスタ フィールドとして aksService ( system:bootstrap:<>ではなく) が表示されます。
kubelet クライアント証明書は、Linux ノードの場合は /var/lib/kubelet/pki/kubelet-client-current.pem 内に、Windows ノードでは C:\k\pki\kubelet-client-current.pem 内にあります。 bootstrap-kubeconfig は引き続き同じ場所にあります。 AKS は、証明書ローテーション プロセスの一環として、この証明書を自動的にローテーションし続けます。
Kubelet サービング証明書のローテーション
Kubelet サービング証明書のローテーションにより、AKS はクラスター CA によって署名されるサービング証明書のブートストラップとローテーションの両方で、kubelet サーバーの TLS ブートストラップを使用できます。
詳細については、「Azure Kubernetes Service (AKS)での証明書の管理とローテーション」を参照してください。
証明書ローテーションの制限を提供する Kubelet
- Kubernetes バージョン 1.27 以降でサポートされています。
- ノード プールが、
202501.12.0より古いノード イメージに基づいてノード プール スナップショットを使用している場合はサポートされません。 - この機能を手動で有効にすることはできません。 既存のノード プールでは、Kubernetes バージョン 1.27 以降への最初のアップグレードを実行した後、証明書のローテーションを提供する kubelet が既定で有効になっています。 Kubernetes バージョン 1.27 以降の新しいノード プールでは、証明書ローテーションを提供する kubelet が既定で有効になっています。 Kubelet サービス証明書のローテーションがリージョンで有効になっているかどうかを確認するには、「 AKS リリース」を参照してください。
- 証明書のローテーションを提供する kubelet を有効にするには、クラスターで Kubernetes RBAC を有効にする必要があります。 既存のクラスターがある場合は、そのクラスターをアップグレードして Kubernetes RBAC を有効にする必要があります。