S3初心者向け『例 1: バケット所有者がユーザーにバケットのアクセス許可を付与』をやってみた

2019.08.21

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

概要

大阪オフィスのちゃだいんです。

手を動かして学ぶために、公式ドキュメントのチュートリアルをやってみました。

今回は、Amazon S3です。内容は以下のものです。

例 1: バケット所有者がユーザーにバケットのアクセス許可を付与 - Amazon Simple Storage Service

この演習では、AWS アカウントがバケットを所有し、アカウントに IAM ユーザーが存在します。ユーザーはデフォルトでは何のアクセス許可も持ちません。ユーザーが何らかのタスクを実行するには、親アカウントがそのためのアクセス許可をユーザーに付与する必要があります。バケット所有者とユーザーが属する親アカウントは同じです。したがって、AWS アカウントは、バケットポリシー、ユーザーポリシー、またはその両方を使用して、バケットへのアクセス許可をユーザーに付与できます。一部のアクセス許可はバケットポリシーを使用し、他のアクセス許可はユーザーポリシーを使用して付与します。

前提条件

AWS CLIが使用できる環境で行ってます。

早速やってみた

1.S3バケット と IAMユーザー を作成する

  • まずはS3バケットを作成します。

- 基本追加設定を入れずにシンプルなバケット190820testbucketを作成しました。

  • 次に、IAMユーザーのtutorialuserを作成します。

  • アクセス許可の設定では、一旦何もせずに次に進めます。

  • 作成前の確認画面では「このユーザーにはアクセス権限がありません」と表示されていてOKです。

  • IAMユーザーが作成できました。

2.アクセス許可を与える

  • ここでは、S3バケットにバケットポリシーを追加し、IAMユーザーにインラインポリシーを追加してアクセス許可を与えます。

  • まずは、S3バケットにバケットポリシーを付与します。

  • S3コンソールから見ると今はまだ空の状態です。

  • ドキュメントに記載のものを一部変更してます。AWSアカウントはダミーで123456789012、IAMユーザー名をtutorialuser、バケット名を190821testbucketにしています。
{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "statement1",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/tutorialuser"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::190821testbucket"
         ]
      },
      {
         "Sid": "statement2",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::123456789012:user/tutorialuser"
         },
         "Action": [
             "s3:GetObject"
         ],
         "Resource": [
            "arn:aws:s3:::190821testbucket/*"
         ]
      }
   ]
}
  • こんな感じで挿入できました。

  • 次はIAMユーザーのインラインポリシーです。

  • ドキュメントに記載のものを一部変更してます。バケット名を190821testbucketにしています。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "PermissionForObjectOperations",
         "Effect": "Allow",
         "Action": [
            "s3:PutObject"
         ],
         "Resource": [
            "arn:aws:s3:::190821testbucket/*"
         ]
      }
   ]
}
  • 登録するとこんな感じになりました。

  • ポリシーの名前はtutorialusers3accessと付けます。

3.アクセス許可をテストする

  • 準備は整いましたのでテストしてみます。

  • まずは~/.aws/credentialsの設定ファイルにtutorialuserのプロファイルを追加します。(***はダミーです)

[profile tutorialuser]
aws_access_key_id = ***********
aws_secret_access_key = ***************
region = ap-northeast-1
  • 次に、s3api put-objectコマンドを実行して、画像ファイルがアップロードされるか確認します。

  • ちなみに対象の画像はカレーの画像です。ここ最近食べた中で一番辛かったです。

  • CLIコマンドはこちらです。
$ aws s3api put-object --bucket 190821testbucket --key TooHotCurry.jpg --body TooHotCurry.jpg --profile tutorialuser --region ap-northeast-1
  • すると、ちゃんと画像がアップロードされました。

感想

今回は、初心者向けの中でもかなり簡単な方のチュートリアルだったと思います。S3は奥が深いので、他のものも一通りやってみたいと感じました。

誰かのお役に立てば幸いです。それではまた、大阪オフィスのちゃだいんでした。