【AWS】Amazon S3 ~ アクセス制御編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2017/03/06/212734
https://dk521123.hatenablog.com/entry/2017/04/03/235355
https://dk521123.hatenablog.com/entry/2017/12/15/232236

の続き。

トラブルシューティングのために、
Amazon S3 の アクセス制御(アクセス・コントロール; Access control)
が関連していそうなのでメモ。

学んで感じたが...
 1) この辺のインフラ設計をきちんとしていないと色々なトラブルになりそう。
 2) IAM Policy含めて、学んでおくとAWSのトラブルシュート にかなり役にたつ

後日談

* 勉強したおかげで、トラブルシューティングできた。
 トラブルの詳細は、以下の関連記事を参照のこと。

https://dk521123.hatenablog.com/entry/2019/10/25/232155

【6】エラー「An error occurred (403) when calling the HeadObject operation: Forbidden」が表示
【7】エラー「An error occurred (AccessDeniedException) when calling the <Glue API名> operation」が表示

アクセス制御の方法

【1】ACL (Access Control List; アクセスコントロールリスト)
【2】Bucket Policy (バケットポリシー)
【3】IAM Policy (IAMポリシー)

メモ:制御の種別

* 勉強してみると、以下のように種別できる気がする
 a) S3側から制御
 b) S3を使用するAWSサービスからの制御

公式サイト:アクセス制御のチュートリアル

 以下の公式サイトでアクセス制御のチュートリアルを扱っているので
実際に、業務で扱わなければならない場合に、一読してみるといいかも。。。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/walkthrough1.html

【1】ACL

* サブリソースとしてXML形式で定義できる
* 種別「a) S3側から制御」

公式サイト
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/acl-overview.html

確認の仕方

[1] AWSコンソール管理画面から対象S3を選択
[2] [Permissions]タブを選択し「Access Control List」ボタン押下
 => bucket ownerなどが表示されるはず

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/user-guide/set-bucket-permissions.html

【2】Bucket Policy

* S3バケット / その中のオブジェクトのアクセス権をJSON形式で定義できる
* 種別「a) S3側から制御」
* Conditionキーから、以下の項目でのアクセス制御が可能
 a) ユーザ
 b) IPv4 および IPv6 アドレス
 c) VPC
 などなど...
* 深堀りするなら、以下のサイトが勉強になりそう。

https://dev.classmethod.jp/articles/s3-bucket-policy-multi-condition/

サンプル

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
     "arn:aws:s3:::awsexamplebucket1",
         "arn:aws:s3:::awsexamplebucket1/*"
      ],
      "Condition": {
     "NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"},
     "StringNotEquals": {"aws:userid":["xxxxxxx"]},
     "StringNotEquals": {"aws:sourceVpc":["vpc-xxxxxx"]}
      }
    }
  ]
}

公式サイトのサンプル
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies.html

確認の仕方

[1] AWSコンソール管理画面から対象S3を選択
[2] [Permissions]タブを選択し「Bucket Policy」ボタン押下
 => JSON形式で表示される 

【3】IAM Policy

* S3を含むAWSリソースへのアクセス権・実行権限を
 JSON形式で定義・コントロールできる
* 種別「 b) S3を使用するAWSサービスからの制御」
* 詳細は、以下の関連記事を参照のこと

Amazon S3 ~ アクセス制御 / IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/10/24/201738
IAM ~ IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/09/30/133123

参考文献

https://dev.classmethod.jp/articles/s3-acl-wakewakame/
https://qiita.com/ryo0301/items/791c0a666feeea0a704c

関連記事

Amazon S3 ~ アクセス制御 / IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/10/24/201738
IAM ~ IAM Policy 編 ~
https://dk521123.hatenablog.com/entry/2020/09/30/133123
AWS Glue のトラブル ~ Job編 ~
https://dk521123.hatenablog.com/entry/2019/10/25/232155
Amazon S3 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2017/03/06/212734
Amazon S3 ~ バージョニング編 ~
https://dk521123.hatenablog.com/entry/2017/04/03/235355
Amazon S3 ~ リダイレクト機能 ~
https://dk521123.hatenablog.com/entry/2017/12/15/232236
Amazon S3Python boto3でS3を操作する ~
https://dk521123.hatenablog.com/entry/2019/10/21/230004
Amazon S3AWS CLIでS3を操作する ~
https://dk521123.hatenablog.com/entry/2017/04/01/235355
boto3 API / list_objects_v2 の 使用上の注意 と その対策
https://dk521123.hatenablog.com/entry/2019/12/06/232617