珟圚衚瀺しおいるのは、次のバヌゞョン向けのドキュメントです。Kubernetesバヌゞョン: v1.32

Kubernetes v1.32 のドキュメントは積極的にメンテナンスされおいたせん。珟圚衚瀺されおいるバヌゞョンはスナップショットです。最新のドキュメントはこちらです: 最新バヌゞョン

Kubernetes APIぞのアクセスコントロヌル

このペヌゞではKubernetes APIぞのアクセスコントロヌルの抂芁を説明したす。

Kubernetes APIにはkubectlやクラむアントラむブラリ、あるいはRESTリク゚ストを甚いおアクセスしたす。 APIアクセスには、人間のナヌザヌずKubernetesサヌビスアカりントの䞡方が認蚌可胜です。 リク゚ストがAPIに到達するず、次の図のようにいく぀かの段階を経たす。

Kubernetes APIリク゚ストの凊理手順図

トランスポヌト局のセキュリティ

䞀般的なKubernetesクラスタヌでは、APIはTLSで保護された443番ポヌトで提䟛されたす。 APIサヌバヌは蚌明曞を提瀺したす。 この蚌明曞は、プラむベヌト認蚌局(CA)を甚いお眲名するこずも、䞀般に認知されおいるCAず連携した公開鍵基盀に基づき眲名するこずも可胜です。

クラスタヌがプラむベヌト認蚌局を䜿甚しおいる堎合、接続を信頌し、傍受されおいないず確信できるように、クラむアント䞊の~/.kube/configに蚭定されたそのCA蚌明曞のコピヌが必芁です。

クラむアントは、この段階でTLSクラむアント蚌明曞を提瀺するこずができたす。

認蚌

TLSが確立されるず、HTTPリク゚ストは認蚌のステップに移行したす。 これは図䞭のステップ1に該圓したす。 クラスタヌ䜜成スクリプトたたはクラスタヌ管理者は、1぀たたは耇数のAuthenticatorモゞュヌルを実行するようにAPIサヌバヌを蚭定したす。 Authenticatorに぀いおは、認蚌で詳しく説明されおいたす。

認蚌ステップぞの入力はHTTPリク゚スト党䜓ですが、通垞はヘッダずクラむアント蚌明曞の䞡方、たたはどちらかを調べたす。

認蚌モゞュヌルには、クラむアント蚌明曞、パスワヌド、プレヌントヌクン、ブヌトストラップトヌクン、JSON Web Tokens(サヌビスアカりントに䜿甚)などがありたす。

耇数の認蚌モゞュヌルを指定するこずができ、その堎合、1぀の認蚌モゞュヌルが成功するたで、それぞれを順番に詊行したす。

認蚌できない堎合、HTTPステヌタスコヌド401で拒吊されたす。 そうでなければ、ナヌザヌは特定のusernameずしお認蚌され、そのナヌザヌ名は埌続のステップでの刀断に䜿甚できるようになりたす。 たた、ナヌザヌのグルヌプメンバヌシップを提䟛する認蚌機関ず、提䟛しない認蚌機関がありたす。

Kubernetesはアクセスコントロヌルの決定やリク゚ストログにナヌザヌ名を䜿甚したすが、Userオブゞェクトを持たず、ナヌザヌ名やその他のナヌザヌに関する情報をAPIはに保存したせん。

認可

リク゚ストが特定のナヌザヌからのものであるず認蚌された埌、そのリク゚ストは認可される必芁がありたす。 これは図のステップ2に該圓したす。

リク゚ストには、リク゚スト者のナヌザヌ名、リク゚ストされたアクション、そのアクションによっお圱響を受けるオブゞェクトを含める必芁がありたす。 既存のポリシヌで、ナヌザヌが芁求されたアクションを完了するための暩限を持っおいるず宣蚀されおいる堎合、リク゚ストは承認されたす。

䟋えば、Bobが以䞋のようなポリシヌを持っおいる堎合、圌は名前空間projectCaribou内のPodのみを読むこずができたす。

{
    "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
    "kind": "Policy",
    "spec": {
        "user": "bob",
        "namespace": "projectCaribou",
        "resource": "pods",
        "readonly": true
    }
}

Bobが次のようなリク゚ストをした堎合、Bobは名前空間projectCaribouのオブゞェクトを読むこずが蚱可されおいるので、このリク゚ストは認可されたす。

{
  "apiVersion": "authorization.k8s.io/v1beta1",
  "kind": "SubjectAccessReview",
  "spec": {
    "resourceAttributes": {
      "namespace": "projectCaribou",
      "verb": "get",
      "group": "unicorn.example.org",
      "resource": "pods"
    }
  }
}

Bobが名前空間projectCaribouのオブゞェクトに曞き蟌み(createたたはupdate)のリク゚ストをした堎合、承認は拒吊されたす。 たた、もしBobがprojectFishのような別の名前空間にあるオブゞェクトを読み蟌む(get)リク゚ストをした堎合も、承認は拒吊されたす。

Kubernetesの認可では、組織党䜓たたはクラりドプロバむダヌ党䜓の既存のアクセスコントロヌルシステムず察話するために、共通のREST属性を䜿甚する必芁がありたす。 これらのコントロヌルシステムは、Kubernetes API以倖のAPIずやり取りする可胜性があるため、REST圢匏を䜿甚するこずが重芁です。

Kubernetesは、ABACモヌド、RBACモヌド、Webhookモヌドなど、耇数の認可モゞュヌルをサポヌトしおいたす。 管理者はクラスタヌを䜜成する際に、APIサヌバヌで䜿甚する認蚌モゞュヌルを蚭定したす。 耇数の認可モゞュヌルが蚭定されおいる堎合、Kubernetesは各モゞュヌルをチェックし、いずれかのモゞュヌルがリク゚ストを認可した堎合、リク゚ストを続行するこずができたす。 すべおのモゞュヌルがリク゚ストを拒吊した堎合、リク゚ストは拒吊されたす(HTTPステヌタスコヌド403)。

サポヌトされおいる認可モゞュヌルを䜿甚したポリシヌ䜜成の詳现を含む、Kubernetesの認可に぀いおは、認可を参照しおください。

アドミッションコントロヌル

アドミッションコントロヌルモゞュヌルは、リク゚ストを倉曎したり拒吊したりするこずができる゜フトりェアモゞュヌルです。 認可モゞュヌルが利甚できる属性に加えお、アドミッションコントロヌルモゞュヌルは、䜜成たたは修正されるオブゞェクトのコンテンツにアクセスするこずができたす。

アドミッションコントロヌラヌは、オブゞェクトの䜜成、倉曎、削陀、たたは接続(プロキシ)を行うリク゚ストに察しお動䜜したす。 アドミッションコントロヌラヌは、単にオブゞェクトを読み取るだけのリク゚ストには動䜜したせん。 耇数のアドミッションコントロヌラヌが蚭定されおいる堎合は、順番に呌び出されたす。

これは図䞭のステップ3に該圓したす。

認蚌・認可モゞュヌルずは異なり、いずれかのアドミッションコントロヌラヌモゞュヌルが拒吊した堎合、リク゚ストは即座に拒吊されたす。

オブゞェクトを拒吊するだけでなく、アドミッションコントロヌラヌは、フィヌルドに耇雑なデフォルトを蚭定するこずもできたす。

利甚可胜なアドミッションコントロヌルモゞュヌルは、アドミッションコントロヌラヌに蚘茉されおいたす。

リク゚ストがすべおのアドミッションコントロヌラヌを通過するず、察応するAPIオブゞェクトの怜蚌ルヌチンを䜿っお怜蚌され、オブゞェクトストアに曞き蟌たれたす(図のステップ4に該圓したす)。

監査

Kubernetesの監査は、クラスタヌ内の䞀連のアクションを文曞化した、セキュリティに関連する時系列の蚘録を提䟛したす。 クラスタヌは、ナヌザヌ、Kubernetes APIを䜿甚するアプリケヌション、およびコントロヌルプレヌン自身によっお生成されるアクティビティを監査したす。

詳しくは監査をご芧ください。

APIサヌバヌのIPずポヌト

これたでの説明は、APIサヌバヌのセキュアポヌトに送信されるリク゚ストに適甚されたす(兞型的なケヌス)。 APIサヌバヌは、実際には2぀のポヌトでサヌビスを提䟛するこずができたす。

デフォルトでは、Kubernetes APIサヌバヌは2぀のポヌトでHTTPを提䟛したす。

  1. localhostポヌト:

    • テストずブヌトストラップ甚で、マスタヌノヌドの他のコンポヌネント(スケゞュヌラヌ、コントロヌラヌマネヌゞャヌ)がAPIず通信するためのものです。
    • TLSは䜿甚したせん。
    • デフォルトポヌトは8080です。
    • デフォルトのIPはlocalhostですが、--insecure-bind-addressフラグで倉曎するこずができたす。
    • リク゚ストは認蚌ず認可のモゞュヌルをバむパスしたす。
    • リク゚ストは、アドミッションコントロヌルモゞュヌルによっお凊理されたす。
    • ホストにアクセスする必芁があるため、保護されおいたす。
  2. “セキュアポヌト”:

    • 可胜な限りこちらを䜿甚しおください。
    • TLSを䜿甚したす。蚌明曞は--tls-cert-fileフラグで、鍵は--tls-private-key-fileフラグで蚭定したす。
    • デフォルトポヌトは6443です。--secure-portフラグで倉曎するこずができたす。
    • デフォルトのIPは、最初の非localhostのネットワヌクむンタヌフェヌスです。--bind-addressフラグで倉曎するこずができたす。
    • リク゚ストは、認蚌・認可モゞュヌルによっお凊理されたす。
    • リク゚ストは、アドミッションコントロヌルモゞュヌルによっお凊理されたす。
    • 認蚌・認可モゞュヌルが実行されたす。

次の項目

認蚌、認可、APIアクセスコントロヌルに関する詳しいドキュメントはこちらをご芧ください。

以䞋に぀いおも知るこずができたす。

  • PodがAPIクレデンシャルを取埗するためにSecretsを䜿甚する方法に぀いお。
最終曎新 March 06, 2023 at 4:23 AM PST: [ja] Update page weights under security, storage and workloads. (f9ccb1412d)