LoginSignup
8
7

More than 1 year has passed since last update.

AWS S3の特定bucketにCLIやAPIでアクセスする設定

Last updated at Posted at 2021-09-13

AWS S3の特定のbucketに、CLIやAPIからアクセスキーIDとシークレットアクセスキーでアクセスする設定を行います。

全体像は以下のようなイメージです。まず、s3testwsというバケットをつくります。そしてs3testwsuserというユーザーをつくり、アクセスキーIDとシークレットアクセスキーを生成します。
そして、バケットポリシーでこのバケットs3testwsに対してユーザーs3testwsuserのアクセス権限を付与します。

image.png

1 バケットの作成

以下のようにバケットを作成します。リージョンはap-northeast-1を選び、パブリックアクセスをすべてブロックしています。
image.png

テスト用にtest.csvというファイルをアップロードしておきました。
image.png

2 ユーザーの作成

以下のようにユーザーを作成します。「プログラムによるアクセス」にチェックをいれて、アクセスキーIDとシークレットアクセスキーを生成します。
image.png

グループやアクセス権限、タグは設定なしで構いません。

image.png

アクセスキーIDとシークレットアクセスキーをメモしておきます。

image.png

AWS CLIからアクセスしてみます。この時点では権限がないのでアクセスできないはずです。
aws configure --profile s3testwsuser

先ほどのアクセスキーIDとシークレットアクセスキーを設定し、リージョンはap-northeast-1に設定します。

C:\temp>aws configure --profile s3testwsuser
AWS Access Key ID [None]: AXXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json

まだアクセス権限を与えていないので、s3://s3testwsをlsすると失敗します。

C:\temp>aws s3 ls --profile s3testwsuser s3://s3testws
An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

次にバケットポリシーを設定していきますが、その前にこのユーザーのARNをメモしておきます。
arn:aws:iam::0xxxxxxxxxxxxx:user/s3testwsuserというような文字列です。

image.png

3.バケットポリシーの設定

バケットポリシーでs3testwsuserにアクセス権限を与えます。
バケットの「アクセス許可」タブの「バケットポリシー」を編集します。
image.png

以下のjsonで設定をします。

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "statement1",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam:0xxxxxxxxxxx:user/s3testwsuser"
         },
         "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::s3testws"
         ]
      },
      {
         "Sid": "statement2",
         "Effect": "Allow",
         "Principal": {
            "AWS": "arn:aws:iam::0xxxxxxxxxxx:user/s3testwsuser"
         },
         "Action": [
             "s3:GetObject",
             "s3:PutObject"
         ],
         "Resource": [
            "arn:aws:s3:::s3testws/*"
         ]
      }
   ]
}

statement1でユーザーs3testwsuserにバケットs3testwsに対するGetBucketLocationとListBucketを付与しています。これでバケット内をls可能になります。
statement2でユーザーs3testwsuserにバケットs3testws内のすべてのオブジェクトに対するGetObjectとPutObjectを付与しています。これでバケット内のファイルのアップロード、ダウンロードが可能になります。

image.png

この設定ができるとaws cliでバケット内のls、get、putが可能になります。

ls
C:\temp\s3test>aws s3 ls --profile s3testwsuser s3://s3testws
2021-09-13 10:39:38         32 test.csv
get
C:\temp\s3test>aws s3 cp --profile s3testwsuser s3://s3testws/test.csv ./
download: s3://s3testws/test.csv to .\test.csv

C:\temp\s3test>dir
 ドライブ C のボリューム ラベルは Windows です
 ボリューム シリアル番号は A0A9-D574 です

 C:\temp\s3test のディレクトリ

2021/09/13  11:15    <DIR>          .
2021/09/13  11:15    <DIR>          ..
2021/09/13  10:39                32 test.csv
               1 個のファイル                  32 バイト
               2 個のディレクトリ  38,611,513,344 バイトの空き領域
put
C:\temp\s3test>aws s3 cp --profile s3testwsuser test.csv s3://s3testws/test2.csv
upload: .\test.csv to s3://s3testws/test2.csv

C:\temp\s3test>aws s3 ls --profile s3testwsuser s3://s3testws
2021-09-13 10:39:38         32 test.csv
2021-09-13 11:16:18         32 test2.csv

4 参考

Amazon IAM編 S3バケット内特定フォルダだけ操作するIAMポリシー – ナレコムAWSレシピ | AIに強い情報サイト

Bucket policy examples - Amazon Simple Storage Service

AWS CLIでS3を操作するコマンド一覧 - Qiita

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7