こんにちは。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)の見方をご説明しました。 どなたかのお役に立てれば、幸いです。