[AWS] S3を操作するIAM JSON ポリシーのサンプル

  • このエントリーをはてなブックマークに追加
  • LINEで送る
この記事は 2021年7月3日 に書かれたものです

AWSのIAMユーザーごとに権限を設定する場合、最初から用意されているポリシーだけでは十分な制限がかけられません。例えば特定のバケット以外は触らせたくないと言った場合ですね。こういう細かい制御がしたくなったらJSONで定義することになります。

今回はIAM作成時によく利用するJSONのサンプルをメモします。しばらく設定しない期間が続くとよく忘れるので自分用ですw

- Sponsored Link -

基本的な流れとサンプル

設定するまでの道のり

AWSのマネジメントコンソールへログインし、IAMの画面に移動したら「ユーザーを追加」ボタンを押下、ユーザー名を入力したら以下の権限を設定する画面で「既存のポリシーをアタッチ」を選択すると「ポリシーの作成」ボタンが登場するのでこれを押します。

すると新規にウィンドウ(タブ)が立ち上がります。あとは「JSON」タブをクリックすると入力用のテキストエリアが表示されるのでここに入力するだけです。

JSONを入力してポリシーを無事に作成できたら先程のウィンドウ(タブ)は閉じて、元の画面の再読み込みみたいなボタンをクリックして新しいポリシーを読み込むのをお忘れなく(よく忘れますw)

サンプル

ここでは bucket.example.com という名前のバケットに対して設定する例です。//で始まるコメント部分は削除して利用してください。

基本的にはActionで付与する権限を指定し、Resourceで対象とするバケット等を設定できます。

{
    "Version": "2012-10-17",
    "Statement": [
        // バケット一覧を取得
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },

        // バケット内のオブジェクト一覧を取得
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::bucket.example.com"  // このバケットのみ有効
            ]
        },

        // オブジェクトの操作用に特定の権限(Action)を付与する
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
             ],
            "Resource": [
                "arn:aws:s3:::bucket.example.com/*"  // このバケットのみ有効("/*"を忘れずに)
            ]
        }
    ]
}

よく利用するAction一覧

一部だけメモしておきます。すべてのActionはAWSのドキュメントでご確認ください。

バケット

#Action内容
1s3:ListAllMyBucketsバケット一覧を取得
2s3:CreateBucketバケットを作成
3s3:DeleteBucketバケットを削除
4s3:ListBucketバケット内のオブジェクト一覧を取得
5s3:GetBucketAclバケットのACL情報を取得
6s3:PutBucketAclバケットのACLを設定
7s3:GetBucketPolicyバケットポリシーを取得
8s3:PutBucketPolicyバケットポリシーを設定
9s3:DeleteBucketPolicyバケットポリシーを削除
10s3:GetBucketTaggingバケットのタグを取得
11s3:PutBucketTaggingバケットのタグを設定

オブジェクト

#Action内容
1s3:GetObjectオブジェクトを取得
2s3:PutObjectオブジェクトを作成
3s3:DeleteObjectオブジェクトを削除
4s3:GetObjectAclオブジェクトのACL情報を取得
5s3:PutObjectAclオブジェクトのACLを設定
6s3:GetObjectVersion特定バージョンのオブジェクトを取得
7s3:DeleteObjectVersion特定バージョンのオブジェクトを削除
8s3:GetObjectVersionAcl特定バージョンのオブジェクトのACLを取得
9s3:PutObjectVersionAcl特定バージョンのオブジェクトのACLを設定
10s3:GetObjectTaggingオブジェクトのタグを取得
11s3:PutObjectTaggingオブジェクトのタグを設定
12s3:DeleteObjectTaggingオブジェクトのタグを削除
13s3:GetObjectVersionTagging特定バージョンのオブジェクトのタグを取得
14s3:PutObjectVersionTagging特定バージョンのオブジェクトのタグを設定
15s3:DeleteObjectVersionTagging特定バージョンのオブジェクトのタグを削除

その他

すべての権限を付与する

細かくActionを設定するのではなく、全権限を付与する場合はワイルドカードを用います。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket.example.com",
                "arn:aws:s3:::bucket.example.com/*"
            ]
        }
    ]
}

特定のIPアドレスのみ許可する

例えばオフィス内のネットワークからだけ利用したいといった場合ですね。

Conditionで条件指定が出来るのでこれを利用します。以下では「198.51.100.0」と「203.0.113.0/24」に対して許可を与えています。IPv4だけではなくIPv6も指定可能です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket.example.com",
                "arn:aws:s3:::bucket.example.com/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "198.51.100.0",
                        "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}

実際に試してみます。設定済みのIPアドレスでは期待通り動きました。

$ aws s3 ls s3://backet.example.com
                           PRE 2021A/

今度はIPアドレスを変更した上で同じコマンドを実行すると、こちらも期待通り Access Denied となりました。

$ aws s3 ls s3://backet.example.com
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

参考ページ

コメント

コメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。

このブログを応援する

お寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。

PayPal(ペイパル)
PayPalで300円支払う
※金額は任意で変更できます。
※100円でも泣いて喜びますw
※住所の入力欄が現れた場合は「no needed」を選択ください
これまでのご協力者さま
- Sponsored Link -