アクセスコントロールリスト (ACL) の概要 - Amazon Simple Storage Service

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

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

デフォルトでは、別の AWS アカウント がオブジェクトを S3 バケットにアップロードすると、そのアカウント (オブジェクトライター) がオブジェクトを所有し、そのオブジェクトにアクセスでき、ACL を介して他のユーザーにそのオブジェクトへのアクセスを許可できます。オブジェクトの所有権を使用してこのデフォルトの動作を変更し、ACL を無効にして、バケット所有者としてバケット内のすべてのオブジェクトを自動的に所有することができます。その結果、データのアクセスコントロールは、IAM ポリシー、S3 バケットポリシー、仮想プライベートクラウド (VPC) エンドポイントポリシー、AWS Organizations サービスコントロールポリシー (SCP) などのポリシーに基づいています。

Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなり、オブジェクトごとに個別にアクセスを制御する必要がある異常な状況を除き、ACL を無効にすることをお勧めします。オブジェクトの所有権を使用すると ACL を無効にして、アクセスコントロールに関するポリシーに依存できます。ACL を無効にすると、別の AWS アカウント によってアップロードされたオブジェクトを含むバケットを簡単に維持できます。バケット所有者は、バケット内のすべてのオブジェクトを所有し、ポリシーを使用してオブジェクトへのアクセスを管理できます。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

重要

バケットが S3 オブジェクト所有権のバケット所有者強制設定を使用している場合、ポリシーを使用してバケットとその中のオブジェクトへのアクセスを許可する必要があります。ACL の設定または ACL の更新の要求に失敗すると、AccessControlListNotSupported エラーコードを返します。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 には、Owner の正規ユーザー ID を通じて所有者を識別する AWS アカウント エレメントが含まれています。正規ユーザー ID を見つける方法については、AWS アカウントの正規ユーザー ID の検索 を参照してください。Grant エレメントは、被付与者 (AWS アカウント またはあらかじめ定義されたグループ) と付与されたアクセス許可を識別します。このデフォルトの ACL には、所有者に対する 1 つの Grant エレメントがあります。Grant エレメントを追加してアクセス許可を付与します。各許可は被付与者とアクセス許可を識別します。

注記

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

被付与者とは

被付与者とは、AWS アカウントまたは事前定義済みのいずれかの Amazon S3 グループです。E メールアドレスまたは正規ユーザー ID を使用して AWS アカウントに許可を付与します。ただし、付与のリクエストでメールアドレスを指定すると、Amazon S3 はそのアカウントの正規ユーザー ID を確認して ACL に追加します。その結果、ACL には AWS アカウントの E メールアドレスではなく、常に AWS アカウントの正規ユーザー ID が含まれます。

アクセス許可を付与する場合は、各被付与者を type=value のペアとして指定します。タイプは次のいずれかです。

  • id – 指定された値が AWS アカウントの正規ユーザー ID である場合

  • uri — 事前定義されたグループにアクセス許可を付与する場合

  • emailAddress – 指定された値が AWS アカウントの E メールアドレスである場合

重要

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

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

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

  • 米国西部 (オレゴン)

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

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

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

  • 欧州 (アイルランド)

  • 南米 (サンパウロ)

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

例: E メールアドレス

例えば、次の x-amz-grant-read ヘッダーは、E メールアドレスによって識別される AWS アカウント に、オブジェクトデータとそのメタデータを読み取るアクセス許可を付与します。

x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com"
警告

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

AWS アカウントの正規ユーザー ID の検索

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

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

注記

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

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 のアクセス権限は所有者以外のユーザーが既存のオブジェクトを上書きまたは削除することを許可しませんが、WRITE のアクセス権限はすべてのユーザーがバケットにオブジェクトを格納することを許可し、これについてはお客様が請求されます。これらのアクセス許可の詳細については、次のセクション 付与できるアクセス許可 を参照してください。

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

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

注記

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

付与できるアクセス許可

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

Amazon S3 コンソールでの 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 で使用できるアクセス許可のセットは、アクセスポリシーで設定できるアクセス許可に比べると限定されています (Amazon S3 のアクション を参照してください)。これらのアクセス許可はそれぞれ、Amazon S3 の 1 つ以上のオペレーションを許可します。

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

Amazon S3 コンソールでの ACL アクセス権限の詳細については、ACL の設定 を参照してください。

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

s3:PutObject

バケット所有者は、バケット内の任意のオブジェクトを作成、上書き、削除でき、オブジェクト所有者はそのオブジェクトに対する FULL_CONTROL を有します。

さらに、被付与者がバケット所有者であるときは、バケットの 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 に対応しています。これらのコンテキストキーを使用して、リクエストで特定の ACL の使用を強制することができます。

  • s3:x-amz-grant-read ‐ 読み取りアクセスが必要です。

  • s3:x-amz-grant-write ‐ 書き込みアクセスが必要です。

  • s3:x-amz-grant-read-acp ‐ バケットの ACL への読み取りアクセスが必要です。

  • s3:x-amz-grant-write-acp ‐ バケットの ACL への書き込みアクセスが必要です。

  • s3:x-amz-grant-full-control ‐ フルコントロールが必要です。

  • s3:x-amz-acl既定 ACL が必要です。

ACL 固有のヘッダーを含むポリシーの例については、例 1: バケット所有者にフルコントロールを与えることを条件として s3:PutObject のアクセス許可を付与する を参照してください。Amazon S3 固有の条件キーの一覧については、Amazon S3 のアクション、リソース、条件キー を参照してください。

サンプル 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 マシンイメージ (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 アクセス許可を取得します。ログの詳細については、サーバーアクセスログを使用したリクエストのログ記録 を参照してください。
注記

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

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