ふと思ったこと
遊びでIAMアカウントを友達用に作成し、渡したのですが、いざそのIAMアカウントでリソースにアクセスすると、あらやだ。私が作ったリソースも普通に見られてしまうのです。
...やだというのは感情論に過ぎないのですが、もし仕事で、実際に本番稼働しているシステムのステージングに変更を加えようとしたら、誤って本番を更新しちゃった、なんてことも人間はやってしまうと思い、タイトルのような設定ができないか自由研究をしようと思いました。
理想の状態
理想としては、「あるIAMアカウントは、あるリージョンでしか作業できない」という状態を目指しました。
環境 | リージョン |
---|---|
ステージング | osaka |
本番 | tokyo |
上記の設定ができると、友達にも自分の作業を見られなくて済むなと思い、早速設定してみました。
実際にやってみた結果
まず、jsonポリシーだけでやろうとしましたが、以下のようなシンプルな指定だけだと、実際に構築する際にエラーが多発しました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ec2:*"
],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": "ap-northeast-1"
}
}
}
]
}
結局は「なんちゃらかんちゃらフルアクセス」といったデフォルトでAWSが用意してくれているポリシーをIAMにアタッチしました。
ただ、json側で一部明示的にDenyしてるので、実際にユーザーが他リージョンにアクセスしても、リソースが見られることはありませんでした。
最終的な設定
大まかなリソースごとのリージョン制限はアカウントごとにjsonポリシーを作成し、割り当てました。
そして、構築時にエラーが出ないよう、デフォルトで用意されているポリシーをポチポチ割り当てました。
これで、一旦は目指している状態に近づけることができ、リージョンの異なるIAMからはリソース閲覧ができないようになりました。
今後は、現状だと少し権限が強い部分もあるので、少しずつ権限を狭められる努力をしていきたいと思います。