IAM PassRoleについて理解する(なんとなく)

AWSを使ってるとなんとなくしかわかっていないIAMのPassRole

IAM: 特定の AWS サービスに IAM ロールを渡す - AWS Identity and Access Management

dev.classmethod.jp

dev.classmethod.jp

安定のクラメソさんと公式の一部

まず。何となく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