1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

K8s v1.32 SIG-Authの変更内容

Last updated at Posted at 2025-01-13

はじめに

このページではKubernetes v1.32におけるSIG-Authに関連する取り組みについて、ChangelogのChanges By Kindの項目から紹介しています。ここに記載されていないものは別のまとめで記載されていると思いますので、  Kubernetes 1.32: 変更点まとめも確認してみてください。

:pencil2: がついた文章は、CHANGELOGの公式内容ではなく筆者の補足です。

機能の追加・更新など

Alphaで追加されたfeature gate

  • KubeletFineGrainedAuthz
  • ExternalServiceAccountTokenSigner

Betaに昇格した/追加されたfeature gate

GAに昇格したfeature gate

削除されたfeature gate

  • ValidatingAdmissionPolicy
  • LegacyServiceAccountTokenCleanUp
  • KMSv2
  • KMSv2KDF

Changes by Kind

Deprecation

  • ServiceAccount metadata.annotations kubernetes.io/enforce-mountable-secrets: v1.32から非推奨になります。削除期限はありません。別々のNamespaceを使用してシークレットへのアクセスを分離することが好ましいです。(#128396)

API Change

  • kube-apiserver エンドポイントに/flagzエンドポイントを追加しました。(#127581)
  • DRA: 不明瞭なデバイス設定パラメータを制限しました。Admission時にKubernetesは10KiBのサイズ制限を強制します。. (#128601)
  • DRA: シナリオによるがポッドのスケジューリングが最大16倍高速になります。スケジューリングのスループットはクラスタ利用率に大きく依存します。リソースが空いていて負荷の軽いクラスタでは高く、クラスタの利用率が上がると低くなります。.([#127277])
  • DRA: DeviceRequestAllocationResult structに"AdminAccess"フィールドが追加されました。割り当てを処理するときに、DeviceRequest フィールドの対応するフィールドの代わりにこのフィールドを使用する必要があります。デバイスが管理者アクセスのみに割り当てられている場合、当初の意図どおり、通常の使用のためにデバイスを再度割り当てることがサポートされるようになりました。管理者アクセスを許可するには、1.32 以降、「DRAAdminAccess」機能ゲートを有効にする必要があります. (#127266)
  • Structured authentication configurationにてk8s.iokubernetes.ioの名前空間を持つextra keyを許可しないようにしました。(#126553)
    • :pencil2: claim mappingでk8s.ioのような名前空間のkeyへのマッピングを禁止します
  • admission policyを変更するためのv1alpha1 API を導入し、CEL 式による拡張可能なadmission controlを有効にしますs (KEP 3962: Mutating Admission Policies)。 使用するには、MutatingAdmissionPolicy feature gateとadmissionregistration.k8s.io/v1alpha1 API を--runtime-config経由で有効にします。. ([#127134)
  • kube-apiserver: StructuredAuthorizationConfiguration feature gate をGAに昇格します。 --authorization-config フラグはapiserver.config.k8s.io/v1バージョンのAuthorizationConfigurationを受け付けます(apiserver.config.k8s.io/v1beta1からの変更はありません)
  • kubelet: --image-credential-provider-config ファイルが厳密なデシリアライズでロードされ、config ファイルに重複したフィールドや不明なフィールドが含まれる場合に失敗します。これにより、不正なコンフィグファイル、インデントされていないファイル、フィールド名のタイプミスが誤って実行されることを防ぎ、予期しない動作を防止します。 (#128062)
  • NodeRestriction admissionは、kubeletがPod Spec Volumeに定義されるServiceAccountトークンを要求する際にaudienceの値をvalidateするようになります。 これはデフォルト有効な新しいkube-apiserverのServiceAccountNodeAudienceRestriction feature gateで有効化されます。 (#128077)
  • StatefulSetAutoDeletePVC feature gateがbetaからstableになりました。(#128247)
  • classic dynamic resource allocation (DRA)のすべてのサポートが削除されました。以前はalphaだったDRAControlPlaneController feature gateは利用できなくなりました。Kubernetes は Pod への動的リソース割り当てに structured parameters モデル (alpha) のみを使用するようになりました。クラスタで classic DRA が有効になっている場合のみ、アップグレード前に、classic DRA に依存するすべてのワークロード(pods、app deploymentsなど)を削除し、すべての PodSchedulingContext リソースがなくなっていることを確認してください。アップグレード後に apiserver から PodSchedulingContext リソースを削除すると、ワークロードが正しく動作しなくなります。。(#128003)
  • kubelet API Authorization に新しいサブリソースが追加され、kubelet エンドポイントのよりきめ細かな認証チェックとアクセス制御が可能になりました。KubeletFineGrainedAuthz feature gateを有効にしていれば、RBAC で呼び出し元に nodes/helathz 権限を付与することで、kubelet の /healthz エンドポイントにアクセスできます。同様に、RBAC で呼び出し側に nodes/pods 権限を付与することで、kubelet の /pods エンドポイントにアクセスして、そのノードにバインドされている Pod のリストを取得することもできます。また、RBAC で呼び出し側に nodes/configz 権限を付与することで、kubelet の /configz エンドポイントにアクセスして kubelet の設定を取得することもできます。RBAC で呼び出し元に nodes/proxy 権限を付与することで、kubelet の /healthz/pods/configz にアクセスすることはできますが、これは呼び出し元にノード上のコンテナを実行、実行、アタッチする権限も付与することになり、最小権限の原則には従いません。呼び出し元に必要以上のアクセス許可を与えると、攻撃者に権限を昇格させる機会が与えられる可能性があります。 (#126347)
    • :pencil2: KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/2862-fine-grained-kubelet-authz/README.md
    • kublet apiの認証の改善
    • 認識されている課題
      • これまで、/healthzエンド /podsポイントは認証されていない kubelet 読み取り専用ポート (10255) で使用できましたが、kubelet 読み取り専用ポートはデフォルトで無効になっており、ポートを有効にすることはセキュリティ上の最悪のプラクティスと見なされている
      • 多くのエージェントが kubelet 認証ポート (10250) を使用するように切り替えたが、認証済み (10250) ポートの Kubelet API は現在、リクエストの認証に非常に大まかなスキームを使用している。 たとえば、読み取り/healthzと呼び出し/exec/… には同じproxy サブリソースが必要
    • Dynamic Resource Allocation (DRA) のコア機能がbetaになりました。アップグレードの際、何もする必要はありません。以前のv1alpha3のAPIも引き続きサポートされていますので、v1alpha3ベースの既存のデプロイメントやDRAドライバは引き続き動作します。クラスタ内のDRAリソース(resourceclaims、resourceclaimtemplates、deviceclasses、resourceslices)を1.32から1.31にダウングレードすることはサポートされていません。 (#127511)
  • 使いやすさと開発者の使い勝手を向上させるため、CRDバリデーションルールでは、オブジェクトバリデーション式でフィールド名として(CEL)予約キーワードを直接使用できるようになりました。 名前形式CELライブラリは、新しい式でサポートされています。 (#126977)
  • kube-apiserverへのX.509 クライアント証明書認証で、監査ロギングで使用するためのクレデンシャルID(証明書の署名から派生)が生成されるようになりました(#125634)
    • :pencil2: e.g.,レスポンスに以下のようなkey=valueが含まれる
    • key=authentication.kubernetes.io/credential-id , value=[X509SHA256=794b0529fd1a72d55d52d98be9bab5b822d16f9ae86c4373fa7beee3cafe8582]

Feature

  • kube-apiserver に/statuszエンドポイントを追加しました。([#125577])
  • 新しいvolumeattributesclass-protection-controllerをkube-controller-managerに追加しました。この新しいコントローラーは、VolumeAttributesClassオブジェクトの保護ファイナライザを管理します。(#123549)
  • alpha版のExternalServiceAccountTokenSigner feature gateを有効にし、--service-account-signing-endpointを指定することで、サービスアカウントトークンの外部署名公開検証鍵の取得を可能にする機能をkube-apiserverに追加しました。フラグの値にはUNIXドメインソケットの場所または、@記号を先頭につけて抽象ソケット名前空間内のUNIXドメインソケットの名前を指定します。 (#128190)
  • btreeデータ構造を使った list 動詞のためのwatchキャッシュの新しい実装を採用しました。この実装はデフォルトで有効です。BtreeWatchCache feature gateで無効にできます。(#128415)
  • AnonymousAuthConfigurableEndpoints feature gateをベータに移行しデフォルトで匿名認証のエンドポイントを設定できるようになります。(#127009)
  • on_operations_totalメトリックに、リソース固有の検証(例えばapiserverによる暗号化設定の処理など)に使用可能な、追加のリソースlabeltransformationを追加しました。 (#126512)
  • JWT authenticatorsは、監査ロギングで使用されるクレデンシャルIDとして、jtiクレーム(それが存在し文字列値である場合)を設定するようになりました。(#127010)
    • :pencil2: e.g.,レスポンスに以下のようなkey=valueが含まれる
    • key=authentication.kubernetes.io/credential-id , value=[JTI=xxxx]
  • kube-apiserver: リクエストのフィールドとラベルのセレクタ情報をWebhook authorization呼び出しに含めるAuthorizeWithSelectors機能をベータ版に昇格しました。AuthorizeNodeWithSelectors機能をベータ版に昇格させ、ノードAPIクライアントからのリクエストを制限するようにノードオーソライザの動作を変更しました。これにより、各ノードは自身のノードAPIオブジェクトのみを取得/一覧表示/監視でき、そのノードにバインドされたPod APIオブジェクトのみを取得/一覧表示/監視できるようになります。kubelet 認証情報を使用して他のノードや無関係なポッドを読み取るクライアントは、認証情報を変更するか(recommended)、使用方法を調整するか、ノードオーソライザとは無関係に広い読み取りアクセス権を取得する必要があります。 (#128168
  • kube-apiserver: 新しい --requestheader-uid-headers フラグにより、リクエストヘッダ認証を設定して指定したヘッダから認証ユーザーの UID を取得できるようになりました。新しいオプションの推奨値は X-Remote-Uid です。指定すると、kube-system/extension-apiserver-authentication configmap の .data[requestheader-uid-headers] フィールドにその値が含まれるようになります。(#115834)
    • :pencil2: extension-apiserver-authenticationはextention apiserverが認証のための設定値などを読み込むためのConfigMap
  • カーネルバージョンガイドライン4.15以上の場合、ポッドがデフォルトで net.ipv4.tcp_rmem および net.ipv4.tcp_wmem sysctl を使用できるようにします。カーネル 4.15 では、sysctl が名前空間化されました。Pod Security アドミッションはv1.32 以降のバージョンのベースライン ポリシーと制限付きポリシーでこれらの sysctl が許可します。 (#127489)
  • 発行されたサービスアカウントトークンに jti クレームを追加し、authentication.kubernetes.io/credential-id=[「JTI=...」] の値として 埋め込む ServiceAccountTokenJTI 機能を GA に昇格しました。(#128169)
  • ServiceAccountTokenPodNodeInfo をGAに昇格します。この機能は、実行中のポッドにマウントされたサービスアカウントトークンにノード名と uid をクレームとして追加し、トークンが使用されるときにその情報を authentication.kubernetes.io/node-nameauthentication.kubernetes.io/node-uid ユーザ追加情報として埋め込みます。(#128169)
  • ServiceAccountTokenNodeBindingValidationを GA に昇格させ、ノードに直接バインドされたサービス アカウント トークンを検証します。(#128169)
  • コントロールプレーンのトラストアンカーパブリッシャーが更新され、kubernetes.io/kube-apiserver-serving X.509証明書署名者に関連付けられた新しいClusterTrustBundleオブジェクトが作成および管理されるようになりました。このClusterTrustBundleのペイロードには、kube-apiserver serving証明書の検証に使用できるPEMバンドルが含まれています。(#127326)

Documentation

  • N/A

Failing Test

  • N/A

Bug or Regression

  • ConfigMap、Secret、DownwardAPI、Projectedの重複パスに対する警告を追加しました。ソース付きのProjectedVolumeが提供されている場合の警告を追加しました。. (#121968)
  • DRA: スケジューラのキューイングヒント機能を有効にすると、生成されたResourceClaimの名前を記録してもスケジューリングがトリガーされないため、Podがスケジューリング不能としてスタックしていました (#127497)
  • KMSv2サービスから送信されたリクエストが、無効なAuthorityヘッダを持つために拒否される問題を修正しました。(#126930)
  • system:controller:persistent-volume-binderおよびsystem:controller:expand-controllerクラスタロールの不要なパーミッションを削除しました。(#125995)

Other

  • Fakeクライアントセットは、共通の汎用的な実装を使用するようになりました。対応する構造体はプライベートとなり、呼び出し元は対応するコンストラクタを使用する必要があります。(#126503)
  • 一般的に利用可能な ValidatingAdmissionPolicy feature gateを削除しました。(#126645)
  • 一般的に利用可能なLegacyServiceAccountTokenCleanUp feature gateを削除しました。(#126839)
  • KMSv2KMSv2KDF のfeature gateを削除しまし。関連する機能は Kubernetes v1.29 リリースで安定版に移行しています。 (#126698)
  • etcdクライアントをv3.5.16に更新しました。 (#127279)
  • kubelet: 1.32.0リリース候補でWindowsノードでCSIボリュームをマウントする際の問題を修正しました。(#129083)
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?