こんにちは。AWS CLIが好きな福島です。
はじめに
突然ですが、IAMポリシーは、JSONで表示および設定することができますが、 JSONで書かれているとなんとなく難しく感じ、敬遠している方もいるのではないでしょうか。
実は、JSON表記の見方はそんなに難しくなく、IAMの詳細は把握する上では、JSONの見方を理解する必要がありますし、 IAMポリシーを設定する場合、JSONでやった方が楽だと思っています。
ということで、今回は、IAMポリシー(JSON)の見方をご紹介いたします。
JSONの見方
今回は、以下のEC2のフルアクセス権限を持ったIAMポリシーのJSONを基に見方をご説明いたします。 ※今回は、よく使う要素(Sid,Effect,Action,Resource,Condition)を簡単にご紹介します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EC2FullAccess", "Effect": "Allow", "Action": "ec2:*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789123:user/fk-iam-user" } } ] }
固定の記述
まず、以下の部分は固定の記述なので、説明は割愛します。 ちなみにですが、Versionの部分は、「"2012-10-17"」と固定です。 IAMポリシーを作成した日付を入力しないように注意してください。
{ "Version": "2012-10-17", "Statement": [ ★ここの中身が大事 ] }
大事なのは、Statementの中身(上記、★の箇所)になります。
{ "Sid": "EC2FullAccess", "Effect": "Allow", "Action": "ec2:*", "Resource": "*" "Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789123:user/fk-iam-user" } }
この中身をさらに分割して説明します。
Sid
"Sid": "EC2FullAccess",
Sidは、任意の設定となります。設定しなくても問題ないのですが、設定する場合、IAMポリシーの説明を記載するのが一般的です。
Effect
"Effect": "Allow",
Effenctには、AllowまたはDenyを設定します。 この設定により、この後説明するActionを許可(Allow)するのか、 拒否(Deny)するのか、設定することができます。
Action
"Action": "ec2:*",
ここには、名前の通り、Actionの設定を行います。 Actionに設定する値(ec2:*の部分)は、「①:②」の構成になっております。 ①には、サービス名が入ります。 EC2の場合ec2、RDSの場合rds、IAMの場合iam、とサービスごとに決まっています。
②にはサービスごとのアクションを設定します。 どんなアクションを記載できるかは、以下のドキュメントを参照ください。 全てのアクションを許可する場合は、上記のように「*」を使います。
Amazon EC2 のアクション、リソース、および条件キー - サービス認証リファレンス
ドキュメントの見方としては、以下画像の赤枠で閲覧したいサービスを選択します。 そして、中間あたりに緑枠のようにアクションの一覧が載っているため、そこを参照します。
また、各サービスページの上部には、以下のように①に設定するプレフィックスが記載されています。
Resource
Actionで設定した操作を適用できるリソース(範囲)を設定することができます。
"Resource": "*"
リソースに設定できる値は、設定できるアクションが載っているページと同じページ(以下のURL)に記載があります。 Actionによっては、リソース(範囲)を絞ることができないこともあるため、注意が必要です。
Amazon EC2 のアクション、リソース、および条件キー - サービス認証リファレンス
Condition
Conditionは、条件を絞りたい場合に設定します。(任意の値のため、設定しなくても問題ないです。) 例えば、今回の場合、123456789123というAWSアカウントのfk-iam-user(IAMユーザー)のみがEC2のフルアクセス権限を持ちます。 そのため、fk-iam-user以外にポリシーを割り当てても、EC2のフルアクセス権限は与えられません。
"Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789123:user/fk-iam-user" }
Conditionに設定できる値は、複数あるため、詳細は以下を参考にしてください。
IAM JSON ポリシーの要素: Condition - AWS Identity and Access Management
終わりに
今回は、IAMポリシー(JSON)の見方をご説明しました。 どなたかのお役に立てれば、幸いです。