Identity Based PolicyとResource Based Policyの違いと使い分け
概要
AWSのポリシーの付与の仕方にIdentity based policyとResource based policyがあります。
これら2つの関係性と使い分けについてまとめます。
この記事で解説すること
- Identity / Resource based policyの違い
- Identity / Resource based policyの論理評価の仕組み
- Identity / Resource based policyの使い分け
Identity / Resource based policyの違い
Identity | Resource | |
---|---|---|
アタッチできるリソース | IAM系のリソース | SQS,S3,KMSなどの特定のAWSリソース |
ポリシーのアタッチ先と権限付与先が同一か? | Yes | No |
Inline policyのみ? | No | Yes |
ポリシーのアタッチ先と権限付与先
例えばS3のバケットポリシーに以下のようなポリシーを書くと、hoge-userに対してs3:PutObjectを許可するという意味になります。
このようにポリシーのアタッチ先(S3)と権限の付与先(hoge-user)が異なっているのがResource based policyの特徴です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddCannedAcl",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:hoge-user",
]
},
"Action": [
"s3:PutObject"
],
}
]
}
Resource based policyはinline policyのみ
Resouce based policyはinline policyしか付与できないため、S3バケットA,B,Cに対して同じポリシーを適用したい場合、毎回同じinline policyを書く必要があります。
Identity / Resource based policyが同時にある時の論理評価の仕組み
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:hoge-user",
]
},
"Action": [
"s3:PutObject"
],
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Resource": {
"AWS": [
"arn:aws:s3:::examplebucket/*",
]
},
"Action": [
"s3:PutObject"
],
}
]
}
このようにIdentity / Resource based policyがどちらも存在する場合を考えます。
この場合片方が独立して評価されるのではなく一度合体してから評価が行われます。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/images/PolicyEvaluationHorizontal111621.png
そのため上の例でいうと、明示的なDenyステートメントがあるためs3:PutObjectは結果として禁止されます。
Identity / Resource based policyの使い分け
ここまでの話を踏まえて二つのポリシーの使い分けについて考えます。
例えばS3バケットAに対するaアクションをhoge-userに許可したい場合、Identity / Resource based policyのどちらでも実現可能です。
しかし基本的には
- 許可はIdentity based policy
- 拒否はResource based policy
という使い分けにするのが良さそうです。
例えばS3のあるバケットに機微情報を保存しているとします。
この時にうっかりアクセス権を持ったfuga-userが作成されてしまうと機微情報が意図せず漏れてしまいます。
このような事態を確実に防ぐにはS3のresource based policyに特定のアカウント以外からのアクセスをDenyするようなステートメントを書くことで対処可能です。
このことを考えるとResource based policyは明示的な拒否を宣言するために使うようにすると権限管理がスッキリすると思います。
Discussion