ざっくりと設定したポリシーを出来るだけ絞り込んで適用し直したいときに
はじめに
CFnでのスタック作成や、aws-cliでのコマンド実行用に、動作優先でざっくりとポリシーを適用したロールを作ることがあるとします。できる限り必要なポリシーのみに絞りこんでおきたいものですが、多量にあるポリシーの絞り込みを実際にやってみると
- ポリシー名がわからない
- 要らないと思ったポリシーが必要だった
ということは頻繁で、妥協案として出来るだけアスタリスクのままになる、という結論になることもあります。
判断材料が何もない状態からのスタートは大変です。公式ドキュメント等参考にしつつ、ある程度の絞り込みを行った過程や利用した資料についてまとめました。
絞り込みを行う際の注意点
検証用のユーザ、ロールあるいはポリシーを作る
事故防止に備えます。ついでにCFnテンプレート化しておくと便利かもしれません。
CloudFormationスタック経由時のDeleteポリシー
ロールバック時にはDelete系のポリシーが求められます。危ないからと無条件で外すとロールバックが正常に動作しなくなる可能性があります。
公式ドキュメントの管理ポリシー例を模倣する
ゼロから取り掛かると膨大な時間がかかります。サービスによっては管理ポリシーの例が公式ドキュメントにあるため、それをベースに検証しましょう。
ECR
Amazon ECR 管理ポリシー - Amazon ECR
ECS
Amazon ECS 管理ポリシーと信頼関係 - Amazon Elastic Container Service
IAM Policy Simulatorで確認しながら行う
設定したポリシーに対して、実行したいアクションが実施できるかどうかをチェックできます。また、各サービスで設定できるポリシーが一覧化されているのもポイントです。一部末尾省かれてるケースもありますが、該当ポリシー名テキストをコピーすると大体省略なしのテキストで扱えるはずです。
問題は、想定している操作がどんなアクションを伴っているのか分かりにくいケースです。ピックアップ実行してエラーが確認できたら更に追加等の地道な繰り返しを行うか、割り切ってアスタリスクで設定するの2択になると思います。
注意点として、対象となるサービスは省略なしのフルで記載されていますが、EC2 についてはElastic Compute Cloudでの記載になっていません。また、見るのみで長時間操作しなかった場合はセッション切れでログインが必要になる可能性が高いです。
要点絞り込みでざっくり決める
公式ドキュメントのポリシー例も、全てのサービスで記載されているかどうかは未確認で、Simulatorでの操作もなかなかの時間がかかります。割り切ってしまえる場合は以下の順の検証も手です。
- 丸ごとアスタリスクされている状態をなくす(例:
ec2:*
) - Get、List、Describe系の読み取り系ポリシーをアスタリスク込で追加する(例:
ec2:Get*
) - 作成することが判っている対象のCreate系ポリシーを追加する(例:
ec2:CreateSubnet
) - Cfnの場合はロールバック用に、追加したものに絞ってDelete系を追加する(例:
ec2:DeleteSubnet
) - 各サービス特有のアクションが必要な場合に関連すると予想できるポリシーを追加する
CFnでChangeSetを利用する場合はcloudformation:ExecuteChangeSet
を忘れずに設定しましょう。
あとがき
無用な権限は極力有効にはしたくないものですが、実際に動作してみないと何が必要なのか分からないという状況はよくあります。一度に全ポリシーの最適化を試みずに、必要に応じて段階的に行う手もありだと思います。
また、CFnで組み立てているケースで本番環境が存在する場合、先ずは事故防止として本番環境に対して削除保護を有効にしておきましょう。