7月からインフラの案件に参画しておりますが、今まで理解が不十分だったIAM部分の整理をしてみたいと思います。
権限の考え方について
AWSでは基本的にあるリソースへのなんらかの行為の許可をポリシーという形で定義しています。
実態としては以下のようなJSONなのですが、
Resource: 実際にActionを許可する対象
Action: 許可(or拒否)する対象
となります。
下記の例で言うと(arn:aws:ec2:region:account-id:instance/instance-id
) にたいして、EC2の開始と停止を許可する、と言う意味になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": [ "arn:aws:ec2:region:account-id:instance/instance-id" ] } ] } |
基本的にはこういったポシリー(行為の許可)を特定のロール(役割)に付与させる、というのがAWSの権限管理になるかと思います。
(一部バケットポリシーなどリソースに直接付与するタイプのものもあります。)
信頼ポリシーとは
あるリソースがロールを引き受ける場合、ロールを引き受けることができることに対するポリシーが必要になります。(ロール引き受け自体がActionということでしょう・・)
この際、使われるのが「信頼ポリシー」というもので、以下のような形で定義されます。
1 2 3 4 5 6 7 8 9 10 11 12 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } |
これにより、lambdaに任意のロールを付与することができるようになります。
信頼ポリシーはいろいろと難しいので、説明リンクを・・・
【PART11 IAMロール】ぜんぜんわからなかったIAMについてまとめてみました
【覚え書き】実装で学ぶIAMポリシーとIAMロールとAssumeRole
lambdaになんらかの権限を持たせる場合、
信頼ポリシー+なんらかの任意のaction→これらのポリシーが付与されたロールを作成→lambdaに付与、といった流れになるかと思います。
サービスロールとは
少し似た概念としてサービスロールを。
特定のAWSリソースが使用するために作成されたポリシーがサービスポリシーになります。