kayaru28の学習日記

勉強したことの整理と、graphvizでの図形作成練習のための学習日記です。

AWS:S3におけるアクセス許可設定が覚えられないので改めてまとめ

目次

デフォルト設定

まずは、デフォルトの設定を確認します。 デフォルトでは

  • すべてのリソースがプライベート=作成者(AWS アカウント)のみがアクセス可能

となっています。 IAMユーザやIAMロールを使用してバケットの作成やオブジェクトのアップロードをした場合は、そのユーザ・ロールが所属するAWSアカウントが「作成者」になります。

以下は、開発者ガイドの抜粋です。

デフォルトでは、Amazon S3 のすべてのリソース — バケット、オブジェクト、関連サブリソース (lifecycle 設定や website 設定など) — はプライベートであり、リソースの所有者、すなわちそのリソースを作成した AWS アカウントだけがリソースにアクセスできます。 リソースの所有者は、アクセスポリシーを作成することにより、他のユーザーにアクセス許可を付与することもできます。

アクセス許可の設定

アクセス許可については、以下を決定します。

  • ユーザ  : 許可を取得するユーザー
  • リソース : 許可の対象S3リソース
  • アクション: 許可するアクション

つまりは、「誰に」「何を」「どうする」許可をあたえるのか、を決定するのがアクセス許可ということですね。 そしてどのようなアクセス許可を設定するのかを記述したものを「アクセスポリシー」と呼びます。

アクセスポリシー

どのようなアクセス許可を設定するのかを記述したものになります。 アクセスポリシーとしてアクセス許可の内容を記述し、それらを

  • リソース(バケットやオブジェクト)
  • ユーザー(IAMユーザー・グループ・ロール)

に関連付けることができます。 アクセスポリシーは関連付ける対象に応じて、リソースベースのポリシーとユーザベースのポリシーに分類されます。

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

リソースベースのポリシーには、以下の2種類があります。

ユーザベースのポリシー

  • ユーザーポリシー
    • 関連付け先:IAMユーザ/IAMグループ/IAMロール
    • 記述形式:JSONスキーマ
    • 制御単位:バケット/オブジェクト

リソースベースの時と同様にまとめると、上記の通りになります。 アクセスポリシーを作成して、それをIAMユーザ/IAMグループ/IAMロールに割り当てます。基本的にはIAMを用いた各種リソースへのアクセス許可・制限にのっとったもので、特別なことはありません。

ACLによるアクセス許可

各リソース内のサブリソースとしてACLがアタッチされており、

  • ユーザ
  • アクション

を指定することで、アクセスコントロールを行います。上で述べたアクセス許可にて3つの内2つのみで、残りの1つリソースがありませんが、リソースは実質どのリソースにアタッチするかという時点で決定しています。

「ユーザ」および「アクション」が書かれたACLを基にして、

  1. リソースに対するリクエストを受信
  2. 該当するACLを探索
  3. ユーザに対するアクセス許可があればリクエストを処理

という動作をします。

バケットまたはオブジェクトを作成した際には、デフォルトのACLが作成されます。デフォルトのACLは、リソース所有者に対してすべてのアクションを許可する内容となっています。

「ユーザ」として選択できるのは、

のいずれかです。 また、AWSアカウントの代わりにAmazonS3の定義済みグループを許可付与者として設定することができます。AmazonS3の定義済みグループは下記の3つのいずれかになります。

  • Authenticated Users グループ(すべてのAWSアカウント)
  • All Users グループ (すべてのインターネットユーザ)
  • Log Delivery グループ(サーバアクセスログを記録するための特殊なグループ)

「アクション」として選択できるのは、下記の5つです。ポリシーでのアクセスコントロールに比べて、ACLの場合はあまりアクションを細かく設定することはできません。

  • READ
  • WRITE
  • READ_ACP
  • WRITE_ACP
  • FULL_CONTROL

各アクションの内容はこちらの「付与できるアクセス許可」にあるので、ご参照ください。

docs.aws.amazon.com

バケットポリシーによるアクセス許可

ポリシーには、

の3つに加えて、さらに細かくアクセスをコントロールするために、

  • エフェクト
  • 条件

を指定します。「エフェクト」は「許可」または「拒否」の選択です。ACLは「許可」のみでしたが、ポリシーでは「拒否」も設定できます。「条件」は「使用しているソースIP」といった追加要素を指定して、アクセス許可(及び拒否)をする対象をより限定的にすることができます。

各項目の詳細は以下にまとまっているので、省略します。

docs.aws.amazon.com

全体的にポリシーのほうがACLよりも詳細なアクセスコントロールができるようです。

参考