前回のIAMでユーザを作成しAWS Management ConsoleでS3を利用でも紹介しましたが、
IAMで作成したユーザーは、最初に何もポリシーが定義されてないため、
AWS Management Console (S3)にログインしても、以下のように、何も表示されません。

まずバケット一覧を表示するには、下記のコマンドで、
s3:ListAllMyBuckets アクションを arn:aws:s3:::* に許可します。

$ ./iam-useraddpolicy --aws-credential-file credentials.txt 
> -u suzuki 
> -p policy01 
> -a s3:ListAllMyBuckets 
> -e Allow 
> -r arn:aws:s3:::*

これで、以下のようにバケット一覧が表示されます。

ただしこの状態では、以下のようにバケットの中身を閲覧することはできません。

バケットの中身も閲覧できるようにするには、下記コマンドで、s3:ListBucket アクションと s3:GetBucketLocation アクションを、特定バケット(s3:::us-east-1.emr.suz-lab.com)に許可する必要があります。

※すべてのバケットを閲覧するには、リソースを arn:aws:s3:::* とすればOKです。

$ ./iam-useraddpolicy --aws-credential-file credentials.txt 
> -u suzuki 
> -a s3:ListBucket 
> -e Allow -p test11 
> -r arn:aws:s3:::us-east-1.emr.suz-lab.com

$ ./iam-useraddpolicy --aws-credential-file credentials.txt 
> -u suzuki 
> -p test12 
> -a s3:GetBucketLocation 
> -e Allow 
> -r arn:aws:s3:::us-east-1.emr.suz-lab.com

これで、以下のようにバケットの中身を閲覧することができるようになりました。
(上記コマンドでは他のバケットは閲覧できないままです。)

バケット内のディレクトリも閲覧できます。

ただし、この状態だとファイルのダウンロードができません。
特定ディレクトリ(output)のファイルのみダウンロードしたい場合は、
下記のコマンドで、s3:GetObject を特定ディレクトリ内のファイル
(arn:aws:s3:::us-east-1.emr.suz-lab.com/output/*)に許可する必要があります。

$ ./iam-useraddpolicy --aws-credential-file credentials.txt 
> -u suzuki 
> -p test21 
> -a s3:GetObject 
> -e Allow 
> -r arn:aws:s3:::us-east-1.emr.suz-lab.com/output/*

これで AWS Management Console (S3) での閲覧は、us-east-1.emr.suz-lab.com/ のみ、
ダウンロードは、us-east-1.emr.suz-lab.com/output/ のみ可能なように設定することができました。

他の操作も同様の設定すれば問題ないと思います。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら