Slide 1

Slide 1 text

最小権限を目指して @ngoktanio @oke-py 2021.12.7 Kubernetes Novice Tokyo #15

Slide 2

Slide 2 text

自己紹介 桶谷 直樹(おけたに なおき) ● CISO室 セキュリティ監視室 ○ Kubernetes ○ AWS ● CloudNative Days 実行委員

Slide 3

Slide 3 text

目次 ● なぜ最小権限を目指すのか ● クラスター内の操作権限をどう小さくするか ● クラスター外の操作権限をどう小さくするか ○ IAM Roles for Service Accounts(AWS) ○ Workload Identity(GCP)

Slide 4

Slide 4 text

なぜ最小権限を目指すのか

Slide 5

Slide 5 text

最小権限はリスクを軽減する もし、攻撃された人やアプリケーションが 管理者権限を持っていたら? サイバー攻撃 マルウェア拡散 内部不正

Slide 6

Slide 6 text

どの程度まで最小を追求するのか 「受容できないビジネス影響をもたらしうる権限」を特定 最小権限実現への4ステップアプローチ 前編 https://aws.amazon.com/jp/blogs/news/systematic-approach-for-least-privileges-jp/

Slide 7

Slide 7 text

今日話すこと: ServiceAccountの権限を小さくする

Slide 8

Slide 8 text

クラスター内の操作権限をどう小さくするか

Slide 9

Slide 9 text

クラスター内

Slide 10

Slide 10 text

クラスター内の操作権限 ClusterRole Role ClusterRoleBinding RoleBinding

Slide 11

Slide 11 text

kubectl pluginを活用する ● rbac-tool https://github.com/alcideio/rbac-tool ● rolesum https://github.com/Ladicle/kubectl-rolesum ● who-can https://github.com/aquasecurity/kubectl-who-can

Slide 12

Slide 12 text

kubectl rbac-tool viz

Slide 13

Slide 13 text

kubectl rbac-tool analyze

Slide 14

Slide 14 text

注意点の例 ● そのServiceAccountはSecretを参照できてよい? ○ アクセス可能なSecretを利用して権限昇格されることも ● そのServiceAccountはPodを作成できてよい? ○ コインマイナーを実行されるかも ○ 侵入拡大(Lateral Movement)に利用されるかも ● Helm Chartで作成されるRoleも要確認 ○ cluster-adminを要求する例も

Slide 15

Slide 15 text

クラスター外の操作権限をどう小さくするか

Slide 16

Slide 16 text

クラスター外

Slide 17

Slide 17 text

NodeにIAMロールを適用する CloudNative Daysで利用している方法 https://github.com/cloudnativedaysjp/dreamkast-infra/blob/main/cfn/eks-nodes-bottlerocket.yaml

Slide 18

Slide 18 text

NodeにIAMロールを適用する懸念点 機微性の異なるPodに一律に権限が付与される 例: ブログの脆弱性を悪用して 個人情報を保存している DBにアクセスされる

Slide 19

Slide 19 text

ワークロードごとに異なるIAMロールを適用する

Slide 20

Slide 20 text

ワークロードごとに異なるIAMロールを適用する IAM ServiceAccountとKubernetes ServiceAccountを紐付ける AWS: IAM Roles for Service Accounts(IRSA) GCP: Workload Identity CloudNative DaysでもIRSAの導入をはじめている

Slide 21

Slide 21 text

IAMロールに割り当てる権限を見直す IRSAやWorkload Identityを利用したからといって 全ワークロードに管理者権限を付与していたら意味がない ● FullAccessをReadonlyAccessに変更する ● IAMポリシーを分析する ○ AWS: IAM Access Advisor ○ GCP: Policy Analyzer

Slide 22

Slide 22 text

まとめ ビジネス影響を鑑み、最小権限の実現を目指そう ● アクセス権を可視化し、リスクを特定する ○ kubectl rbac-tool ○ AWS: IAM Access Advisor ○ GCP: Policy Analyzer ● ワークロードごとに異なる権限を付与する ○ AWS: IRSA ○ GCP: Workload Identity

Slide 23

Slide 23 text

おわりに IRSAを試してみる手順をまとめました。 ぜひ手を動かしてみてください。 https://github.com/oke-py/k8snovice15 後日でも構いませんので 「よくわからん」「今度はこれを聞きたい」などあれば   @ngoktanio に遠慮なくご連絡ください。

Slide 24

Slide 24 text

参考資料 最小権限実現への4ステップアプローチ 前編 https://aws.amazon.com/jp/blogs/news/systematic-approach-for-least-privileges-jp/ 最小特権の原則(PoLP) https://www.cyberark.com/ja/what-is/least-privilege/ IAM アクセスアナライザー と IAM アクセスアドバイザー をもう二度と混同しないために絵をかいて理解してみた https://dev.classmethod.jp/articles/iam-accessanalyzer-vs-iam-accessadvisor/ IAM ポリシーの分析 https://cloud.google.com/asset-inventory/docs/analyzing-iam-policy Amazon EKS ノードの IAM ロール https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-node-role.html サービスアカウントの IAM ロールとポリシーの作成 https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-service-account-iam-policy-and-role.html Workload Identity の使用 https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity