次の方法で共有


Windows Server 上の AKS での証明書管理の概要

適用対象: Windows Server 上の AKS

Windows Server 上の AKS では、証明書とトークンベースの認証の組み合わせを使用して、プラットフォーム内のさまざまな操作を担当するサービス (またはエージェント) 間の通信をセキュリティで保護します。 証明書ベースの認証では、リソースへのアクセスを許可する前に、デジタル証明書を使用してエンティティ (エージェント、マシン、ユーザー、またはデバイス) を識別します。

クラウド エージェント

Windows Server に AKS を展開すると、クラスター内のさまざまな機能を実行するために使用されるエージェントが AKS によってインストールされます。 次のエージェントが含まれます。

  • クラウド エージェント: 基になるプラットフォーム オーケストレーションを担当するサービス。
  • ノード エージェント: 各ノード上に存在し、仮想マシンの作成や削除などの実際の作業を行うサービス。
  • キー管理システム (KMS) ポッド: キー管理を担当するサービス。
  • その他のサービス: クラウド オペレーター、証明書マネージャーなど。

AKS のクラウド エージェント サービスは、クラスター内の仮想マシン (VM)、仮想ネットワーク インターフェイス (VNIC)、仮想ネットワーク (VNET) などのインフラストラクチャ コンポーネントの作成、読み取り、更新、削除 (CRUD) 操作を調整する役割を担います。

クライアントがクラウド エージェントと通信するには、この通信をセキュリティで保護するために、証明書がプロビジョニングされている必要があります。 各クライアントには ID が関連付けられている必要があります。これにより、クライアントに関連付けられるロール ベースのアクセス制御 (RBAC) 規則が定義されます。 各 ID は 2 つのエンティティで構成されます。

  • トークン。初期認証に使われ、証明書を返します。
  • 証明書。上記のサインイン プロセスから取得され、任意の通信での認証に使われます。

各エンティティは特定の期間 (既定では 90 日間) 有効で、それが終わると期限切れになります。 クラウド エージェントにアクセスし続けるには、クライアントごとに証明書を更新し、トークンをローテーションする必要があります。

証明書の種類

Windows Server 上の AKS で使用される証明書には、次の 2 種類があります。

  • クラウド エージェント CA 証明書: クライアント証明書の署名/検証に使用される証明書。 この証明書は 365 日間 (1 年間) 有効です。
  • クライアント証明書: クライアントがクラウド エージェントに対して認証するためにクラウド エージェント CA 証明書によって発行される証明書。 通常、これらの証明書は 90 日間有効です。

Microsoft では、新しいリリースから 60 日以内にクラスターを更新することをお勧めします。これは、内部証明書とトークンを最新の状態に保つためだけでなく、新機能やバグ修正プログラムに確実にアクセスし、最新の重要なセキュリティ修正プログラムを常に適用し続けるためでもあります。 これらの毎月の更新では、更新プロセスによって、クラスターの通常の操作中に自動ローテーションできないトークンがローテーションされます。 証明書とトークンの有効期間は、クラスターが更新された日付から既定の 90 日間にリセットされます。

Windows Server 上の AKS で証明書との通信をセキュリティで保護する

証明書は、クラスター内のコンポーネント間でセキュリティで保護された通信をするために使用されます。 AKS には、組み込みの Kubernetes コンポーネントの証明書のゼロタッチ、すぐに使用できるプロビジョニングと管理が用意されています。 この記事では、Windows Server 上の AKS で証明書をプロビジョニングおよび管理する方法について説明します。

証明書と CA

AKS では、次の証明機関 (CA) と証明書が生成されて使用されます。

クラスター CA

  • API サーバーには、API サーバーから kubelet への一方向の通信に使用する証明書に署名するクラスター CA があります。
  • また、各 kubelet では、kubelet から API サーバーへの通信のために、クラスター CA によって署名される証明書署名要求 (CSR) も作成されます。
  • etcd キー値ストアには、etcd から API サーバーへの通信用に、クラスター CA によって署名された証明書が含まれています。

etcd CA

etcd キー値ストアでは、クラスター内で etcd レプリカ間のデータ レプリケーションを認証および承認するために証明書に署名する etcd CA があります。

フロント プロキシ CA

フロント プロキシ CA は、API サーバーと拡張 API サーバー間の通信をセキュリティで保護します。

証明書のプロビジョニング

kubelet の証明書のプロビジョニングは、TLS ブートストラップを使用して行われます。 他のすべての証明書については、YAML ベースのキーと証明書の作成を使用します。

  • 証明書は、/etc/kubernetes/pki に格納されます。
  • キーは RSA 4096、EcdsaCurve: P384 です。

ルート証明書は 10 年間有効です。 その他のルート以外の証明書は有効期間が短く、有効期間は 4 日間です。

証明書の更新と管理

ルート以外の証明書は自動的に更新されます。 以下の証明書を除く、Kubernetes のすべてのコントロール プレーン証明書が管理されます。

  • Kubelet サーバー証明書
  • Kubeconfig クライアント証明書

セキュリティ ベスト プラクティスとして、ユーザー認証には Active Directory シングル サインインを使用する必要があります。

証明書の失効

証明書の失効が必要になることはめったにありません。証明書の更新時に行う必要があります。

失効させる証明書のシリアル番号を取得したら、Kubernetes カスタム リソースを使用して、失効情報の定義と保持を行います。 各失効オブジェクトは、1 つまたは複数の失効エントリで構成されます。

失効を実行するには、次のいずれかを使用します。

  • シリアル番号
  • グループ
  • DNS 名
  • IP アドレス

notBefore 時間を指定して、特定のタイムスタンプより前に発行された証明書のみ取り消すことができます。 notBefore 時間が指定されていない場合、失効に一致するすべての既存の証明書と将来の証明書が失効します。

kubelet サーバー証明書は現在、失効させることができません。

失効を実行するときにシリアル番号を使用する場合は、次に示す Repair-AksHciClusterCerts PowerShell コマンドを使用して、クラスターを動作状態にすることができます。 前述の他のフィールドのいずれかを使用する場合、必ず notBefore 時間を指定してください。

apiVersion: certificates.microsoft.com/v1 
kind: RenewRevocation 
metadata: 
  name: my-renew-revocation 
  namespace: kube-system 
spec: 
  description: My list of renew revocations 
  revocations: 
  - description: Revoked certificates by serial number 
    kind: serialnumber 
    notBefore: "2020-04-17T17:22:05Z" 
    serialNumber: 77fdf4b1033b387aaace6ce1c18710c2 
  - description: Revoked certificates by group 
    group: system:nodes 
    kind: Group 
  - description: Revoked certificates by DNS 
    dns: kubernetes.default.svc. 
    kind: DNS 
  - description: Revoked certificates by DNS Suffix 
    dns: .cluster.local 
    kind: DNS 
  - description: Revoked certificates by IP 
    ip: 170.63.128.124 
    kind: IP 

次のステップ