メモ置き場

Kubernetesユーザ管理・認証メモ

  • Kubernetesにおけるユーザ: (通常の)ユーザ, ServiceAccount
    • (通常の)ユーザの情報はKubernetesクラスタ上で管理されていない
    • APIリクエストを認証し、リクエストの情報からユーザ属性を取得して権限を判定する
      • username, uid, groups, extra
  • 認証方法
    • X509クライアント証明書
      • kube-apiserverの起動時に指定したCA証明書でAPIリクエストのクライアント証明書を検証する
      • 証明書のCommonName(CN)をusername, Organization(O)をgroupsとして設定
    • Bearerトークン
      • 静的なトークンの検証
        • 起動時に指定されたトークンファイル中のトークンと一致するか検証する
      • Webhookトークン認証
        • Bearerトークンの検証処理をWebhookで別のサーバに委譲する
    • OpenID Connectトークン
      • クラスタ外のOpenIDプロバイダで発行されたID Tokenを検証する
      • kube-apiserverの起動時にOpenIDプロバイダの設定をおこなう
    • 認証プロキシ
      • 認証プロキシで認証結果をヘッダに設定して送信し、kube-apiserverではこの値を利用する
    • ServiceAccountトークン認証
      • APIが生成したトークンか検証する
  • 匿名リクエスト
    • 設定された認証方法で拒否されなかった場合は匿名リクエストとして扱う
      • username: system:anonymous, group: system:unauthenticated
    • 匿名リクエストはusername:*, group:*のポリシーに含まれない点に注意
  • ユーザの偽装
    • 認証されたユーザとは別のユーザ情報で処理を行うことができる
      • 専用の権限が必要

参考