cloudpackの開発パートナーさんやプログラム(API/SDK)で、S3(CloudFront)にファイルのアップロードなどの操作を行うことが多々あると思いますが、AWSをフルコントロールできるキーを使う(渡す)のはセキュリティ上よくないので、S3の決まったバケットのみ操作できるIAMアカウントのポリシーを作ってみました。

※今までIAMに関しては、以下にいろいろ書いています。
IAM Command Line Toolkitを使ってELBで利用したSSL証明書の確認
IAMでユーザを作成しAWS Management ConsoleでS3を利用
AWS Management Console (S3)を制限付きで利用
IAMでアカウントを作成するときの流れ

対象バケットをsuz-lab、対象グループもsuz-labとすると、
下記のコマンドで上記のポリシーが作成できます。

▼ バケット一覧の表示

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy01 
> -a s3:ListAllMyBuckets 
> -e Allow 
> -r arn:aws:s3:::*

▼ バケットの中身を表示

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy02 
> -a s3:ListBucket 
> -e Allow 
> -r arn:aws:s3:::suz-lab
$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy03 
> -a s3:GetBucketLocation 
> -e Allow 
> -r arn:aws:s3:::suz-lab

▼ ファイルの取得

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy04 
> -a s3:GetObject 
> -e Allow 
> -r arn:aws:s3:::suz-lab/*

▼ ファイル/フォルダの削除

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy05 
> -a s3:DeleteObject 
> -e Allow 
> -r arn:aws:s3:::suz-lab/*

▼ ファイルのアップロード/フォルダの作成

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy06 
> -a s3:PutObject 
> -e Allow 
> -r arn:aws:s3:::suz-lab/*

▼ パーミッションの取得

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy07 
> -a s3:GetObjectAcl 
> -e Allow 
> -r arn:aws:s3:::suz-lab/*

▼ パーミッションの設定

$ iam-groupaddpolicy --aws-credential-file credentials.txt 
> -g suz-lab 
> -p policy08 
> -a s3:PutObjectAcl 
> -e Allow 
> -r arn:aws:s3:::suz-lab/*

他にもいろいろとアクションはありますが、こんな感じで問題ないと思います。
詳しくはこちらのAWS Policy Generatorでどうぞ。

これからは、API利用するときも専用の制限付きユーザ作って、
そのキーを使おうと思います。

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