メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

ユーザーポリシーの例

このセクションでは、Amazon S3 へのユーザーアクセスを制御するための IAM ユーザーポリシーをいくつか紹介します。アクセスポリシー言語の詳細については、「アクセスポリシー言語の概要」を参照してください。

以下のポリシー例は、プログラミング上のテストでは動作しますが、 これらを Amazon S3 コンソールで使用するには、コンソールで必要とされる追加のアクセス許可を付与する必要があります。これらをはじめとするポリシーを Amazon S3 コンソールで使用するための詳細については、「チュートリアル例: ユーザーポリシーを使用したバケットへのアクセスの制御」を参照してください。

例: バケットの 1 つへのアクセスを IAM ユーザーに許可する

この例では、自分の AWS アカウントの IAM ユーザーにバケットの 1 つ、examplebucket へのアクセス権を付与して、ユーザーがオブジェクトを追加、更新、および削除できるようにします。

このポリシーでは、ユーザーに s3:PutObjects3:GetObjects3:DeleteObject のアクセス許可を付与するだけでなく、s3:ListAllMyBucketss3:GetBucketLocation、および s3:ListBucket のアクセス許可も付与します。これらが、コンソールで必要とされる追加のアクセス許可です。コンソールを使用してユーザーにアクセス許可を付与してテストする例の解説については、「チュートリアル例: ユーザーポリシーを使用したバケットへのアクセスの制御」を参照してください。

Copy
{ "Statement":[ { "Effect":"Allow", "Action":[ "s3:ListAllMyBuckets" ], "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource":"arn:aws:s3:::examplebucket" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::examplebucket/*" } ] }

例: バケット内のフォルダーへのアクセスをすべての IAM ユーザーに許可する

次の例では、IAM ユーザー、Alice と Bob にバケット examplebucket にアクセスできるようにして、この 2 人がオブジェクトを追加、更新、および削除できるようにします。ただし、バケット内の単一のフォルダに全ユーザーのアクセスを制限したいとします。フォルダを作成する際、ユーザー名と同じフォルダ名にすることもできます。

Copy
examplebucket Alice/ Bob/

各ユーザーに本人のフォルダのみへのアクセス権を付与するには、各ユーザー用のポリシーを作成し、個別にアタッチします。たとえば、ユーザー Alice に次のポリシーをアタッチして、examplebucket/Alice フォルダへの特定の Amazon S3 アクセス許可を付与することができます。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::examplebucket/Alice/*" } ] }

次に、ユーザー Bob にも同様のポリシーをアタッチし、Resource の値にフォルダ名として Bob を指定します。

各ユーザーにポリシーをアタッチする代わりに、ポリシー変数を使用する単一のポリシーを作成し、グループにアタッチすることもできます。まずグループを作成し、それに Alice と Bob を追加する必要があります。以下のポリシー例では、examplebucket/${aws:username} フォルダに対して一連の Amazon S3 アクセス許可を付与しています。ポリシーが評価されると、ポリシー変数 ${aws:username} はリクエスタのユーザー名で置き換えられます。たとえば、Alice がオブジェクトの PUT リクエストを送信した場合、Alice が examplebucket/Alice フォルダにオブジェクトをアップロードする PUT オペレーションのみが許可されます。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::examplebucket/${aws:username}/*" } ] }

注記

ポリシー変数を使用する場合は、バージョン 2012-10-17 をポリシー内で明示的に指定する必要があります。アクセスポリシー言語のデフォルトバージョンは 2008-10-17 です。このバージョンでは、ポリシー変数をサポートしていません。

Amazon S3 コンソールで前述のポリシーをテストする場合、次のポリシーに示すように、追加の Amazon S3 アクセス許可に対応するアクセス許可が必要となります。これらのアクセス許可をコンソールで使用する方法については、「チュートリアル例: ユーザーポリシーを使用したバケットへのアクセスの制御」を参照してください。

Copy
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::examplebucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::examplebucket"], "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::examplebucket/${aws:username}/*" } ] }

注記

2012-10-17 バージョンのポリシーでは、ポリシー変数の先頭には $ が付きます。使用するオブジェクトキーに $ が含まれている場合、この構文の変化により衝突が発生します。たとえば、ポリシーにオブジェクトキー my$file を含めるには、$ 文字を ${$} のように使用して my${$}file と指定します。

IAM ユーザー名は人間が読んで理解できるわかりやすい識別子ですが、グローバルで一意である必要はありません。例えば、Bob が退職して別の Bob が入社した場合、この別の Bob が前の Bob の情報にアクセスできます。フォルダを作成する際に、ユーザー名の代わりにユーザー ID を使用することもできます。ユーザー ID はそれぞれ一意であるためです。この場合、${aws:userid} ポリシー変数を使用するように前述のポリシーを修正する必要があります。ユーザー ID の詳細については、『IAM ユーザーガイド』の「AWS 割り当てのユーザー ID」を参照してください。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::my_corporate_bucket/home/${aws:userid}/*" } ] }

非 IAM ユーザー(モバイルアプリユーザー)に対するバケット内のフォルダへのアクセス許可

ユーザーのデータを S3 バケットに格納するモバイルゲームアプリを開発するとします。バケットに各アプリユーザーのフォルダを作成します。また、各ユーザーには各自のフォルダのみにアクセスを制限します。しかし、ユーザーがアプリをダウンロードしてゲームをプレイし始める前にフォルダを作成することはできません。お客様にはユーザーのユーザー ID がないためです。

この場合、ユーザーには、Login with Amazon、 Facebook、または Google などのパブリックアイデンティプロバイダを使用してアプリにサインインするよう要求できます。ユーザーがこれらのプロバイダの 1 つを使用してアプリにサインインすると、ユーザー ID が設定されるため、これを使用して実行時にユーザー固有のフォルダを作成することができます。

これにより、AWS Security Token Service のウェブ認証フェデレーションを使用して、アイデンティプロバイダからの情報をアプリに組み入れ、各ユーザーの一時的なセキュリティ認証情報を取得することができます。続いて、IAM ポリシーを作成して、アプリがバケットにアクセスできるようにしたり、ユーザー固有のフォルダの作成、データのアップロードなどのオペレーションを実行できるようにすることができます。Web 認証フェデレーションの詳細については、『一時的なセキュリティ認証情報の使用』の「Creating Temporary Security Credentials for Mobile Apps Using Identity Providers」を参照してください。

例: 特定のグループに対し、Amazon S3 で共有フォルダを持つことを許可する

次のポリシーをグループにアタッチすると、グループ内の全メンバーに Amazon S3 のフォルダ my_corporate_bucket/share/marketing へのアクセス権が付与されます。グループメンバーは、指定されたフォルダのオブジェクトに対してのみ、ポリシーに示されている特定の Amazon S3 のアクセス許可を付与されます。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::my_corporate_bucket/share/marketing/*" } ] }

例: すべてのユーザーに対し、企業バケットの特定部分のオブジェクトの読み取りを許可する

次の例では、AWS アカウントが所有者であるすべての IAM ユーザーが含まれる、AllUsers というグループを作成します。その後、グループに対し、my_corporate_bucket/readonly フォルダ内のオブジェクトに対してのみ、GetObjectGetObjectVersion のアクセスを許可するポリシーをアタッチします。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::my_corporate_bucket/readonly/*" } ] }

例: パートナーに対し、企業バケットの特定部分へのファイルのドロップを許可する

次の例では、パートナー会社を表す WidgetCo というグループを作成します。アクセス権を必要としているパートナー会社の特定の個人またはアプリケーションに対して IAM ユーザーを作成し、作成したユーザーをグループに入れます。

その後、グループに対し、企業バケット内の my_corporate_bucket/uploads/widgetco フォルダへの PutObject アクセスを許可するポリシーをアタッチします。

WidgetCo グループがこのバケットに対して他の操作を実行することを防止するには、AWS アカウント内の Amazon S3 リソースに対する PutObject を除いて、あらゆる Amazon S3 アクセス許可を明示的に拒否するステートメントを追加します。このステップは、AWS アカウント内のどこかで、ユーザーに Amazon S3 リソースへの幅広いアクセス権を付与するポリシーが使われている場合にのみ必要です。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" }, { "Effect":"Deny", "NotAction":"s3:PutObject", "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" } ] }