S3のアクセス制限(バケットポリシー, IAMポリシー, ACL)

S3のアクセス制御方法は色々とあります。「バケットポリシー」「IAMポリシー」「ACL」「パブリックアクセス設定」とあり、複雑なので整理します。

アクセス制御のユースケース

アクセス制御のユースケースは多岐に渡ります。

487-aws-s3-access-limitation_usecase.png
  • 何に対して
    • バケット
    • オブジェクト
  • 誰に
    • 特定AWSアカウント
    • 特定IAMポリシー
    • 特定サービス(CloudFrontなど)
    • 特定IP
    • 全ユーザ
    • etc
  • 何のアクションを
    • オブジェクト一覧取得
    • オブジェクト作成
    • etc
  • どうする
    • 明示的拒否
    • 明示的許可
    • デフォルト拒否

S3はこれらのユースーケースに対応できます。便利な反面、多少混乱します。
各制御方法を確認します。

制御方法|バケットポリシー

概要

バケット単位でアクセス制御したいときに向いています。

487-aws-s3-access-limitation_bucket_policy.png

指定バケット > アクセス権限 > バケットポリシー から設定できます。JSON形式で記載します。

制御例

例を示します。

バケット内のオブジェクト世界中の全ての人読み取れる ようにしたい場合、以下のようにします。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::examplebucket/*"]
    }
  ]
}

バケット内のオブジェクトCloudFront読み取れる ようにしたい場合、以下のようにします。

{
   "Version":"2012-10-17",
   "Id":"PolicyForCloudFrontPrivateContent",
   "Statement":[
     {
       "Sid":" Grant a CloudFront Origin Identity access to support private content",
       "Effect":"Allow",
       "Principal":{"CanonicalUser":"CloudFront Origin Identity Canonical User ID"},
       "Action":"s3:GetObject",
       "Resource":"arn:aws:s3:::examplebucket/*"
     }
   ]
}

参考

制御方法|IAMポリシー

概要

特定のIAMユーザー、IAMロールだけ操作できるようにしたいとき利用します。

487-aws-s3-access-limitation_iam_policy.png

IAMポリシー を作成して、ユーザー、ロールに紐づけることで制御します。

IAM > ポリシー > ポリシーの作成 から作成できます。

指定できる内容はバケットポリシーと同じです。

参考

制御方法|ACL
( BucketACL, ObjcetACL )

概要

オブジェクト単位で制御したいときに向いています。

487-aws-s3-access-limitation_acl1.png

バケットのアクセス制御を設定できます。

指定バケット > アクセス権限 > アクセスコントロールリスト から設定できます。

487-aws-s3-access-limitation_acl2.png

オブジェクトのアクセス制御を設定できます。

指定オブジェクト > アクセス権限 から設定できます。

参考

公開防止|パブリックアクセス設定

概要

アクセス制御方法が様々なため、誤ってバケット、オブジェクトを公開してしまうという危険性があります。
そこで、2018年11月に パブリックアクセス設定 の機能が追加されました。

例えば、ACLで意図しないオブジェクトが公開状態になっているケースを考えます。
管理者は気づきづらい状態ですが、この設定を有効にしておくことで非公開にできます。

487-aws-s3-access-limitation_public_access1.png

新規バケットを作成するとき設定できます。

487-aws-s3-access-limitation_public_access2.png

既存バケットの場合は、指定バケット > アクセス権限 > パブリックアクセス設定から設定できます。

参考

アクセス許可の確認

概要

バケット一覧ページの アクセス でアクセス状態を確認できます。

487-aws-s3-access-limitation_public_access3.png
  • オブジェクトは公開可能
    • パブリックアクセス設定を無効にしています。
  • バケットとオブジェクトは非公開
    • パブリックアクセス設定を有効にしています。
  • 公開
    • パブリックアクセス設定を無効にしています。
    • ACLでバケット公開しています。

参考

参考