AWSをいじり倒す(16.IAMのPermission Boundary)
開発者にアカウントを渡したい!
でもIAMFullAccess渡すと好きなことできてしまうから制限したい!
でもでも開発にはロール作ったり、ポリシー作ったりするかもしれない・・・
これらを解決してくれるらしい、パーミッションバウンダリー機能を試してみた。
目次
教科書通りの動きを確認してみる
まずは、適当に作ったIAMユーザのboundary-testさん
をboundary-test-groupに所属させ、
グループにはIAMFullAccessとS3FullAccessポリシーをアタッチ。
許可の境界(パーミッションバウンダリー)の設定ではIAMFullAccessをアタッチ。
ここは複数選択じゃなくて単一選択なので、複数ポリシーをアタッチしたければ
事前にカスタマー管理のポリシーを作らないといけないようだ
さて、この状態だと
グループのポリシーはIAMとS3のアクセスを許可しているのに対し
バウンダリーのポリシーはIAMしか許可してないので
S3はアクセスできないはず。
boundary-testさんにログインしてみてみると
はい。まずは想定通り。
adminユーザにログインしなおし、
IAMとS3両方を許可するポリシーをせっかくなのでJSONで書いてみる。
この辺を参考にした
【初心者向け】IAMポリシー(JSON)の見方 - サーバーワークスエンジニアブログ
実際書いてみるとあれが足りないこの記法が違うとめちゃくちゃ怒られる。
慣れたら書いた方がはやいというけど、慣れるまで大変そうだなぁ。
バウンダリーでもs3を許可をしたので、s3が表示されるようになった
まあここまでは
グループのポリシーと、バウンダリーのポリシーが一致していないと
権限としては与えられないよ、という教科書通りの動作。
ガバガバ設定時の問題を確認してみる
次に、boundary-testユーザでもバウンダリーの設定がいじれるんじゃないかという点を調査。
以降は全てboundary-testユーザでログインして操作を行う。
いったんIAMFullAccessのみに剥がした。
(予期しないエラーはCroudTrailに権限ふってないことによる表示)
試しに、EC2FullAccessポリシーをグループにアタッチしてみる。
IAMFullAccessがあるのでアタッチは当然できる。
ただしパーミッションバウンダリーのほうは設定してないのでEC2の様子は見れない。
ここまでも想定通り。
さて、パーミッションバウンダリーにアタッチしているポリシーを書き換えようとしたところ
怒られたが、よく読むと
ValidatePolicyできないだけで、更新は平然とできてしまった。
EC2にアクセス許可がおりるポリシーができてしまった。
パーミッションバウンダリーの設定をIAMFullAccess単品から
たった今変更したカスタムポリシーに変更してみる。
うう〜ん変更もできてしまった。
というわけでEC2が見えてしまった。
つまり、このままではポリシーいじり放題、
そもそも、パーミッションバウンダリー設定のない権限もったユーザを作れば
なんでもできちゃうことにも気づいてしまった。
まとめ 正しく設定するには
IAMへのアクセスを含んだパーミッションバウンダリーは適当に設定しても意味なし。
抜け道を塞ぐためには、バウンダリーにアタッチするポリシーに以下を全部記述しないといけない。
- ユーザの作成やユーザへのポリシーアタッチデタッチを禁止
- このポリシーは変更禁止
- 自身に付与されているバウンダリーのポリシー削除禁止
- このポリシーをバウンダリーにアタッチしてないロールの作成を禁止
- 絶対にやらせたくない操作を禁止
1〜3は今回試してみて気付けた禁止事項。
4のロールは今回触ってないけど、作る上で当然いるだろうなという理解。
5もわかってるなら書いておくに越したことはない。
そしてこれらをJSONに起こしたものが
スイッチロール先の本番・開発アカウントにてIAMロール、ポリシー、パーミッションバウンダリーを作ってみた | DevelopersIO
とか
Permissions Boundaryによる利用者へのIAM権限移譲と権限昇格の防止 - Qiita
に書かれているように読めた。
じっくり読めばわからんこともないけど、パズルみたい。
実務で使いこなすにはまだちょっと経験が足りないかもしれない。
もうちょっとシンプルにならんかなぁ