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ロールにどのような権限が付与されているか確認してみましょう。
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ユーザーやグループの場合もコマンドの読み替えでできそうですね。