【AWS】基本的なIAMポリシーのjsonの書き方

投稿 2024年12月1日

更新 2024年12月1日

専門用語の数:

【AWS】基本的なIAMポリシーのjsonの書き方

~ 目次 ~

前置き

Json構成

パターン紹介

まとめ

前置き

今回はIAMポリシーの基本的な書き方や、便利な書き方をご紹介していきます。

ビジュアル

IAMポリシーはJsonを直接触らなくとも、ある程度は視覚的にわかりやすく
ポリシーを作れる画面を用意してくれています。

サービス選択 アクションとリソース

ただし、柔軟な条件や込み入った設定はできないため、
状況に応じてご使用くださればと思います。

Json構成

ざっくりJsonの構成は下記のようになっています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    }
  ]
}

Version

記事を書いている時点では「2012-10-17」が最新です。

このバージョンにより、使える機能が変わってきますので、気を付けましょう。

基本的には最新のバージョンを使用しましょう。

Statement

Sid

Json内で一意のIDです。
英数字のみで、省略可能です。


そこまで深い意味はなく、名前のような感覚で差し支えないと思います。

Effect

Actionで指定したコマンドを、
「Allow」or「Deny」で許可するか拒否するかを指定します。

Action

許可(拒否)したいコマンド(行動)を指定します。


「s3:DeleteObject*」のようにアスタリスクを使うことで、
0文字以上のあいまいな指定をすることも可能です。


上記の指定の場合、

が該当します。


記載したアクション以外を指定したければ、
ActionではなくNotActionと記載することで実現できます。

Resource

コマンドを行う対象のリソースarnを指定します。


「arn:aws:s3:::test-bucket/*」のようにアスタリスクを使うことで、
0文字以上のあいまいな指定をすることも可能です。


上記の指定の場合は、test-bucketの中のすべてのオブジェクトが指定されます。


記載したリソース以外を指定したければ、
ResourceではなくNotResourceと記載することで実現できます。

パターン紹介

S3の特定オブジェクトのみの取得権限を与える

バケットの中身は見せずに、シンプルに特定のオブジェクトだけを共有する際に使用する想定です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::test-bucket/setup.exe"
    }
  ]
}

S3の特定のバケットに閲覧権限を与える

バケットの中身も見せるが、指定したバケットの中身しか見れない権限です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:s3:::test-bucket",
        "arn:aws:s3:::test-bucket/*",
        "arn:aws:s3:::sample-bucket",
        "arn:aws:s3:::sample-bucket/*"
      ]
    }
  ]
}

リソースが若干ややこしいですが、
arn:aws:s3:::バケット名s3:ListBucketに対するリソース指定で、
arn:aws:s3:::バケット名/*s3:GetObjectに対するリソース指定です。

S3のバケット名に「develop」とついたものに更新権限を与える

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetObject*",
        "s3:PutObject*",
        "s3:DeleteObject*"
      ],
      "Resource": [
        "arn:aws:s3:::*develop*",
        "arn:aws:s3:::*develop*/*"
      ]
    }
  ]
}

S3のバケット名に「production」とついたもの以外に削除権限以外を与える

対象リソースはproductionとつかないバケットで、
対象アクションは削除オブジェクト以外です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "NotAction": [
        "s3:DeleteObject*"
      ],
      "NotResource": [
        "arn:aws:s3:::*production*",
        "arn:aws:s3:::*production*/*"
      ]
    }
  ]
}

まとめ

IAMポリシーの基本的なJsonの書き方を紹介しました。

まだまだ応用的な使い方ができますが、凝れば凝るほど難しくなります…。


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)