LoginSignup
3
1

More than 1 year has passed since last update.

IAMロールに付与されているポリシー、ポリシーに付与されている権限をAWS CLIで確認したい

Last updated at Posted at 2021-02-22

What's?

「IAMロール(にアタッチしたポリシー)に付与されている権限って、なんでしたっけ?」というのを、AWS CLIで確認する方法がよくわからなくなるので。

軽くまとめておこうと。

  • ロールを指定する時はロール名で
  • ポリシーを指定する時はポリシーのARNとバージョンで

というのがポイントですね。

環境

今回の環境は、こちらです。

$ aws --version
aws-cli/2.1.27 Python/3.7.3 Linux/5.4.0-65-generic exe/x86_64.ubuntu.20 prompt/off

お題

Amazon ECSのAWSServiceRoleForECSサービスロールをお題にして、このIAMロールにどのような権限が付与されているか確認してみましょう。

Amazon ECS 用のサービスにリンクされたロール

IAMロール自体は、aws iam get-roleで、--role-nameでIAMロール名を指定して取得します。

$ aws iam get-role --role-name AWSServiceRoleForECS
{
    "Role": {
        "Path": "/aws-service-role/ecs.amazonaws.com/",
        "RoleName": "AWSServiceRoleForECS",
        "RoleId": "AROATMCUPBCTB3GEPWE6A",
        "Arn": "arn:aws:iam::[AWSアカウントID]:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS",
        "CreateDate": "2020-07-08T21:38:15+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ecs.amazonaws.com"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        },
        "Description": "Role to enable Amazon ECS to manage your cluster.",
        "MaxSessionDuration": 3600,
        "RoleLastUsed": {
            "LastUsedDate": "2021-02-19T06:17:42+00:00",
            "Region": "ap-northeast-1"
        }
    }
}

ですが、これではどのようなポリシーがアタッチされているかは確認できません。

IAMロールにアタッチされているポリシーを取得するには、aws iam list-attached-role-policiesを使い、--role-nameでIAMロール名を指定します。

$ aws iam list-attached-role-policies --role-name AWSServiceRoleForECS
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonECSServiceRolePolicy",
            "PolicyArn": "arn:aws:iam::aws:policy/aws-service-role/AmazonECSServiceRolePolicy"
        }
    ]
}

これで、IAMロールにアタッチされているポリシーがわかります。

ポリシーの内容を取得するには、aws iam get-policy--policy-arnにポリシーのARNを指定します。

$ aws iam get-policy --policy-arn arn:aws:iam::aws:policy/aws-service-role/AmazonECSServiceRolePolicy
{
    "Policy": {
        "PolicyName": "AmazonECSServiceRolePolicy",
        "PolicyId": "ANPAIVUWKCAI7URU4WUEI",
        "Arn": "arn:aws:iam::aws:policy/aws-service-role/AmazonECSServiceRolePolicy",
        "Path": "/aws-service-role/",
        "DefaultVersionId": "v8",
        "AttachmentCount": 1,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "Description": "Policy to enable Amazon ECS to manage your cluster.",
        "CreateDate": "2017-10-14T01:18:58+00:00",
        "UpdateDate": "2021-01-13T20:04:13+00:00",
        "Tags": []
    }
}

このコマンドでは、ポリシーに付与されている権限はわかりません。ですが、このコマンドで得られるDefaultVersionIdは必要です。

最後。aws iam get-policy-versionで、--policy-arnでポリシーのARN、--version-idにポリシーのバージョンIDを指定することで、ポリシーの内容を表示できます。

$ aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/aws-service-role/AmazonECSServiceRolePolicy --version-id v8
{
    "PolicyVersion": {
        "Document": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "ECSTaskManagement",
                    "Effect": "Allow",
                    "Action": [
                        "ec2:AttachNetworkInterface",
                        "ec2:CreateNetworkInterface",
                        "ec2:CreateNetworkInterfacePermission",
                        "ec2:DeleteNetworkInterface",
                        "ec2:DeleteNetworkInterfacePermission",
                        "ec2:Describe*",
                        "ec2:DetachNetworkInterface",
                        "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
                        "elasticloadbalancing:DeregisterTargets",
                        "elasticloadbalancing:Describe*",
                        "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
                        "elasticloadbalancing:RegisterTargets",
                        "route53:ChangeResourceRecordSets",
                        "route53:CreateHealthCheck",
                        "route53:DeleteHealthCheck",
                        "route53:Get*",
                        "route53:List*",
                        "route53:UpdateHealthCheck",
                        "servicediscovery:DeregisterInstance",
                        "servicediscovery:Get*",
                        "servicediscovery:List*",
                        "servicediscovery:RegisterInstance",
                        "servicediscovery:UpdateInstanceCustomHealthStatus"
                    ],
                    "Resource": "*"
                },
                {
                    "Sid": "AutoScaling",
                    "Effect": "Allow",
                    "Action": [
                        "autoscaling:Describe*"
                    ],
                    "Resource": "*"
                },
                {
                    "Sid": "AutoScalingManagement",
                    "Effect": "Allow",
                    "Action": [
                        "autoscaling:DeletePolicy",
                        "autoscaling:PutScalingPolicy",
                        "autoscaling:SetInstanceProtection",
                        "autoscaling:UpdateAutoScalingGroup"
                    ],
                    "Resource": "*",
                    "Condition": {
                        "Null": {
                            "autoscaling:ResourceTag/AmazonECSManaged": "false"
                        }
                    }
                },
                {
                    "Sid": "AutoScalingPlanManagement",
                    "Effect": "Allow",
                    "Action": [
                        "autoscaling-plans:CreateScalingPlan",
                        "autoscaling-plans:DeleteScalingPlan",
                        "autoscaling-plans:DescribeScalingPlans"
                    ],
                    "Resource": "*"
                },
                {
                    "Sid": "CWAlarmManagement",
                    "Effect": "Allow",
                    "Action": [
                        "cloudwatch:DeleteAlarms",
                        "cloudwatch:DescribeAlarms",
                        "cloudwatch:PutMetricAlarm"
                    ],
                    "Resource": "arn:aws:cloudwatch:*:*:alarm:*"
                },
                {
                    "Sid": "ECSTagging",
                    "Effect": "Allow",
                    "Action": [
                        "ec2:CreateTags"
                    ],
                    "Resource": "arn:aws:ec2:*:*:network-interface/*"
                },
                {
                    "Sid": "CWLogGroupManagement",
                    "Effect": "Allow",
                    "Action": [
                        "logs:CreateLogGroup",
                        "logs:DescribeLogGroups",
                        "logs:PutRetentionPolicy"
                    ],
                    "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*"
                },
                {
                    "Sid": "CWLogStreamManagement",
                    "Effect": "Allow",
                    "Action": [
                        "logs:CreateLogStream",
                        "logs:DescribeLogStreams",
                        "logs:PutLogEvents"
                    ],
                    "Resource": "arn:aws:logs:*:*:log-group:/aws/ecs/*:log-stream:*"
                },
                {
                    "Sid": "ExecuteCommandSessionManagement",
                    "Effect": "Allow",
                    "Action": [
                        "ssm:DescribeSessions"
                    ],
                    "Resource": "*"
                },
                {
                    "Sid": "ExecuteCommand",
                    "Effect": "Allow",
                    "Action": [
                        "ssm:StartSession"
                    ],
                    "Resource": [
                        "arn:aws:ecs:*:*:task/*",
                        "arn:aws:ssm:*:*:document/AmazonECS-ExecuteInteractiveCommand"
                    ]
                }
            ]
        },
        "VersionId": "v8",
        "IsDefaultVersion": true,
        "CreateDate": "2021-01-13T20:04:13+00:00"
    }
}

ちょっと長いですね。

AWSのマネジメントコンソールで確認したくなります…。

インラインポリシーが含まれる場合は、aws iam get-role-policy--role-name--policy-nameを指定するようです。ここは、ポリシー名でINLINE_POLICYの模様。

つまり、以下のようになります、と。

$ aws iam get-role-policy --role-name [IAMロール名] --policy-name INLINE_POLICY

今回はIAMロールについて見ていきましたが、IAMユーザーやグループの場合もコマンドの読み替えでできそうですね。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1