s3で指定したフォルダー配下だけ触れるポリシーを作成した。

今回はIAMを使って、ユーザーとポリシーを作ってみました。

内容としては特定のファイル、フォルダーにしかアクセスできないポリシーを作ります。そのポリシーを作成したユーザに割り当てます。

IAMとは

IAMとはAWSリソースへのアクセスを管理するためのサービスになっています。

ユーザを作成したり、グループを作成したり、各ユーザに対応したポリシー等を設定することができます。

↓公式ドキュメントより
IAMとは

今回やりたいこと

簡単に言えばアップロード専用のユーザを作成します。また、特定のフォルダ、ファイルにしかアクセスできないようにしたいので、その辺の設定方法とか共有していきます。

今回の流れ↓

  1. ポリシーの作成
  2. ユーザの作成
  3. アクセスの確認

ポリシーの作成

では早速ポリシーを作っていきましょう!

マネジメントコンソールから「IAM」を検索。ポリシーを選択してポリシーを作成していきます。

ポリシーを作成

今回はjsonを使ってポリシーを作っていきますね。

ではプログラムを書いていきます!

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowUsersToAccessFolder2Only",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject*",
                "s3:PutObject*",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::バケット名/フォルダ名_test/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket*",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::バケット名"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "バケット配下のフォルダ名_test/*"
                    ]
                }
            }
        }
    ]
}
Code language: JSON / JSON with Comments (json)

こんな感じのプログラムになります。

↓公式ドキュメントより参考
特定のバケットまたはフォルダに対する Amazon S3 コンソールのアクセス権をユーザーに付与するにはどうすればよいですか?

↓一部クラメソさんのブログより
特定のS3のフォルダにのみアクセス権のあるIAMユーザーを使ってCyberduckから参照する

エラーが発生…

The specified value for policyDocument is invalid. It must contain only printable ASCII characters.

はじめこんなエラーが発生しました。

色々調べた結果、日本語が問題だったっポイです。jsonが?日本語に対応していないのかな?

It must contain only printable ASCII characters.

アスキーコードの問題ですよね。
URLエンコード・デコード

urlエンコードしてみたんですが、いまいち解決はできなかった~

結局、指定していたフォルダの名前が日本語で作成されていたので、結局フォルダを新しく作り直して、英語で作成するようになりました。

例)
修正前→ テスト/検証*
修正後→ test/verification*

↑こんな感じで英語表記でファイル、フォルダ名の書き替えを行いました。

これはコピーでささっとやり直しました!

フォルダの中たくさん入っていたら面倒だったかも…

追記! Unicode Escape Sequenceで指定すると解決できる!

解決方法をコメントいただいたので共有しておきます!

解決方法教えていただきありがとうございます!!orzzzz

※追記※

URLエンコードではなくてUnicode Escape Sequenceで指定すれば解決できるようです!

ARNのPathnameに日本語フォルダを利用するには以下のサイトより変換すると解決できます。

https://www.kwonline.org/u_esc_seq.php

プログラムでエラーが起きた時の対処の方法

これはエラーっぽいところを消してみてそれで動くかどうかを試してみる。

これがよさそう。

「当てずっぽうにやるんじゃなくてある程度あたりをつけながらやっていくのが良いです。」

と、先輩から…

最終チェック

ユーザにポリシーの割り当て

ではポリシーを作成したら作成したユーザにポリシーを振ります。

ユーザの追加を選択して、アクセスの種類を選択します。

今回はマネジメントコンソールGUIの画面からを想定しているので「AWSマネジメントコンソールへのアクセス」を選択しますね。

そして「次のステップ」へ

で既存のポリシー(先ほど作成したポリシー)を選択しましょう。

そしてユーザに割り当てたら、キーをつけて完成です!

チェック

作成したポリシーを割り当てたユーザでログインして、本当にs3の特定のフォルダ配下にしかアクセスできないのかチェックしてみましょう。

s3にしかアクセスできないポリシーなので今回はこんな感じのurlからログインできるようにしました。↓

url: https://s3.console.aws.amazon.com/s3/buckets/対象バケット名/フォルダ名

このurlを踏めばそのフォルダまで一気に飛べるようになっています。

まとめ

本来ならささっとできるべきですが、エラーが出て少し時間がかかってしまいました。

エラーが出た時の対処法をしっかり頭に入れながらささっと動けるようになりたい…

AWSを使うにはIAMもしっかり触れないとやばいですね。

ちゃんと勉強していきます。

3 COMMENTS

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA