目次

Amazon S3アクセス管理(バケットポリシー, AMIポリシー, ACL, パブリックアクセス設定)



Amazon S3のアクセス制御の方法は、間違えると大きな問題になってしまいます。
ただ、すごい複雑です。しっかり把握しましょう。



アクセス許可の確認方法

S3バケット一覧のページから、アクセスの概要を確認できます。

アクセス 説明
オブジェクトは公開可能 パブリックアクセス設定を無効にしています。
バケットとオブジェクトは非公開 パブリックアクセス設定を有効にしています。
公開 パブリックアクセス設定を無効にしています。
ACLでバケット公開しています。


AWS S3の制御方法

ACLよりもバケットポリシーの方が強くなります。
バケットポリシーで設定されていない場合は、ACLによって制御されています。


【重要】バケットポリシー(バケット単位でアクセス制御)

設定方法

  1. [アクセス権限] の [バケットポリシー]を選択
  2. 「バケットポリシーエディター」に記載します。

バケットポリシーの例

VPCエンドポイントからのみ許可。コンソールでも確認できるようにする

{
  "Id": "VPCe",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VPCe",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::<<S3-BUCKET-NAME>>",
        "arn:aws:s3:::<<S3-BUCKET-NAME>>/*"
      ],
      "NotAction": [
        "s3:ListBucket",
        "s3:ListAllMyBuckets"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": [
            "<<MY-ENDPOINT-ID>>"
          ]
        }
      },
      "Principal": "*"
    }
  ]
}

特定のIPアドレスからの制限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-bucket",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "111.111.222.111/32",
                        "111.111.222.222/32"
                    ]
                }
            }
        }
    ]
}



54.240.143.0/24 の範囲の IP アドレスは許可して、54.240.143.188 からのアクセスは拒否

{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
         "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} 
      } 
    } 
  ]
}


{
  "Version": "2012-10-17",
  "Id": "S3PolicyId1",
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::examplebucket/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": [
                        "54.240.143.0/24",
                        "192.1680.143.0/24"
                        ]
                      },
         "NotIpAddress": {"aws:SourceIp": [
                          "54.240.143.188/32",
                        "192.1680.143.10/24"
                        ]
                      } 
      } 
    } 
  ]
}


【重要】IAMポリシー(ユーザーごとにアクセス制御)

IAMの詳細は、AWS IAMで、ユーザ管理

設定例

特定のバケットのみアクセスを許可するIAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::testbucket",
                "arn:aws:s3:::testbucket/*"
            ]
        }
    ]
}
{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action": "s3:ListAllMyBuckets",
         "Resource":"arn:aws:s3:::*"
      },
      {
         "Effect":"Allow",
         "Action":["s3:ListBucket","s3:GetBucketLocation"],
         "Resource":"arn:aws:s3:::awsexamplebucket1"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket1/*"
      }
   ]
}


ACL(主にオブジェクト単位で制御する時に利用)

ACL無効化が推奨。
バケットへのアクセス制御を ポリシー(IAMユーザーポリシーやバケットポリシー)に 絞ることができます。

バケット単位のACLの設定に関係なくオブジェクト単位のACLが優先されます。

設定方法

  1. [アクセス権限] の [アクセスコントロールリスト]を選択
  2. AWSアカウントをの行をクリックすると、[アクセスコントロールリスト]の設定ができます。
    オブジェクトへのアクセス
      ON/OFF オブジェクトの一覧
      ON/OFF オブジェクトの書き込み
    
    このバケットの ACL へのアクセス
      ON/OFF バケットのアクセス権限の読み取り
      ON/OFF バケットのアクセス権限の書き込み
    


【理解難】パブリックアクセス設定(公開防止)

パブリックからのアクセスを拒否したい場合に設定します。
以下の4つをON/OFFにできます。

全部有効にした場合

パブリックアクセスをすべてブロックすることになります。
オブジェクトにアクセスできるのは、AWS サービスとバケット所有者のアカウント内の承認されたユーザーのみに制限されます。

新しいアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする

ACLの新規作成、設定変更でパブリックアクセス可能な設定にしない

任意のアクセスコントロールリスト (ACL) を介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする

ACLで、パブリックアクセスをすべてブロックする

新しいパブリックバケットポリシーを介して許可されたバケットとオブジェクトへのパブリックアクセスをブロックする

バケットポリシーの新規作成、設定変更でパブリックアクセス可能な設定にしない

任意のパブリックバケットポリシーを介して、バケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする

パブリックバケットポリシーで、パブリックアクセスをすべてブロックする



参考:S3のブロックパブリックアクセス設定について分かりやすく説明する - 非凡な才能をください。


参考