はじめに
Webサービスにおいて負荷分散等の理由からHTMLを格納するサーバと、画像のみを格納するサーバ(以下画像サーバ)にサーバリソースを分けるシーンがあります。
画像サーバへのファイルの追加や更新をサービス運用メンバ(非エンジニア)にて行ってもらうにあたり、AWSマネージメントコンソールから作業するのは色々不都合があると考え、運用メンバが慣れ親しんでいるFTPクライアントソフトを使った方法を検討しました。
準備
S3上のファイルを公開する際、Route53やCloudFrontを併用する方法がありますが、今回はあまり話を広げずS3とIAM、FTPクライアントのファイル管理についてのみとします。
S3
既存のBucketは稼働しているシステムで利用しているため、専用のBucketを作成します。
作成後は「アクセス権限」→「バケットポリシー」にて以下を入力しBucketを外部からアクセスできる状態にします。
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::[バケット名]/*"
}
]
}
IAM
画像ファイルを操作する専用のポリシーとユーザーを作成します。
ポリシー
Bucketの一覧は表示させつつ、特定Bucketのみ更新できる設定を追加します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": "*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::[バケット名]",
"arn:aws:s3:::[バケット名]/*"
]
}
]
}
ユーザー
以下の通り作成します。
- AWSアクセスの種類
- プログラムによるアクセス:有効
- AWSマネジメントコンソールへのアクセス:無効
- アクセス許可
- 既存のポリシーを直接アタッチから先に作成したポリシーを選択
- ユーザー作成後、認証情報よりアクセスキーを作成する
- アクセスキーIDとシークレットアクセスキーをメモしておきます(以降のFTPクライアントで使います)
FTPクライアント
今回の例としてWinSCPをあげます。
WinSCPはversion5.13からS3の操作が可能になりました。
https://forest.watch.impress.co.jp/docs/news/1107401.html
メモしたアクセスキーIDとシークレットアクセスキーで、S3へのアクセスおよび対象Bucketの更新が可能となります。
おわりに
本件を導入することにより、サービス運用メンバはAWSを意識することなく画像ファイルの更新ができるようになりました。専用の管理画面をエンジニアにて開発して運用メンバに提供する案も考えましたが、今回あげた案の方が運用メンバが慣れ親しんでいるFTPクライアントで利用できるのと、導入コストが低い点で採用となりました。