S3へのFTPクライアント接続にIP制限を掛ける
htmlを静的ホスティングしているS3バケットへのブラウザアクセスはバケットポリシーでIP制限が可能。
だけど、FTPクライアントでのS3接続はIAMユーザーのアクセスキー&シークレットを使うので、そのユーザーの権限で設定してあげる必要があります。
ほぼ初めてちょっとテクいことをしてみたので(全然難しくないんだろうけど)メモしておきます。
IAMユーザーの作成
コンソールでIAMから S3_ftp-client-user
というユーザー名でユーザー作成。
アクセスキー、シークレットを取得する必要があるので「プログラムによるアクセス」にチェックを付ける。
とりあえずこの段階でポリシーはアタッチせず、タグは適当なものを付ける。
アクセスキーとシークレットはFTPクライアントでの接続で使うので控えておく。
IAMポリシーの作成
アクセス権限として下記を与える。
"Action": "s3:*",
は絞る必要があるときは絞って、 "aws:SourceIp": []
の中に許可するIPアドレスを追加していく。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "ここにIPアドレス01", "ここにIPアドレス02", "ここにIPアドレス03" ] } } } ] }
S3FullAccessOnlyPrivateNetwork
というポリシーを作成。( Private
ではなくネットワーク名がよい )
IAMポリシーのアタッチ
最後に S3_ftp-client-user
ユーザーに S3FullAccessOnlyPrivateNetwork
のポリシーをアタッチしてあげる。
「アクセス権限の追加」を押して
「既存ポリシーのアタッチ」から先ほど作ったポリシーをアタッチ
動作確認
Transmit を使用して登録IPアドレスからの接続確認。
アクセスキー&シークレットを入力
問題なくリストが表示される。
登録していないIPからだと Access Denied となったのでOK
まとめ
今回管理ポリシーを使ったのですが、あまり運用上推奨されるプラクティスではないと思うのでもう少しいいやり方がありそうです。
んまー管理ポリシー使うとしても、登録するIPアドレスはSystems Managerのパラメータストア使うとかがいいのかなと思ったり..実際にいじってみるといろいろ分かっていないなーという感じがしました。