プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

バケットポリシーを使って、S3バケットへの特定のIPアドレスからのアクセスを拒否する

ホワイトリスト方式が普通なので、逆なんじゃないかという指摘はごもっともです。
ちなみにホワイトリスト方式のやり方は、公式参照。

docs.aws.amazon.com

で、表題の件ですが、下記のように書けます。

{
  "Id": "Policy1506259625570",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1506259623698",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::buckername001/*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "123.456.78.9"
        }
      },
      "Principal": "*"
    }
  ]
}

AWS Policy Generatorっていうのを使ったら簡単に作れました。便利ですね。
ちなみにアクセス制限かけた後に、該当のバケットにアクセスしてみると、下記のようなレスポンスが返ります。

<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>A3608701A147C5C6</RequestId>
<HostId>
PbjrlVPjjw7Fq0RCFFg1ecntR9OCQxFr3DapEugtGggSXRbDkb6kqibfRl8+ZT+cuFwaZjrRFjE=
</HostId>
</Error>

というわけで、S3オブジェクトの誤削除に対する有効な機能/設定は、

  • バージョニング
  • バケットポリシーによる権限設定

ということのようです。