S3の特定のバケットおよびキーのファイルの更新のみ可能なIAMユーザー(コンソールアクセスのみ)を作成してみた

2020.11.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、CX事業本部の若槻です。

今回は、S3の特定のバケットおよびキー(プレフィックスおよびファイル名)のファイルの更新のみ可能なIAMユーザー(コンソールアクセスのみ)を作成してみました。

概要

本記事では次の手順を紹介します。

  • 管理者による操作
    • IAMユーザーの作成
  • ユーザーによる操作
    • AWSコンソールからサインインしてS3にアクセスし、特定のバケット、プレフィックス(フォルダ)にある特定のファイルの更新を行う

image

管理者による操作

IAMユーザーの作成

my-bucketというS3バケット内のfolder1というフォルダ配下のdata.csvという名前のファイルの更新のみ可能なIAMユーザーを作成します。

まず、IAMユーザーにアタッチするポリシーをを定義したファイルを作成します。

% touch policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowStatement1",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Sid": "AllowStatement2",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:prefix": [
                        "",
                        "folder1"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement3",
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "folder1/*"
                    ]
                }
            }
        },
        {
            "Sid": "AllowStatement4",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/folder1/data.csv"
            ]
        }
    ]
}

IAMユーザーを作成します。

% aws iam create-user --user-name folder1-data-user

IAMユーザーにインラインポリシーをアタッチします。

% aws iam put-user-policy --user-name folder1-data-user --policy-name folder1-data-policy --policy-document file://policy.json

IAMユーザーのログインプロファイルを作成します。

% aws iam create-login-profile --user-name folder1-data-user --password $password --password-reset-required

ユーザーへの情報通知

次の情報をユーザーへ通知します。

  • コンソールのサインインURL:https://<Account ID>.signin.aws.amazon.com/console
  • ユーザー名:folder1-data-user
  • パスワード:$password

ユーザーによる操作

IAMユーザーを使用してS3上のファイルを更新する

通知されたサインインURLhttps://<Account ID>.signin.aws.amazon.com/consoleにアクセスします。

サインイン画面が開くので、通知されたユーザー名とパスワードを入力して[サインイン]をクリックします。 image

パスワード変更画面が開くので、古いパスワードと新しいパスワードを指定して[パスワード変更の確認]をクリックします。 image

サインインできました。[サービス]を開きます。 image

サービス一覧から[S3]を選択します。 image

バケット一覧が表示されるので、目的のバケットをクリックして開きます。 image

フォルダ一覧が表示されるので、目的のフォルダをクリックして開きます。 image

フォルダの内容が表示されます。[アップロード]をクリックします。 image

[ファイルを追加]をクリックします。 image

ローカルにある目的のファイルを開きます。 image

アップロード対象の一覧に開いたファイルが追加されます。[アップロード]をクリックします。 image

[アップロードに成功しました]と表示されたらアップロードは成功です。 image

同名のファイルが既にフォルダ内にアップロードされている場合でも、アップロードは可能です。

許可されていない操作を試してみる

未許可のバケットに対する操作

ポリシーで許可されていないバケットをバケット一覧でクリックして開きます。 image

バケットに対するすべての操作が実行不可となっています。 image

未許可のフォルダに対する操作

ポリシーで許可されているバケット内で、未許可のフォルダをクリックして開きます。 image

フォルダに対するすべての操作が実行不可となっています。 image

フォルダの作成

ポリシーで許可されているフォルダ内でのフォルダ作成は実行不可となっています。 image

ファイルのダウンロード

ポリシーで許可されているファイルのダウンロードを試してみます。 image

ダウンロードが拒否されました。 image

未許可のファイル名のファイルのアップロード

ポリシーで許可されているフォルダへ、未許可のファイル名のファイルをアップロードは拒否されました。 image

おわりに

S3の特定キー(プレフィックスおよびファイル名)のファイルの更新のみ可能なIAMユーザー(コンソールアクセスのみ)を作成してみました。

ワーカーユーザーに定期的なS3へのファイルアップロードをお願いしたい時などに便利ですね。

参考

以上