AWSで権限昇格を防ぐ構成を検討したときの備忘になります。
背景
検証用のAWSアカウントの権限管理を改善するにあたって、
- 開発のスピードを下げないように制限する権限を最小限にしたい
- 管理者以外の権限の昇格は防ぎたい
といった条件がありました。
権限の昇格を防ぎたいという要望があったので、IAMの権限は管理者以外付与しない構成を考えました。
しかしその場合、IAMポリシーやIAMロールが作成できなくなり、EC2やLambdaにアタッチするといったことも事前承認制になってしまいます。
これでは開発のスピードを下げてしまいます。
そんなわけで開発のスピードを下げることなく、権限昇格を防ぐ構成について考えることになりました。
今回のゴール
今回実現する構成では以下を目標にしています。
- IAMユーザ、グループに関する操作権限を制限する
- MFA設定やパスワード変更等最低限必要な権限は付与する
- それ以外のIAM権限については原則権限を付与する
- 権限管理に必要なロールやポリシーへの操作は制限する
現状の権限管理構成と課題
この構成ではIAMロール、IAMポリシーの権限を付与しているので、フルアクセス権限のIAMロールにスイッチすることで権限昇格が発生してしまいます。
実装した権限管理構成1
IAMユーザに権限を付与して操作する構成から、IAMロールに権限を付与して操作する構成に変更されています。
この構成では、IAMユーザがスイッチできるIAMロールを制限することで、新規にフルアクセス権限のIAMロールを作成して権限昇格することを防ぐことができます。
構成1の問題点
先述の構成で完璧だ!と思ったのですが、以下のようなステップで権限昇格できることが判明しました。
IAMユーザからスイッチして権限昇格する経路はなくなりましたが、引き続きフルアクセス権限のIAMロールを作成する権限はあります。そのため、EC2やLambdaなどIAMユーザ以外のリソースにフルアクセス権限のロールをアタッチすることで、権限昇格が発生してしまいます。
このケースでは、EC2への接続やLambdaの実行ができれば簡単に権限昇格ができてしまいます。
実装した権限管理構成2
構成1ではフルアクセス権限のIAMロールを利用させないというアプローチで検討しました。
その場合、少ない権限でも昇格できることが判明したので、フルアクセス権限のIAMロールを作成できないようにするアプローチを検討しました。
権限管理構成は以下です。
Permissons Boundaryを利用して、IAMロールを作成する際も利用者以上の権限を作成できないようにしました。
これによって、EC2やLambdaにアタッチするIAMロールが最も権限が広いものでも利用者のロールと同じになるので、権限昇格を防ぐことができます。
Permissons Boundaryについて説明
IAMユーザやIAMロールにアタッチすることができるアクセス権限です。(IAMグループは不可)
普段アタッチしているIAMポリシー(Identity-based policy)に併せて付与することが可能です。
画像の通りで、IAMポリシーとPermissions Bounaryの両方で許可されているものが有効な権限です。
そのため、今回のパターンではPermissions Bounaryで今回のゴールで制限するものを拒否するようにして、IAMポリシー側でフルアクセス権限があっても制限できるようにしました。
最後に
最後までご覧いただきありがとうございます!
間違い等あればご指摘いただけると幸いです。