LoginSignup
1
0

Kubernetes 1.30: SIG-Auth の変更内容

Last updated at Posted at 2024-05-08

はじめに

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

所感

今バージョンではAlphaの機能などは追加されておらず、v1.29で紹介した StructuredAuthenticationConfigurationStructuredAuthorizationConfigurationがベータに昇格しており、それに伴う機能改善・修正やメトリクスの整備がありました。

Changes by Kind

Deprecation

  • v1.27から非推奨となっていたSecurityContextDeny admission pluginは削除されました。代わりにv1.25から利用可能になっているPod Security Admission pluginの利用が推奨されています。詳細は Kubernetes documentationを参照してください。(#122612)

API Change

  • Dynamic Resource Allocation: DRAドライバは"structured parameters"使用し、クレーム割り当てをスケジューラに任せることができるようになりました。(#123516)
  • Structured Authentication ConfigurationがDiscoveryURLをサポートしました。指定された場合discoveryURL はディスカバリ情報を取得するために使用される URL を上書きします。これは、well-knownとjwksのエンドポイントが発行元とは異なる場所(クラスタ内のローカルなど)でホストされている場合のシナリオのためです。(#123527)
  • 以前はCRDで利用可能だったStorageVersionMigration APIはKubernetesのビルトインAPIになりました。 (#123344)
  • JWT authenticatorを設定する場合: username.expressionclaims.emailが使われる場合、username.expressionextra[*].valueExpressionまたはclaimValidationRules[*].expressionclaims.email_verifiedが使われていなければなりません。username.claimemailに設定されたときに自動的に適用されるバリデーションにマッチするクレームのバリデーションルール式の例は'claims.?email_verified.orValue(true)'です。(#123737)
  • kube-apiserver: --authentication-config ファイルで受け入れられるAuthenticationConfiguration typeはapiserver.config.k8s.io/v1beta1に昇格しました。(#123696)
  • AuthenticationConfigurationにaudienceMatchPolicyフィールドを追加し複数のaudienceの設定をサポートします。"audienceMatchPolicy"は"audiences"フィールドに1つのaudienceしか指定しない場合は空に(またはアンセット)することできます。"audienceMatchPolicy"複数のaudienceが"audiences"フィールドに指定されているときは"MatchAny"をセットしなければなりません。 (#123165)
  • ファイルに一貫したvanity importを追加し、それを検証・更新するためのツールを提供します。(#120642)
  • PodSecurityContextとコンテナのSecurityContextフィールドを通してAppArmor profileが設定できるようになりました。ベータのAppArmorアノテーションは非推奨になり、AppArmor statusはnode ready conditionに含まれなくなります。(#123435)
  • kube-apiserver: --authorization-config fileで受け入れられるAuthorizationConfiguration typeはapiserver.config.k8s.io/v1beta1に昇格しました。(#123640
  • CEL式の設定に基づいて主張されたユーザ名が空文字列の場合、OIDC認証が失敗するようになりました。以前はリクエストは認証されユーザ名には空文字がセットされました。(#123568)
  • Structured Authentication Configurationは複数のJWT authenticatorをサポートします。設定可能な最大のJWT authenticatorは64です。(#123431
  • Kubernetesコンポーネントのテキストロギングはtextloggerが使われるようになりました。infoエントリのバッファリングでinfoおよびerrorログエントリの同じsplit streamがテキスト出力でもサポートされるようになりました。以前はこれはJSONに対してのみサポートされていました。split streamなしでもパフォーマンスが向上しています。 (#114672)
  • APIサーバはJWT authenticatorsとサービスアカウント設定でissuerがコンフリクトしていた場合、起動時に検知し失敗するようになりました。以前はそのような設定は起動できましたが、クレデンシャルによって効果が一環しないことがありました。(#123561
  • --authentication-config フラグを通してセットされたJWT authenticator設定がディスク上のファイルが変更されると動的にリロードされるようになりました。(#123525
  • StructuredAuthenticationConfiguration 機能はベータとなり有効になりました。(#123719
  • kubernetes repoはGoワークスペースを使用するようになりました。これはエンドユーザーには全く影響しないはずですが、ダウンストリームプロジェクトの開発者には影響があります。ワークスペースに切り替えたことで、様々なk8s.io/code-generatorツールのフラグにいくつか破壊的な変更がありました。ダウンストリームのコンシューマは、staging/src/k8s.io/code-generator/kube_codegen.sh を見て、変更を確認する必要があります。 (#123529)
  •  …/serviceaccounts/<name>/tokenリソースハンドラが使うauditアノテーションが更新されました。クレデンシャル識別子を永続化するために使用されるアノテーションは authentication.kubernetes.io/issued-credential-id になりました。 (#123098)
  • ValidatingAdmissionPolicyがGAに昇格しデフォルトで有効になりました。(#123405)

Feature

  • Pod API で、コンテナ内の alpha procMount フィールドを Unmasked に設定するには、spec.hostUsers=false も設定が必要になりました。. (#123520)
  • kube-apiserverは--authorization-configファイルが変更されるとリロードするようになりました。リロードに成功した場合status="success"で失敗した場合はstatus="failed"apiserver_authorization_config_controller_automatic_reload_last_timestamp_seconds タイムスタンプメトリックをでインクリメントします。リロードに失敗した場合は以前にロードされたauthorization configurationがキープされます。 (#121946)
  • kube-apiserverはauthorization webhookのマッチ条件について以下のメトリクスを報告するようになりました:(#123611)
    • apiserver_authorization_match_condition_evaluation_errors_total authorizerの種類と名前によってラベル付けされたカウンターメトリック
    • apiserver_authorization_match_condition_exclusions_total authorizerの種類と名前によってラベル付けされたカウンターメトリック
    • apiserver_authorization_match_condition_evaluation_seconds authorizerの種類と名前によってラベル付けされたヒストグラムメトリック
  • kube-apiserver: JWT authenticatorは以下のメトリクスを報告するようになりました: (#123793)
    • apiserver_authentication_config_controller_automatic_reloads_total
    • apiserver_authentication_config_controller_automatic_reload_last_timestamp_seconds
  • kube-apiserver: StructuredAuthorizationConfiguration feature gateはbetaに昇格し --authorization-configuration flagが使用できるようになりました。#123641)
  • 新しいapiserver_encryption_config_controller_automatic_reloads_totalメトリックがAPIサーバのencrytion configurationのリロード成功・失敗を計測するために追加されました。このメトリックはstatusラベルを含み、successまたはfailureの値となります。apiserver_encryption_config_controller_automatic_reload_success_totalと apiserver_encryption_config_controller_automatic_reload_failure_totalメトリクスは非推奨となります。かわりにapiserver_encryption_config_controller_automatic_reloads_totalを使用してください。 (#123179)
  • kube-apiserverは、JWT authenticator トークン認証のレイテンシメトリックを、jwtIssuerハッシュと結果でラベル付けされた apiserver_authentication_jwt_authenticator_latency_seconds メトリックで報告するようになりました。(#123225)
  • kube-apiserverは認可判断のメトリクスをauthorizerの種類と名前、判断でラベル付けされたapiserver_authorization_decisions_totalで報告するようになりました。 (#123333)
  • kube-apiserver: Authorization webhooksは以下のメトリクスを報告するようになりました:
    • apiserver_authorization_webhook_evaluations_total
    • apiserver_authorization_webhook_duration_seconds
    • apiserver_authorization_webhook_evaluations_fail_open_total (#123639)
  • Node情報がPodに紐付くサービスアカウントトークンに追加のメタデータとして埋め込まれるようになりました。JTIフィールドは発行されたサービスアカウントトークンにセットされ、この情報はユーザのExtraInfoにauthentication.kubernetes.io/credential-idとして埋め込まれます。 (#123135)
  • ValidatingAdmissionPolicy は、すべてのバージョンの authentication.k8s.io および authorization.k8s.io グループから TokenReview、SelfSubjectReview、LocalSubjectAccessReview、および SubjectAccessReview を除外するようになりました。 (#123543)
    • :pencil2: ユーザがtokenreviewやsubjectaccessreviewなど認証・認可の結果を変えてしまうポリシーを定義できてしまう状態だったようです。実際に1.29で以下のポリシーを適用できることを確認しました。
    apiVersion: admissionregistration.k8s.io/v1beta1
    kind: ValidatingAdmissionPolicy
    metadata:
      name: test-policy
    spec:
      matchConstraints:
        resourceRules:
        - apiGroups:   ["authentication.k8s.io"]
          apiVersions: ["v1"]
          operations:  ["CREATE", "UPDATE"]
          resources:   ["tokenreviews"]
      validations:
      - expression: "object.spec.token == string"
        message: "This is test policy"
    
    上記ポリシーを紐づけた上でTokenReview APIに問い合わせた結果。 (https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-review-v1/)
    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {},
      "status": "Failure",
      "message": "tokenreviews.authentication.k8s.io \"Unknown\" is forbidden: ValidatingAdmissionPolicy 'test-policy' with binding 'test-binding' denied request: This is test policy",
      "reason": "Invalid",
      "details": {
        "name": "Unknown",
        "group": "authentication.k8s.io",
        "kind": "tokenreviews",
        "causes": [
          {
            "message": "ValidatingAdmissionPolicy 'test-policy' with binding 'test-binding' denied request: This is test policy"
          }
        ]
      },
      "code": 422
    }
    

Documentation

N/A

Failing Test

N/A

Bug or Regression

  • map(...).exists(...)のようなmap()演算の結果に対して演算を行う式のCEL見積もりコストが、無限ではなく正しい見積もりコストになるように修正されました。 (#123562)
  • --authentication-configを介して設定されたJWT authenticatorが、RS256で署名されていないトークンの検証に失敗する問題に対処した。(#123282)
  • サービスアカウントとOIDC認証で使用されるJWTは、コンパクトなシリアライズを使用していることを確認するために厳密にパースされるようになりました。他のエンコーディングは、以前は受け入れられませんでしたが、異なる不特定なエラーが発生します。(#123540)
  • CVE-2024-24786を解決するために google.golang.org/protobuf を v1.33.0 に更新しました。 (#123758

Other (Cleanup or Flake)

  • GAのfeature-gateAPISelfSubjectReviewは削除され、機能は無条件に有効になります(#122032)
  • LegacyServiceAccountTokenCleanUpはGAに昇格しデフォルトに固定されます(#122635)
  • LegacyServiceAccountTokenTracking(1.28からGA)のfeature gateは無条件に有効なため削除されました。(#122409)
1
0
0

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