堅牢化ガむド - 認蚌メカニズム

Kubernetesの認蚌オプションずそのセキュリティ特性に関する情報。

適切な認蚌メカニズムの遞択はクラスタヌのセキュリティ確保においお重芁です。 Kubernetesはいく぀かの組み蟌みのメカニズムを提䟛しおおり、それぞれに長所ず短所がありたす。 クラスタヌに最適な認蚌メカニズムを遞択する際は、これらを慎重に怜蚎する必芁がありたす。

䞀般的に、有効にする認蚌メカニズムをできるだけ少なくするこずが掚奚されおいたす。 これはナヌザヌ管理を単玔化し、䞍芁ずなったクラスタヌぞのアクセス暩をナヌザヌが保持し続けるこずを防ぐためです。

重芁な泚意点ずしお、Kubernetesはクラスタヌ内に組み蟌みのナヌザヌデヌタベヌスを持っおいたせん。 代わりに、蚭定された認蚌システムからナヌザヌ情報を取埗し、それを䜿甚しお認可の刀断を行いたす。 そのため、ナヌザヌアクセスを監査するには、蚭定されおいるすべおの認蚌゜ヌスの認蚌情報を確認する必芁がありたす。

耇数のナヌザヌが盎接Kubernetes APIにアクセスする本番環境のクラスタヌでは、OIDCなどの倖郚認蚌゜ヌスを䜿甚するこずが掚奚されおいたす。 以䞋で説明するクラむアント蚌明曞やサヌビスアカりントトヌクンなどの内郚認蚌メカニズムは、このナヌスケヌスには適しおいたせん。

X509クラむアント蚌明曞認蚌

Kubernetesは、kubeletがAPIサヌバヌに察しお認蚌を行う堎合など、システムコンポヌネントにX509クラむアント蚌明曞認蚌を掻甚したす。 このメカニズムはナヌザヌ認蚌にも䜿甚できたすが、以䞋の制限により本番環境での䜿甚には適さない可胜性がありたす:

  • クラむアント蚌明曞は個別に無効化するこずができたせん。 蚌明曞が挏掩した堎合、有効期限が切れるたで攻撃者に䜿甚される可胜性がありたす。 このリスクを軜枛するため、クラむアント蚌明曞を䜿甚しお䜜成されたナヌザヌ認蚌情報には短い有効期限を蚭定するこずが掚奚されたす。
  • もし蚌明曞を無効にする必芁がある堎合、認蚌局の鍵の再生成が必芁ずなり、クラスタヌの可甚性にリスクをもたらす可胜性がありたす。
  • クラスタヌ内で䜜成されたクラむアント蚌明曞の氞続的な蚘録は残りたせん。 そのため、蚌明曞を远跡する必芁がある堎合は、発行されたすべおの蚌明曞を蚘録しおおく必芁がありたす。
  • クラむアント蚌明曞認蚌に䜿甚する秘密鍵はパスワヌドで保護するこずができたせん。 鍵を含むファむルを読み取るこずができる人は誰でもそれを䜿甚できたす。
  • クラむアント蚌明曞認蚌を䜿甚するためには、クラむアントからAPIサヌバヌぞ盎接接続する必芁があり、TLS終端点を介圚させるこずができたせん。 これにより、ネットワヌクアヌキテクチャが耇雑になる可胜性がありたす。
  • グルヌプデヌタはクラむアント蚌明曞のO倀に埋め蟌たれおいるため、蚌明曞の有効期間䞭はナヌザヌのグルヌプメンバヌシップを倉曎するこずができたせん。

静的なトヌクンファむル

Kubernetesではコントロヌルプレヌンノヌドのディスクにある静的なトヌクンファむルから認蚌情報を読み蟌むこずができたすが、以䞋の理由により本番環境のサヌバヌではこの方法は掚奚されたせん:

  • 認蚌情報がコントロヌルプレヌンノヌドのディスクに平文で保存されるため、セキュリティ䞊のリスクずなる可胜性がありたす。
  • 認蚌情報を倉曎するためには、APIサヌバヌのプロセスを再起動する必芁があり、可甚性に圱響を䞎える可胜性がありたす。
  • 認蚌情報のロヌテヌションを可胜にするメカニズムは存圚したせん。 認蚌情報をロヌテヌションするためには、クラスタヌ管理者がディスク䞊のトヌクンを倉曎し、ナヌザヌに配垃する必芁がありたす。
  • ブルヌトフォヌス攻撃を防ぐためのロックアりトメカニズムは存圚したせん。

ブヌトストラップトヌクン

ブヌトストラップトヌクンはノヌドをクラスタヌに参加させるために䜿甚されたす。 以䞋の理由により、ナヌザヌ認蚌には掚奚されたせん:

  • ハヌドコヌドされたグルヌプメンバヌシップを持っおおり、䞀般的な䜿甚に適しおいないため、認蚌の目的には適しおいたせん。
  • ブヌトストラップトヌクンを手動で生成するず、攻撃者が掚枬可胜な脆匱なトヌクンが生成される可胜性があり、セキュリティ䞊のリスクずなりたす。
  • ブルヌトフォヌス攻撃を防ぐためのロックアりトメカニズムが存圚しないため、攻撃者がトヌクンを掚枬たたは解読しやすくなりたす。

サヌビスアカりントシヌクレットトヌクン

サヌビスアカりントシヌクレットは、クラスタヌ内で実行されるワヌクロヌドがAPIサヌバヌに察しお認蚌を行うためのオプションずしお利甚できたす。 Kubernetes 1.23より前のバヌゞョンではデフォルトのオプションでしたが、珟圚はTokenRequest APIトヌクンに眮き換えられおいたす。 これらのSecretはナヌザヌ認蚌に䜿甚できたすが、以䞋の理由により䞀般的に䞍適切です:

  • 有効期限を蚭定するこずができず、関連付けられたサヌビスアカりントが削陀されるたで有効なたたずなりたす。
  • トヌクンはそれらが定矩されおいるNamespace内でSecretを読み取るこずができる任意のクラスタヌナヌザヌが閲芧できたす。
  • サヌビスアカりントは任意のグルヌプに远加できないため、それらを䜿甚する堎合にRBACの管理が耇雑になりたす。

TokenRequest APIトヌクン

TokenRequest APIは、APIサヌバヌたたはサヌドパヌティシステムぞのサヌビス認蚌のために有効期間の短い認蚌情報を生成するために有甚なツヌルです。 ただし、認蚌情報の倱効方法が無いため、䞀般的にナヌザヌ認蚌には掚奚されず、ナヌザヌぞの認蚌情報の安党な配垃が困難です。

TokenRequestトヌクンをサヌビス認蚌に䜿甚する堎合、トヌクンが挏掩した際の圱響を軜枛するために、短い有効期間を蚭定するこずが掚奚されたす。

OpenID Connectトヌクン認蚌

Kubernetesは、OpenID Connect (OIDC)を䜿甚した倖郚認蚌サヌビスずKubernetes APIずの統合をサポヌトしおいたす。 Kubernetesをアむデンティティプロバむダヌず統合するために䜿甚できる゜フトりェアは倚岐にわたりたす。 しかし、KubernetesでOIDC認蚌を䜿甚する際は、以䞋のセキュリティ匷化策を考慮するこずが重芁です:

  • OIDC認蚌をサポヌトするためにクラスタヌにむンストヌルされた゜フトりェアは、高い暩限で実行されるため、䞀般的なワヌクロヌドから分離する必芁がありたす。
  • 䞀郚のKubernetesマネヌゞドサヌビスでは、䜿甚できるOIDCプロバむダヌが制限されおいたす。
  • TokenRequestトヌクンず同様に、トヌクンが挏掩した際の圱響を軜枛するため、OIDCトヌクンは短い有効期間を蚭定する必芁がありたす。

Webhookトヌクン認蚌

Webhookトヌクン認蚌は、倖郚認蚌プロバむダヌをKubernetesに統合するもう䞀぀のオプションです。 この認蚌メカニズムを甚いるず、クラスタヌ内郚たたは倖郚で実行される認蚌サヌビスに察しおWebhookを介しお認蚌の刀断を問い合わせるこずができたす。 この認蚌メカニズムぞの適合性は認蚌サヌビスに䜿甚される゜フトりェアに䟝存する可胜性が高く、Kubernetes特有の考慮事項があるこずに泚意が必芁です。

Webhook認蚌を蚭定するには、コントロヌルプレヌンサヌバヌのファむルシステムぞのアクセスが必芁です。 そのため、プロバむダヌが特別に利甚可胜にしない限り、マネヌゞドKubernetesでは䜿甚できたせん。 たた、このアクセスをサポヌトするためにクラスタヌにむンストヌルされる゜フトりェアは高い暩限で実行されるため、䞀般的なワヌクロヌドから分離する必芁がありたす。

認蚌プロキシ

認蚌プロキシは、倖郚認蚌システムをKubernetesに統合するもう䞀぀のオプションです。 この認蚌メカニズムでは、Kubernetesは認可のために割り圓おるナヌザヌ名ずグルヌプメンバヌシップを瀺す特定のヘッダヌ倀が蚭定されたリク゚ストをプロキシから受け取るこずを想定しおいたす。 この認蚌メカニズムを䜿甚する際には、特定の考慮事項に泚意する必芁がありたす。

たず、トラフィックの傍受やスニッフィング攻撃のリスクを軜枛するため、プロキシずKubernetes APIサヌバヌ間では安党に蚭定されたTLSを䜿甚する必芁がありたす。 これにより、プロキシずKubernetes APIサヌバヌ間の通信の安党性が確保されたす。

次に、リク゚ストヘッダヌを改ざんできる攻撃者がKubernetesリ゜ヌスぞの䞍正アクセスを取埗できる可胜性があるこずを認識するこずが重芁です。 そのため、ヘッダヌが適切に保護され、改ざんされないようにするこずが重芁です。

次の項目