yuheijotaki.com

S3へのFTPクライアント接続にIP制限を掛ける

f:id:jotaki:20200305110857j:plain

htmlを静的ホスティングしているS3バケットへのブラウザアクセスはバケットポリシーでIP制限が可能。
だけど、FTPクライアントでのS3接続はIAMユーザーのアクセスキー&シークレットを使うので、そのユーザーの権限で設定してあげる必要があります。
ほぼ初めてちょっとテクいことをしてみたので(全然難しくないんだろうけど)メモしておきます。

IAMユーザーの作成

コンソールでIAMから S3_ftp-client-user というユーザー名でユーザー作成。
アクセスキー、シークレットを取得する必要があるので「プログラムによるアクセス」にチェックを付ける。

f:id:jotaki:20200305110321p:plain

とりあえずこの段階でポリシーはアタッチせず、タグは適当なものを付ける。
アクセスキーとシークレットはFTPクライアントでの接続で使うので控えておく。

f:id:jotaki:20200305110334p:plain

IAMポリシーの作成

アクセス権限として下記を与える。
"Action": "s3:*", は絞る必要があるときは絞って、 "aws:SourceIp": [] の中に許可するIPアドレスを追加していく。

f:id:jotaki:20200305110345p:plain

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "ここにIPアドレス01",
                        "ここにIPアドレス02",
                        "ここにIPアドレス03"
                    ]
                }
            }
        }
    ]
}

S3FullAccessOnlyPrivateNetwork というポリシーを作成。( Private ではなくネットワーク名がよい )

f:id:jotaki:20200305110358p:plain

IAMポリシーのアタッチ

最後に S3_ftp-client-user ユーザーに S3FullAccessOnlyPrivateNetwork のポリシーをアタッチしてあげる。
「アクセス権限の追加」を押して

f:id:jotaki:20200305110419p:plain

「既存ポリシーのアタッチ」から先ほど作ったポリシーをアタッチ

f:id:jotaki:20200305110436p:plain

動作確認

Transmit を使用して登録IPアドレスからの接続確認。

アクセスキー&シークレットを入力

f:id:jotaki:20200305110449p:plain

問題なくリストが表示される。

f:id:jotaki:20200305110501p:plain

登録していないIPからだと Access Denied となったのでOK

f:id:jotaki:20200305110513p:plain

まとめ

今回管理ポリシーを使ったのですが、あまり運用上推奨されるプラクティスではないと思うのでもう少しいいやり方がありそうです。
んまー管理ポリシー使うとしても、登録するIPアドレスはSystems Managerのパラメータストア使うとかがいいのかなと思ったり..実際にいじってみるといろいろ分かっていないなーという感じがしました。