- 2023/07/04 Kubernetes Novice Tokyo #26 - GCP リソースを扱うためには... 結論からいうと,,, (GKE 関係なく、) GCP リソースを操作するライブラリ がよしなにやってくれる! ※ Application Default Credentials(ADC) という認証情報取得の仕組みを用いて ② GCE に紐付いた IAM Service Account を使う 実行環境 IAM SA メタデータサーバー Datastore ① 認証情報をリクエスト ② アクセス元に紐づく IAM SA応じた認証情報 ③ datastore アクセス ・Datastore 読取権限 ロール アプリ ✔ アクセス可
① 特定の場所に配置された認証情報を使う => IAM SA のキーを Secret リソースとしてデプロイして、Pod にマウントする - 2023/07/04 Kubernetes Novice Tokyo #26 - できることはできるけど課題が・・・ GKE Pod Secret IAM SA リクエスト Datastore Pod にマウント ✔ アクセス可
- 2023/07/04 Kubernetes Novice Tokyo #26 - できることはできるけど課題が・・・ GKE Pod Secret IAM SA リクエスト Datastore 1. IAM SA キーの 手動でローテションが必要 2. エクスポートした IAM SA キーの流出のリスク ※ この方法は推奨されていない Pod にマウント ✔ アクセス可 ① 特定の場所に配置された認証情報を使う => IAM SA のキーを Secret リソースとしてデプロイして、Pod にマウントする
② GCE に紐付いた IAM Service Account を使う => GKE ノード作成時にデフォルトの IAM Service Account がアタッチされ(※ 指定も可能)、 そのノード上のワークロード(Pod) は、この IAM Service Account を使って認証される。 - 2023/07/04 Kubernetes Novice Tokyo #26 - できることはできるけど課題が・・・ 同じ IAM SA の認証情報 GKE ノードA ノードB IAM SA メタデータサーバー Pod A Pod B Datastore ✔ アクセス可
- 2023/07/04 Kubernetes Novice Tokyo #26 - できることはできるけど課題が・・・ 同じ IAM SA の認証情報 GKE ノードA ノードB IAM SA メタデータサーバー Pod A Pod B Datastore 1. 同一ノードの上のワークロード は同じ権限を持つことになる 2. 最小権限の原則に反する ※ デフォルト IAM SA の場合、 K8sクラスタ実行に過剰権限になる ✔ アクセス可 ② GCE に紐付いた IAM Service Account を使う => GKE ノード作成時にデフォルトの IAM Service Account がアタッチされ(※ 指定も可能)、 そのノード上のワークロード(Pod) は、この IAM Service Account を使って認証される。
■ GKE 上の Pod(アプリ)の認証まとめ: ① IAM SA のキーを Secret としてマウントして使う => IAM SA キーのエクスポートは推奨されていない ② GKE ノードの IAM SA を使って、メタデータサーバー から認証情報取得 => GKE ノード上のワークロードが同じ権限を持ってしまう ③ Workload Identity を使う ← オススメ - 2023/07/04 Kubernetes Novice Tokyo #26 - Workload Identity を使おうぜ 😎(やっとメイン)
- 2023/07/04 Kubernetes Novice Tokyo #26 - Workload Identity is 何? これにより、実現したかったことができるようになります! 同一ノード上の、 - Pod A には “Datastore 編集権限” を持たせる - Pod B には “Datastore 編集権限” を持たせない × Pod B Pod A K8s SA: sa-k8snovice K8s SA: default Datastore ✔ アクセス可 アクセス不可 IAM SA ・Datastore 読取権限 ロール 連携