信頼ポリシーと権限ポリシーの違いを整理する
AWS の IAMロール を理解するために、誰がロールを引き受けられるかを決める信頼ポリシーと、引き受けたあと何ができるかを決める権限ポリシーの違いを整理する
今日やったこと
- IAMロールにおける信頼ポリシーと権限ポリシーの違いを整理した
- 信頼ポリシーは「誰がこのロールを引き受けてよいか」を決めるものだと確認した
- 権限ポリシーは「このロールを引き受けたあと、何ができるか」を決めるものだと確認した
- 信頼ポリシーで使われる
Principalの意味を整理した - IAMロールを理解するには、「誰が使えるか」と「使ったあと何ができるか」を分けて考える必要があると分かった
学んだこと
IAMロールには2つのポリシーの観点がある
IAMロールを理解するときは、次の2つを分けて考えると分かりやすい。
1. 誰がこのロールを引き受けてよいか
2. このロールを引き受けたあと、何ができるか
1つ目を決めるのが 信頼ポリシー。
2つ目を決めるのが 権限ポリシー。
信頼ポリシーとは
信頼ポリシーは、IAMロールに設定するポリシーで、
誰がこのIAMロールを引き受けてよいか
を決める。
たとえば EC2 にロールを使わせたい場合、信頼ポリシーでは Principal に EC2 サービスを指定する。
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
この例は、
EC2 がこのロールを引き受けてよい
という意味になる。
Principal とは
Principal は、ざっくり言うと、
誰が操作するのか
を表す要素。
信頼ポリシーでは、Principal を見れば「誰がこのロールを引き受けられるのか」が分かる。
たとえば、
"Principal": {
"Service": "ec2.amazonaws.com"
}
なら、EC2 サービスが対象になる。
権限ポリシーとは
権限ポリシーは、
ロールを引き受けたあと、何ができるか
を決めるポリシー。
たとえば、S3 の特定バケットを読み取らせたい場合は、以下のような権限ポリシーを付ける。
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-bucket/*"
}
これは、
example-bucket 配下のオブジェクトを読み取ってよい
という意味になる。
信頼ポリシーと権限ポリシーの違い
整理すると、以下のようになる。
| 種類 | 決めること |
|---|---|
| 信頼ポリシー | 誰がロールを引き受けてよいか |
| 権限ポリシー | 引き受けたあと何ができるか |
つまり、
信頼ポリシー:
誰に使わせるか
権限ポリシー:
使ったあと何を許可するか
という違い。
IAMロールでは、この2つがそろって初めて意味を持つ。
たとえば EC2 から S3 を読みたい場合は、
信頼ポリシー:
EC2 がロールを引き受けてよい
権限ポリシー:
S3 の特定バケットを読んでよい
という両方の設定が必要になる。
信頼ポリシーだけでは、ロールを引き受けたあと何ができるかは決まらない。
逆に、権限ポリシーだけでは、誰がそのロールを使えるかは決まらない。
IAMロールを読むときは、
1. 信頼ポリシーで、誰が引き受けられるかを見る
2. 権限ポリシーで、引き受けたあと何ができるかを見る
という順番で確認すると理解しやすそう。
あいまいなこと
Principalに指定できる値の種類をもう少し整理したいarn:aws:iam::123456789012:rootが正確に何を表すのかをもう少し理解したい- 信頼ポリシーで
Conditionを使うケースを整理したい - 権限ポリシー、リソースベースポリシー、信頼ポリシーの関係をもう少し整理したい
- クロスアカウントで IAMロールを引き受ける場合の流れを確認したい
次にやること
Principalに指定できる値の種類を整理するarn:aws:iam::123456789012:rootの意味を確認する- 信頼ポリシーで
Conditionを使うケースを整理する aws sts assume-roleを手動で実行する方法を確認する- IAM Identity Center とは何かを確認する