こんにちは!Narimasaです!
今回は「Amazon IAM編~S3バケット内特定フォルダだけ操作するIAMポリシー~」と題してCloudBerryやCyberduck等からS3バケット内の特定フォルダだけ操作できるIAMポリシーの設定方法を紹介します。
Amazon IAMの基本的な使い方についてはこちらの記事を御覧下さい。
S3バケット内の特定フォルダへのアクセス
容量がほぼ無制限のS3ですが、1アカウントあたりでバケットが100個しか作れないこともあって、バケット内に多数フォルダを設けて使用している方も多いと思います。
しかし、IAMユーザーを管理する場合、特定のフォルダだけ操作させて、他のフォルダを操作させないようポリシーを設定することが望ましいです。
そこで今回は、CloudBerryやCyberduck等の外部ツールからのアクセスを想定したIAMポリシーを紹介します。
IAMポリシー
今回の構成環境は下図の通りとなっています。
そして、バケット内のtest1フォルダのみ操作できるIAMポリシーは以下のものになります。
1{2 "Version": "2012-10-17",3 "Statement": [4 {5 "Effect": "Allow",6 "Action": [7 "s3:ListBucket",8 "s3:GetBucketLocation"9 ],10 "Resource": "arn:aws:s3:::recipe-bucket"11 },12 {13 "Effect": "Allow",14 "Action": [15 "s3:PutObject",16 "s3:GetObject",17 "s3:DeleteObject"18 ],19 "Resource": "arn:aws:s3:::recipe-bucket/test1/*"20 },21 {22 "Effect": "Deny",23 "Action": [24 "s3:PutObject",25 "s3:GetObject",26 "s3:DeleteObject"27 ],28 "NotResource": "arn:aws:s3:::recipe-bucket/test1/*"29 }30 ]31}このIAMポリシーは大きく分けて3つのステートメントで構成されています。
1つ目のステートメントでは、指定されているバケットの情報を取得します。
通常のIAMポリシーであるような、全てのバケットのリストを取得する権限は設定していないため、AWSコンソールから該当のバケットへアクセスするという動作は出来ません。
2つ目のステートメントでは、指定バケットの特定フォルダで行うことができる操作を設定しています。
一方、最後のステートメントで、特定フォルダ外での動作を明示的に拒否しています。
Cyberduckで確認
今回は外部ツールのCyberduckで設定を確認します。
Cyberduckを起動したら下図のように接続設定を行います。
作成したIAMユーザーのキー情報を入力し、パスを入力します。
なお、パスを指定しなかった場合や他バケットのパスを入力した場合はエラーが表示されます。
接続に成功したら下図のようにバケット内のフォルダ等が表示されます。
test1フォルダではファイルのアップロード等の操作が可能です。
一方、test2フォルダでは操作を許可していないため、アップロードも出来ません。