S3 アクセス許可 の概要

  • デフォルトでは、すべての S3 バケット、オブジェクトおよび関連するサブリソースは非公開です。
  • ユーザーが AWS アカウントまたはリソースにアクセスする IAM ユーザーです。
  • バケット所有者は、バケットを作成した AWS アカウントです。
  • オブジェクト所有者は、アカウントが所有していないバケットにオブジェクトをアップロードする AWS アカウントです。
  • リソースを作成する AWS アカウントのリソース所有者のみがリソースにアクセスできます。
  • リソース所有者は、
    • バケットまたはオブジェクトを作成する AWS アカウントは、これらのリソースを所有しています。
    • IAM ユーザーがバケットまたはオブジェクトを作成すると、IAM ユーザーの AWS アカウントによってリソースが所有されます。
    • バケット所有者が他の AWS アカウントユーザーに対してクロスアカウント権限を付与してバケットにオブジェクトをアップロードする場合、オブジェクトは、次の条件を除いて、バケット所有者ではなく、オブジェクトをアップロードしたユーザーの AWS アカウントによって所有されます。
      • バケット所有者は、そのオブジェクトへのアクセスを拒否することができます。それでも、そのオブジェクトを支払うバケット所有者です。
      • バケット所有者は、オブジェクトにアーカイブルールを削除または適用し、復元を実行できます。

S3 アクセス許可 の分類

S3 の アクセス許可 は、リソースベースのポリシーとユーザーポリシーに分類されます。

ユーザーポリシー

  • ユーザーベースのポリシーは、ユーザーまたはユーザーのグループが、AWS アカウントが所有する S3 バケットの特定の部分に対して持っているアクセスの種類を制御するために、S3 で IAM を使用します。
  • ユーザーベースのポリシーは、常にユーザー、グループ、またはロールにアタッチされるため、匿名アクセス許可を付与することはできません。
  • バケットを所有する AWS アカウントが、そのアカウントのユーザーにアクセス許可を付与する場合、バケットポリシーまたはユーザーポリシーを使用できます。

リソースベースのポリシー

バケットポリシーとアクセス制御リスト (ACL) は、Amazon S3 リソースに関連付けられているため、リソースベースです。
バケットACL

バケットポリシー

  • バケットポリシーを使用して、他の AWS アカウントまたはその中のバケットおよびオブジェクトの他のアカウントにある IAM ユーザーへのクロスアカウントアクセスを許可できます。
  • バケットポリシーは、S3 操作、リクエスター、リソース、および要求の態様 (IP アドレスなど) を含むさまざまな条件に基づいて、バケットおよびオブジェクトへの集中型のアクセス制御を提供します。
  • バケットを所有する AWS アカウントがそのアカウントのユーザーにアクセス許可を付与する場合、バケットポリシーまたはユーザーポリシーを使用できます。
  • バケットにアタッチされたアクセス許可は、バケット所有者が作成および所有するバケット内のすべてのオブジェクトに適用されます。
  • ポリシーでは、バケット内のすべてのオブジェクト (またはサブセット) に対するアクセス許可を追加または拒否できます。
  • バケット所有者のみがポリシーをバケットに関連付けることができます。

アクセス制御リスト (ACL)

  • 各バケットとオブジェクトには、ACL が関連付けられています。
  • ACL は、権限付与対象ユーザーを識別する権限のリストです。
  • ACL は、リソースに対する基本的な読み取り/書き込みアクセス許可を他の AWS アカウントに付与するために使用されます。
  • ACL は制限付きアクセス権セットをサポートし、
    • 条件付きアクセス許可を付与することも、明示的にアクセス許可を拒否することもできません。
    • バケットサブリソースのアクセス許可を付与するために使用できません。
  • アクセス許可は、電子メールアドレスまたは標準ユーザー ID (単なる難読アカウント ID) によって AWS アカウントに付与できます。電子メールアドレスが指定されている場合でも、S3 はユーザーの正規ユーザー ID を検索し、それを ACL に追加します。
  • サポートされない電子メールアドレスとして正規のユーザー ID を使用することをお勧めします。
  • バケット ACL
    • バケット ACL の推奨される使用例のみが、アクセスログオブジェクトをバケットに書き込むための書き込みアクセス許可を S3 ログ配信グループに付与することです。
    • バケット ACL は、バケットにアクセスログの配信が必要な場合に、バケットに対する書き込みアクセス許可をログ配信グループに付与するのに役立ちます。
    • ログ配布グループに必要なアクセス許可を付与できるのは、バケット ACL を使用する方法のみです。
  • オブジェクト ACL
    • オブジェクト ACL はオブジェクトレベルの権限のみを制御します。
    • オブジェクト ACL はバケット所有者が所有していないバケット内のオブジェクトに対するパーミッションを管理する唯一の方法です。すなわち、バケット所有者がクロスアカウントオブジェクトアップロードを許可し、オブジェクト所有者がバケット所有者と異なる場合、オブジェクト所有者がオブジェクトに対する許可を与える唯一の方法は、オブジェクトACLです。
    • バケットとオブジェクトが同じ AWS アカウントによって所有されている場合、バケットポリシーを使用してアクセス許可を管理できます。
    • オブジェクトとユーザーが同じ AWS アカウントによって所有されている場合、ユーザーポリシーを使用してアクセス許可を管理できます。

Amazon S3リクエスト認証

Amazon S3がリクエストを受け取ると、リクエストを許可するか拒否するかを判断するために、すべてのユーザーポリシー、バケットポリシー、およびACLを評価する必要があります。

S3 は3つのコンテキストでポリシーを評価します

  • ユーザーコンテキストは基本的に、S3 が親 AWS アカウント (コンテキスト権限) がユーザーにアタッチするユーザーポリシーを評価するコンテキストです。
  • バケットコンテキストは、S3 がバケット所有者 (コンテキスト権限) が所有するアクセスポリシーを評価し、バケット所有者がリソースへのアクセスを明示的に拒否していないかどうかをチェックするコンテキストです。
  • オブジェクトコンテキストは、S3 がオブジェクト所有者 (コンテキスト権限) が所有するポリシーを評価するコンテキストです。

類推(アナロジー)

  • 3つの親 (AWS アカウント) A、B および C を子 (IAM ユーザー) AA、BA、および CA とそれぞれ考慮してください。
  • 親 A はおもちゃの箱 (バケット) を AAA と所有し、またおもちゃ (オブジェクト) が落とされ、拾われることを可能にする。
  • 親 A はおもちゃ箱およびおもちゃにアクセスするために彼の子供の AA に許可 (ユーザー・ポリシーまたはバケツの方針または両方) を与えることができる。
  • 親 A は、おもちゃボックスにおもちゃをドロップするために、親 B (別の AWS アカウント) にアクセス許可 (バケットポリシー) を与えることができます。親 B は、おもちゃのバーをドロップする彼の子 BA にアクセス許可 (ユーザーポリシー) を付与することができます。
  • 親 B は、親 A にパーミッション(オブジェクトACL)を与えて、おもちゃ BAAにアクセスできます。
  • 親 A は親 C にアクセス許可 (バケットポリシー) を付与して、おもちゃにアクセスするために、その子 CA に許可 (ユーザーポリシー) を与えることができます。
  • 親 A は、IAM ロールを介して親 C に許可を与えて、おもちゃ BAA を拾い上げることができ、次に、この BAA は、子供 CA に許可を与えて、そのおもちゃにアクセスすることができる(ユーザポリシー)

バケット操作の承認

バケット操作の承認

  1. リクエスタが IAM ユーザーの場合は、そのユーザーが所属する親 AWS アカウントからアクセス許可 (ユーザーポリシー) を持っている必要があります。
  2. Amazon S3 は、親アカウントが所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親アカウントがユーザーにアタッチするユーザーポリシーが含まれます。
  3. 親が要求内のリソース (この場合はバケット) も所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシーとバケット ACL) も同時に評価します。
  4. リクエスタには、バケット所有者から特定のバケット操作を実行するためのアクセス許可 (バケットポリシーまたは ACL) も必要です。
  5. Amazon S3 は、バケットを所有する AWS アカウントによって所有されているポリシーのサブセットを評価します。バケット所有者は、バケットポリシーまたはバケット ACL を使用してアクセス許可を付与できます。
  6. バケットを所有する AWS アカウントが IAM ユーザーの親アカウントでもある場合は、ユーザーポリシーまたはバケットポリシーまたはその両方でバケットのアクセス許可を構成することに注意してください。

オブジェクト操作の承認

オブジェクト操作の承認

  1. リクエスタが IAM ユーザーの場合は、そのユーザーが所属する親 AWS アカウントからアクセス許可 (ユーザーポリシー) を持っている必要があります。
  2. Amazon S3 は、親アカウントが所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親がユーザーにアタッチするユーザーポリシーが含まれます。
  3. 親も要求 (バケット、オブジェクト) 内のリソースを所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシー、バケット ACL、およびオブジェクト ACL) を同時に評価します。
  4. 親 AWS アカウントがリソース (バケットまたはオブジェクト) を所有している場合は、ユーザーポリシーまたはリソースポリシーを使用して、その IAM ユーザーにリソースのアクセス許可を付与できます。
  5. S3 は、バケットを所有する AWS アカウントによって所有されているポリシーを評価します。
  6. 要求内のオブジェクトを所有する AWS アカウントがバケット所有者と同じでない場合、バケットコンテキストでは、バケット所有者がオブジェクトへのアクセスを明示的に拒否している場合、Amazon S3 はポリシーをチェックします。
  7. オブジェクトに明示的な拒否セットがある場合、Amazon S3 は要求を承認しません。
  8. リクエスタは、特定のオブジェクト操作を実行するために、オブジェクトの所有者 (オブジェクト ACL) からのアクセス許可を持っている必要があります。
  9. Amazon S3 はオブジェクト ACL を評価します。
  10. バケットとオブジェクトの所有者が同じである場合、バケットのコンテキストで評価されるバケットポリシーにオブジェクトへのアクセス権を与えることができます。
  11. 所有者が異なる場合、オブジェクトの所有者はオブジェクト ACL を使用してアクセス許可を付与する必要があります。
  12. オブジェクトを所有する AWS アカウントが、IAM ユーザーが属する親アカウントでもある場合は、ユーザーポリシーでオブジェクト権限を構成できます。

アクセス許可の委任

  • AWS アカウントがリソースを所有している場合は、それらのアクセス許可を別の AWS アカウントに与えることができます。
  • そのアカウントは、アカウント内のユーザーに、これらのアクセス許可またはそのサブセットを委任できます。これは、アクセス許可の委任と呼ばれます。
  • しかし、別のアカウントからアクセス許可を受け取るアカウントは、アクセス許可のクロスアカウントを別の AWS アカウントに委任することはできません。
  • バケット所有者が他の AWS アカウントに属していないオブジェクトにアクセス許可を付与する場合は、クロスアカウントアクセス許可によってそれを行うことはできず、AWS アカウントがアクセス権を取得するために想定できる IAM ロールを定義する必要があります。

AWS認定試験の練習問題

  • 質問はインターネットから収集され、答えは自分の知識と理解に基づいてマークされます(これはあなたと異なる場合があります)。
  • AWSサービスは毎日更新され、回答と質問はすぐに時代遅れになる可能性がありますので、それに応じて調査してください。
  • AWSのアップデートのペースを追うためにAWS試験の質問は更新されないため、基礎となる機能が変更されても質問が更新されないことがあります。
  • さらなるフィードバック、ディスカッション、修正を可能にします。
  1. S3 のデータへのアクセスを制限するために使用できる機能2つの回答を選択。
    1. バケットまたはオブジェクトに S3 ACL を設定します。
    2. バケットの CloudFront ディストリビューションを作成します。
    3. S3 バケットポリシーを設定します。
    4. IAM ID フェデレーションを有効にする。
    5. S3 仮想ホスティングを使用する。
  2. IP アドレスブロックが S3 バケット内のパブリックオブジェクトにアクセスできないようにするには、どのメソッドを使用しますか。
    1. バケットポリシーを作成してバケットに適用する
    2. NACL を作成し、バケットの VPC にアタッチします。
    3. ACL を作成し、バケット内のすべてのオブジェクトに適用する。
    4. バケットにアクセスするすべてのユーザーの IAM ポリシーを変更する。
  3. ユーザーはACLを使用して S3 バケットの読み取り/書き込み許可を与えました。下記のオプションのどれが、他の AWS アカウントに許可を与えるための有効なIDですか(受領者はACLを使用していますか?
    1. IAM ユーザー ID
    2. S3 セキュア ID
    3. アクセス ID
    4. 標準ユーザー ID
  4. root アカウントの所有者は、バケット ACL を使用して、1つの IAM ユーザーに彼の S3 バケットのフルアクセスを与えている。IAM ユーザーが S3 コンソールにログインすると、どのアクションを実行できますか。
    1. 彼はバケットの内容を見ることができる。
    2. 彼はバケットですべての操作を行うことができます。
    3. ACL を使用して IAM ユーザーにアクセスを許可することはできません。
    4. IAM ユーザーは、API/SDK のみを使用してバケット上のすべての操作を実行できます。
  5. ルート AWS アカウントの所有者は、AWS S3 へのアクセス許可を設定するためのさまざまなオプションを理解しようとしています。以下のオプションは、S3 の許可を付与するための適切なオプションではないですか?
    1. ユーザーアクセスポリシー
    2. S3 オブジェクトポリシー
    3. S3 バケットポリシー
    4. S3 ACL
  6. システム管理者は、AWS S3 を使用してバケット、オブジェクト、およびフォルダを管理します。以下のステートメントのどれが本当であり、sysadmin によって考慮する必要があります?
    1. フォルダは ACL のみをサポート
    2. オブジェクトとバケットの両方にアクセスポリシーを持たせることはできますが、フォルダにポリシーを持たせる
    3. フォルダにポリシーを持たせる
    4. オブジェクトとバケットの両方が ACL を持つことができますが、フォルダに ACL を持つことはできません
  7. ユーザーは、パブリックにアクセスできない S3 バケットを作成しました。バケットはまた、プライベートである 30 のオブジェクトを持っている。ユーザーがオブジェクトをパブリックにしたい場合は、最小限の労力でこの設定を行う方法を教えてください。
    1. ユーザーはコンソールからすべてのオブジェクトを選択し、1つのポリシーを適用してパブリックにマークする必要があります。
    2. ユーザーはプログラムをプログラミングして、すべてのオブジェクトを公開する S3 SDK を使用して作成することができます。
    3. すべてのオブジェクトをパブリックとしてマークする AWS バケットポリシーを設定する。
    4. バケット ACL を public として作成し、すべてのオブジェクトをパブリックとしてマークします。
  8. パブリックな Web アプリケーションに対して静的アセットを提供するように Amazon S3 バケットを構成する必要があります。バケットにアップロードされたすべてのオブジェクトをパブリック読み取りに設定する方法を確認します。2つの回答を選択
    1. アップロード中にオブジェクトに対するアクセス権をパブリック読み取りに設定します。
    2. すべてのオブジェクトをパブリック読み取りに設定するようにバケット ACL を構成します。
    3. すべてのオブジェクトをパブリック読み取りに設定するようにバケットポリシーを構成します。
    4. AWS ID とアクセス管理の役割を使用して、バケットをパブリック読み取りに設定します。
    5. Amazon S3 オブジェクトはデフォルトで public に読み取られるため、アクションは必要ありません。
  9. Amazon S3 では、そのバケットまたはオブジェクトに対して他のアクションを実行するためのアクセス許可を作成したユーザーは自動的には提供されません。
    1. ファイル
    2. バケットまたはオブジェクト
    3. バケットまたはファイル
    4. オブジェクトまたはファイル
  10. ルートアカウントの所有者は、S3 バケット ACL を理解しようとしています。許可された定義済みグループを使用して、オブジェクトに ACL を付与するために、以下のオプションを使用することはできませんか。
    1. 認証済みユーザーグループ
    2. すべてのユーザーグループ
    3. ログ配信グループ
    4. 標準ユーザーグループ
  11. ユーザーが特定のバケットにログオンできるようにしています。ログバケットへのアクセスを許可するには以下のオプションのどれが最適でしょうか?
    1. IAM ポリシーを作成し、ログアクセスを許可する
    2. S3 バケットのロギングを有効にすることはできません。
    3. ログバケットへのアクセス権を持つ IAM ロールを作成します。
    4. ロググループに ACL を提供する
  12. ユーザーが S3 でアクセスを構成しようとしています。S3 バケット/オブジェクトへのアクセスを提供できないオプションは次のどれですか。
    1. IAM ユーザーのポリシーを定義する
    2. オブジェクトの ACL を定義する
    3. オブジェクトのポリシーを定義する
    4. バケットのポリシーを定義する
  13. ユーザーが所有していない S3 バケットのオブジェクトにユーザーがアクセスしています。彼がそのバケツのオブジェクトをパブリックに設定しようとしている場合、以下のオプションのどれがこのアクションに適しているのでしょうか?
    1. バケットをフルアクセスで公開する
    2. バケットのポリシーを定義する
    3. オブジェクトに ACL を提供する
    4. 権限を持つ IAM ユーザーを作成する
  14. バケット所有者は、別のアカウントの IAM ユーザーがバケット内のオブジェクトをアップロードまたはアクセスできるようにしました。アカウント A の IAM ユーザーが、アカウント B の IAM ユーザーによって作成されたオブジェクトにアクセスしようとしています。このシナリオではどうなるでしょうか?
    1. S3 がアクセス権の競合によりエラーを与えるため、バケットポリシーが作成されないことがある。
    2. 複数の IAM ユーザーに許可を与えることはできません。
    3. AWS S3 は、アカウント A の所有者、バケット所有者、および IAM ユーザー B によってオブジェクトに与えられた適切な権限を検証します。
    4. 1つのアカウントの IAM ユーザーが他の IAM ユーザーのオブジェクトにアクセスすることはできません。

Jayendra’s Blog

この記事は自己学習用に「AWS S3 Permissions – Certification(Jayendra’s Blogより)」を日本語に訳した記事です。