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

アクセスコントロールリスト (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 には、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 ユーザーとすることはできません。AWS のユーザーと IAM のアクセス許可の詳細については、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) バンドルを READ するための GET アクセスが許可されます。
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 に追加されます。