IAM PassRoleについて理解する(なんとなく)
AWSを使ってるとなんとなくしかわかっていないIAMのPassRole
IAM: 特定の AWS サービスに IAM ロールを渡す - AWS Identity and Access Management
安定のクラメソさんと公式の一部
まず。何となくEC2とRDSで運用。みたいな感じだとそのサーバーがアクセスしたいリソースへのアクセス権をアタッチしておくのがIAM Roleという理解。 「EC2からS3へアクセスしたい」とかが良い例。
んで。クラメソさんのEC2の例だと。 何かしらの理由で自由にEC2へアタッチされるRoleが選ばれると困るから「EC2へアタッチできるRoleはこのロールだけね」って感じの設定をしてるんだと思う。
大前提としてPassRoleしてないサービスへはRoleは付与できないと言う事なのかな。
んで。
次の例として出してるCodePipelineの例。
AWSCodePipelineFullAccess
{ "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::*:role/service-role/cwe-role-*" ], "Condition": { "StringEquals": { "iam:PassedToService": [ "events.amazonaws.com" ] } } }, { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "codepipeline.amazonaws.com" ] } } },
自分のIAMから同じのをコピってきた。 まず下段の
"Resource": "*", "codepipeline.amazonaws.com"
これでこのポリシーをアタッチされたCodePipelineリソース自身がCodePipelineリソースへのアクセス権(作成とか削除とか)を持つことになる。 (当たり前すぎて逆に混乱するのだがそう言うこと)
そして上段側の
"arn:aws:iam::*:role/service-role/cwe-role-*" "events.amazonaws.com"
これによってアタッチされたCodePipelineリソースがイベントブリッジにアタッチできるロールはワイルドカードで指定されているようなroleのみとなる。
何となくGlueとかLambdaとかでもこの辺が出てくるのだが。 使いたいサービスが他のサービスに依存しているときに(CloudWatchとかS3とか)、 GlueサービスとかLambdaサービスのリソースにアタッチされているRoleにcloudwatchとかの作成や修正の権限が無いと動かせない。
って事なのかなと理解してる。
違ってたら修正したい。
次はAssumeRole