[aws]s3バケットにIP制限をかける


s3にはbasic認証を設定することはできないのですが、IP制限なら設定することができます。

そのやり方を調べてみました。

バケット作成後、「Properties」=>「Permissions」=>「Edit bucket policy」を選択

以下のようなバケットポリシーを設定します。

Resourceにバケット名を入力し、IpAddressに許可したいIPを入力すればIP制限をかけることができます。

ただし、個別にpublic設定にしたファイルにはバケットポリシーが適用されないので注意が必要です。

2015/3/6追記:「”Effect”: “Allow”」でアクセス許可設定をするとうまく設定が適用できなかったので「”Effect”: “Deny”」を用いるパターンに修正しました

{
    "Version": "2012-10-17",
    "Id": "S3Policy#{unique_id}",
    "Statement": [
        {
            "Sid": "Stmt#{unique_id}",
            "Effect": "Deny",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::バケット名/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIP": [
                        "xxx.xxx.xxx.xxx/xx",
                        "xxx.xxx.xxx.xxx"
                    ]
                }
            }
        }
    ]
}

参考