AWS IAMポリシーを徹底的に調べる

AWS IAMポリシーを徹底的に調べる

IAMポリシーは何となくとっつきにくい感じがあります。

ということで徹底的に調べてビジュアルエディターではなくJSONで書いてみます。

AWSはいつからかビジュアルエディターも用意してくれていますが、根本を理解するためにJSONで書いてみたいと思います。

バージョンを指定する

ポリシーで明示的にアクセスポリシー言語の「2012-10-17」バージョンを指定する必要があります。

アクセスポリシー言語のデフォルトバージョン (2008-10-17) では、ポリシー変数をサポートしていません。

“Statement”: []の中にJSONオブジェクトで記述する

「”Statement”: []」はステートメント配列って言います。この中にJSONオブジェクトを格納していきます。

サンプル

{
  "Version": "2012-10-17",
  "Statement": []
}

Sidとは

SidとはステートメントIDのことで、ポリシードキュメントに与える任意の識別子です。

JSONポリシー内で固有であればSid値はなんでも構いません。

Effectとは

Effectエレメントは必須項目です。ステートメントの結果を許可または明示的な拒否のどちらにするかを指定します。

“Allow”、または、”Deny”のどちらかを指定します。

Actionとは

Actionエレメントは、必須ではありませんが指定しない場合はNotActionエレメントを指定する必要があります。

以下、Actionエレメントの例です。

"Action": "sqs:SendMessage"

複数指定する場合は配列で指定することができます。

"Action": [ "sqs:SendMessage", "sqs:ReceiveMessage"]

ワイルドカードが使用できる

上記例の通り、sqsには複数のActionがあります。これを全て指定する場合は「*」を使用します。

"Action": "sqs:*"

IAMポリシーは、どのエンティティ(AWSサービス)に対してどのアクションを許可・拒否するかをJSON形式で定義したものです。

試しに書くと以下のような感じです。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"sns:Publish"
],
"Resource": "*"
}
]
}

IAMロールとは

IAMロールとは、どのエンティティ(AWSサービス)に権限を付与するためのIAMオブジェクトになります。ユーザやグループは関係ありません。

例えばLambdaからDynamoDBにアクセスする場合は、IAMロールはLambdaにアタッチしておく必要があります。

IAM JSON ポリシーエレメント参考サイト

コメント

タイトルとURLをコピーしました