ユーザーポリシーの例 - Amazon Simple Storage Service

ユーザーポリシーの例

このセクションでは、Amazon S3 へのユーザーアクセスを管理するための IAM ユーザーポリシーをいくつか示します。バケットポリシーの例については、「バケットポリシーの使用」を参照してください。アクセスポリシー言語の詳細については、バケットポリシーとユーザーポリシー を参照してください。

次のサンプルポリシーは、プログラムでテストする場合に機能します。ただし、Amazon S3 コンソールでこれらを使用するには、コンソールに必要な追加のアクセス許可を付与する必要があります。このようなポリシーの Amazon S3 コンソールでの使用の詳細については、「ユーザーポリシーを使用したバケットへのアクセスの制御」を参照してください。

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

この例では、AWS アカウントの IAM ユーザーに awsexamplebucket1 という 1 つのバケットに対するアクセス許可を付与して、ユーザーがオブジェクトを追加、更新、削除できるようにします。

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

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"arn:aws:s3:::*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::awsexamplebucket1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::awsexamplebucket1/*" } ] }

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

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

awsexamplebucket1 Alice/ Bob/

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

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

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

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

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

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

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

{ "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:::awsexamplebucket1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::awsexamplebucket1", "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:::awsexamplebucket1/${aws:username}/*" } ] }
注記

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

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

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

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

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

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

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

Amazon S3 で共有フォルダを持つことをグループに許可する

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

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

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

次の例では、AllUsers というグループを作成し、AWS アカウントのすべての IAM ユーザーを含めます。次に、GetObject フォルダ内のオブジェクトに対してのみ GetObjectVersionmycorporatebucket/readonly のアクセス権をグループに付与するポリシーをアタッチします。

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

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

次の例では、パートナー会社を表す WidgetCo というグループを作成します。パートナー会社でアクセス許可が必要な個人やアプリケーションのために IAM ユーザーを作成し、そのユーザーをグループに入れます。

次に、企業バケット PutObject 内の次のフォルダに対する mycorporatebucket/uploads/widgetco アクセス権をグループに付与するポリシーをアタッチします。

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

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