Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

アクセスコントロールリスト (ACL) の概要

Amazon S3 アクセスコントロールリスト (ACL) では、バケットとオブジェクトへのアクセスを管理できます。各バケットとオブジェクトには、サブリソースとして ACL がアタッチされています。これにより、アクセスが許可される AWS アカウントまたはグループと、アクセスの種類が定義されます。リソースに対するリクエストを受信すると、Amazon S3 は該当する ACL を調べて、必要なアクセス許可がリクエスタにあることを確認します。

バケットまたはオブジェクトを作成すると、Amazon S3 は、リソースに対する完全なコントロールをリソース所有者に付与するデフォルト ACL を作成します。これを、以下のバケット ACL のサンプルで示します (デフォルトのオブジェクト ACL は同じ構造です)。

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

サンプル ACL には、AWS アカウントの正規ユーザー ID を通じて所有者を識別する Owner 要素が含まれています。正規ユーザー ID を見つける方法については、「AWS アカウントの正規ユーザー ID を知る方法」を参照してください。Grant 要素は、被付与者 (AWS アカウントまたはあらかじめ定義されたグループ) と付与されたアクセス許可を識別します。このデフォルトの ACL には、所有者に対する 1 つの Grant 要素があります。Grant 要素を追加してアクセス許可を付与します。各許可は被付与者とアクセス許可を識別します。

注記

1 つの ACL には最大 100 個の許可を指定することができます。

被付与者とは

被付与者は、AWS アカウントまたはあらかじめ定義されたいずれかの Amazon S3 グループとすることができます。E メールアドレスまたは正規ユーザー ID を使用して AWS アカウントにアクセス許可を付与します。ただし、許可リクエストに E メールアドレスを指定した場合でも、Amazon S3 はそのアカウントの正規ユーザー ID を検出し、ACL に追加します。その結果、ACL には AWS アカウントの E メールアドレスではなく、常に AWS アカウントの正規ユーザー ID が含まれます。

重要

E メールアドレスを使用した被付与者の指定は、次の AWS リージョンでのみサポートされています。

  • 米国東部(バージニア北部)

  • 米国西部 (北カリフォルニア)

  • 米国西部 (オレゴン)

  • アジアパシフィック (シンガポール)

  • アジアパシフィック (シドニー)

  • アジアパシフィック (東京)

  • 欧州 (アイルランド)

  • 南米 (サンパウロ)

Amazon S3 でサポートされているリージョンとエンドポイントのリストについては、AWS 全般リファレンスの「リージョンとエンドポイント」を参照してください。

警告

他の AWS アカウントに自分のリソースへのアクセスを許可した場合、その AWS アカウントはアカウント内のユーザーにアクセス許可を譲渡できることに注意してください。これはクロスアカウントアクセスと呼ばれます。クロスアカウントアクセスの使用については、IAM ユーザーガイドの「IAM ユーザーにアクセス許可を委任するロールの作成」を参照してください。

AWS アカウントの正規ユーザー ID を知る方法

正規ユーザー ID は、AWS アカウントに関連付けられています。これは、79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be のような長い文字列です。アカウントの正規ユーザー ID を検索する方法については、「アカウントの正規ユーザー ID の検索」を参照してください。

また、AWS アカウントがアクセス許可を持つバケットまたはオブジェクトの ACL を読み取って、AWS アカウントの正規ユーザー ID を検索することもできます。許可リクエストによって個別の AWS アカウントにアクセス許可が付与された場合、ACL には AWS アカウントの正規ユーザー ID が含まれた許可エントリが追加されます。

注記

バケットをパブリックにした場合 (非推奨)、認証されていないどのユーザーもバケットにオブジェクトをアップロードできます。これらの匿名ユーザーは AWS アカウントを持っていません。匿名ユーザーがバケットにオブジェクトをアップロードすると、Amazon S3 によって特殊な正規ユーザー ID (65a011a29cdf8ec533ec3d1ccaae921c) がそのオブジェクトの所有者として ACL で追加されます。

Amazon S3 の定義済みグループ

Amazon S3 にはあらかじめ定義された一連のグループがあります。グループにアカウントアクセスを許可するときは、正規ユーザー ID の代わりに当社のいずれかの URI を指定します。あらかじめ定義された以下のグループが用意されています。

  • Authenticated Users グループhttp://acs.amazonaws.com/groups/global/AuthenticatedUsers で表されます。

    このグループはすべての AWS アカウントを表します。このグループへのアクセス許可により、任意の AWS アカウントがリソースにアクセスすることが許可されます。ただし、すべてのリクエストは署名 (認証) されている必要があります。

    警告

    Authenticated Users グループにアクセス許可を付与すると、世界中の認証された AWS ユーザーがリソースにアクセスできます。

  • All Users グループhttp://acs.amazonaws.com/groups/global/AllUsers で表されます。

    このグループへのアクセス許可により、世界中の誰でもリソースにアクセスすることが許可されます。リクエストは署名 (認証) 済み、または署名なし (匿名) とすることができます。署名なしのリクエストでは、リクエストの Authentication ヘッダーが省略されます。

    警告

    All Users グループには、WRITEWRITE_ACP、または FULL_CONTROL アクセス許可を一切付与しないことを強くお勧めします。たとえば、WRITE アクセス許可より、すべてのユーザーがお客様のバケットにオブジェクトを保存できるようになり、その料金がお客様に請求されます。また、すべてのユーザーは、お客様が保持する必要のあるオブジェクトを削除できるようになります。これらのアクセス許可の詳細については、次のセクション「付与できるアクセス許可」を参照してください。

  • ログ配信グループhttp://acs.amazonaws.com/groups/s3/LogDelivery で表されます。

    バケットの WRITE 許可により、このグループはサーバーアクセスログ (「Amazon S3 サーバーアクセスのログ記録」を参照) をバケットに書き込むことができます。

注記

ACL を使用するときの被付与者は、AWS アカウントまたはあらかじめ定義されたいずれかの Amazon S3 グループとすることができます。被付与者を IAM ユーザーとすることはできません。IAM 内の AWS ユーザーとアクセス許可の詳細については、「Using AWS Identity and Access Management」を参照してください。

付与できるアクセス許可

次の表は、ACL で Amazon S3 がサポートする一連のアクセス許可をまとめたものです。ACL アクセス許可のセットは、オブジェクト ACL とバケット ACL で同じです。ただし、コンテキスト (バケット ACL かオブジェクト ACL か) に応じて、これらの ACL アクセス許可は特定のバケットまたはオブジェクトオペレーションのためのアクセス許可を付与します。この表では、アクセス許可の一覧と、オブジェクトとバケットにおけるその意味について説明しています。

アクセス許可 バケット上で付与された場合 オブジェクト上で付与された場合
READ 被付与者がバケット内のオブジェクトをリストすることを許可します 被付与者がオブジェクトデータとそのメタデータを読み込むことを許可します
WRITE 被付与者がバケット内のオブジェクトを作成、上書き、削除することを許可します 該当しません
READ_ACP 被付与者がバケット ACL を読み込むことを許可します 被付与者がオブジェクト ACL を読み込むことを許可します
WRITE_ACP 被付与者が該当するバケットの ACL を書き込むことを許可します 被付与者が該当するオブジェクトの ACL を書き込むことを許可します
FULL_CONTROL バケット上の READ、WRITE、READ_ACP、WRITE_ACP アクセス許可を被付与者に許可します オブジェクト上の READ、READ_ACP、WRITE_ACP アクセス許可を被付与者に許可します

警告

S3 バケットとオブジェクトにアクセス許可を付与するときは注意が必要です。たとえば、バケットに WRITE アクセスを付与すると、被付与者はバケット内のオブジェクトの作成、上書き、削除が許可されます。アクセス許可を付与する前に、この「アクセスコントロールリスト (ACL) の概要」セクション全体を読むことを強くお勧めします。

ACL アクセス許可とアクセスポリシーのアクセス許可のマッピング

前の表に示したように、ACL で使用できるアクセス許可のセットは、アクセスポリシーで設定できるアクセス許可に比べると限定されています (「ポリシーでのアクセス許可の指定」を参照してください)。これらのアクセス許可はそれぞれ、1 つ以上の Amazon S3 オペレーションを許可します。

次の表は、ACL のアクセス許可のそれぞれが、対応するアクセスポリシーのアクセス許可にどのようにマッピングされるかを示します。おわかりのように、アクセスポリシーの方が ACL よりも多くのアクセス許可を付与できます。ACL を主に使用するのは、ファイルシステムのアクセス許可と同様の基本的な読み取り/書き込みアクセス許可を付与する場合です。ACL の使用が適している場合の詳細については、「アクセスポリシーのオプションを使用するためのガイドライン」を参照してください。

ACL アクセス許可 ACL アクセス許可がバケットに付与される場合の、対応するアクセスポリシーのアクセス許可 ACL アクセス許可がオブジェクトに付与される場合の、対応するアクセスポリシーのアクセス許可
READ s3:ListBuckets3:ListBucketVersions、および s3:ListBucketMultipartUploads s3:GetObjects3:GetObjectVersion、および s3:GetObjectTorrent
WRITE

s3:PutObject および s3:DeleteObject.

さらに、被付与者がバケット所有者であるときは、バケットの ACL で WRITE アクセス許可を付与すると、そのバケット内の任意のバージョンに対して s3:DeleteObjectVersion アクションを実行できるようになります。

該当しません
READ_ACP s3:GetBucketAcl s3:GetObjectAcl および s3:GetObjectVersionAcl
WRITE_ACP s3:PutBucketAcl s3:PutObjectAcl および s3:PutObjectVersionAcl
FULL_CONTROL これは、READWRITEREAD_ACP、および WRITE_ACP ACL アクセス許可を付与するのと同等です。したがって、この ACL アクセス許可は、対応するアクセスポリシーのアクセス許可の組み合わせにマッピングされます。 これは、READREAD_ACP、および WRITE_ACP ACL アクセス許可を付与するのと同等です。したがって、この ACL アクセス許可は、対応するアクセスポリシーのアクセス許可の組み合わせにマッピングされます。

サンプル ACL

バケットの以下のサンプル ACL は、リソース所有者と一連の許可を識別します。形式は Amazon S3 REST API の ACL の XML 表現です。バケット所有者はリソースに対する FULL_CONTROL が許可されます。さらに、この ACL では、正規ユーザー ID で識別される 2 つの AWS アカウントと、前のセクションで説明した、あらかじめ定義された 2 つの Amazon S3 グループに対して、リソースへのアクセス許可が付与される方法が示されています。

<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>Owner-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user1-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>WRITE</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser"> <ID>user2-canonical-user-ID</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/global/AllUsers</URI> </Grantee> <Permission>READ</Permission> </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

既定 ACL

Amazon S3 は、既定 ACL と呼ばれる、あらかじめ定義された一連の許可をサポートしています。各既定 ACL には、あらかじめ定義された一連の被付与者とアクセス権限が含まれています。以下の表に、一連の既定 ACL と、関連するあらかじめ定義された許可を示します。

既定 ACL Applies to ACL に追加されるアクセス許可
private バケットとオブジェクト 所有者は FULL_CONTROL を取得します。他のユーザーにはアクセス許可は付与されません (デフォルト)。
public-read バケットとオブジェクト 所有者は FULL_CONTROL を取得します。AllUsers グループ (被付与者とは を参照) は READ アクセス許可を取得します。
public-read-write バケットとオブジェクト 所有者は FULL_CONTROL を取得します。AllUsers グループは READ および WRITE アクセス許可を取得します。通常、これをバケットで付与することはお勧めしません。
aws-exec-read バケットとオブジェクト 所有者は FULL_CONTROL を取得します。Amazon EC2 は、Amazon S3 から Amazon Machine Image (AMI) バンドルを GET するための READ アクセスを取得します。
authenticated-read バケットとオブジェクト 所有者は FULL_CONTROL を取得します。AuthenticatedUsers グループは READ アクセス許可を取得します。
bucket-owner-read オブジェクト オブジェクト所有者は FULL_CONTROL を取得します。バケット所有者は READ を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。
bucket-owner-full-control オブジェクト オブジェクト所有者とバケット所有者はオブジェクトに対する FULL_CONTROL を取得します。バケットの作成時にこの既定 ACL を指定しても、Amazon S3 には無視されます。
log-delivery-write バケット LogDelivery グループはバケットに対する WRITE および READ_ACP アクセス許可を取得します。ログの詳細については、「Amazon S3 サーバーアクセスのログ記録」を参照してください。

注記

リクエストではこれらの既定 ACL を 1 つのみ指定できます。

x-amz-acl リクエストヘッダーを使用して、既定 ACL をリクエストで指定できます。Amazon S3 が既定 ACL を含むリクエストを受信すると、あらかじめ定義された許可がリソースの ACL に追加されます。

ACL の指定方法

Amazon S3 API を使用して、バケットまたはオブジェクトの作成時に、ACL を設定できます。Amazon S3 には、既存のバケットまたはオブジェクトに ACL を設定する API も用意されています。これらの API は ACL を設定する次のメソッドを提供します。

  • リクエストヘッダーを使用した ACL の設定 - リソース (バケットまたはオブジェクト) を作成するためにリクエストを送る際に、リクエストヘッダーを使用して ACL を設定します。これらのヘッダーを使用して、既定 ACL を指定するか、許可を明示的に指定 (被付与者とアクセス許可を明示的に識別) します。

  • リクエストボディを使用した ACL の設定 - 既存のリソースに ACL を設定するリクエストを送信する際に、リクエストヘッダーまたは本文で ACL を設定できます。

詳細については、「ACL の管理」を参照してください。