
IAMアクセスキーなしでS3に大量ファイルをアップロードする方法 - CloudShellとs3 syncを活用したタイムアウト回避術
はじめに
クライアント案件でAWSを利用する際、セキュリティポリシーの都合でIAMアクセスキー(プログラマティックアクセス)が発行できないケースがあります。
コンソールにはメール+パスワード+MFAでログインできるのに、CLIやSDKで使うアクセスキーだけが使えない——そんな状況でもS3への大量ファイルアップロードが必要になりました。
コンソールのアップロードボタンから試したところ、ファイル数が多い(150MB程度)とタイムアウトで途中終了してしまいます。再度アップロードしようとしても、コンソールのアップロードはスキップ機能がないため最初からやり直しになります。
この記事では、AWS CloudShellとaws s3 syncを組み合わせることで、アクセスキーなしでもS3への大量アップロードを安定して行う方法を紹介します。
前提・環境
- AWSコンソールにログイン済み(IAMユーザー、メール+パスワード+MFA)
- IAMアクセスキーの発行権限なし
- アップロードしたいファイルがローカルにある(今回は約150MB、1000ファイル超)
- アップロード先のS3バケットへのアクセス権限はある
なぜコンソールのアップロードがつらいのか
AWSコンソールのS3アップロード機能はブラウザから直接PUT操作を行うため、ファイル数や容量が増えると以下の問題が発生します:
- ブラウザのタイムアウトで途中終了する
- 失敗してもどこまで成功したか分からない
- 再実行時にすでにアップロード済みのファイルもすべて上書き処理される(スキップなし)
CloudShellを使った解決策
AWS CloudShellはコンソールから使えるブラウザベースのターミナル環境です。コンソールのセッション認証情報がそのまま引き継がれるため、アクセスキーが不要です。
1. ファイルをzipに圧縮する(ローカル)
cd /path/to/your/data
zip -r files.zip your-folder/
2. CloudShellを開く
AWSコンソールの上部ナビゲーションバーにある CloudShellアイコン をクリックします。
3. CloudShellにzipをアップロードする
CloudShellウィンドウ右上の 「アクション」→「ファイルのアップロード」 からローカルのzipファイルを選択します。

4. 解凍してs3 syncを実行する
unzip files.zip
aws s3 sync ./your-folder/ s3://your-bucket-name/
aws s3 syncはS3上のオブジェクトとローカルファイルのETAG(MD5ハッシュ)を比較し、変更がないファイルはスキップします。途中でネットワークが切れても、再実行すれば未完了のファイルだけ続きからアップロードされます。
5. 完了後にCloudShell上のファイルを削除する
CloudShellのストレージはセッションをまたいで永続化されます(約120日間操作がなければリセット)。不要ファイルは明示的に削除しておきましょう。
rm -rf your-folder/ files.zip
コンソールアップロードとs3 syncの比較
| コンソールアップロード | CloudShell + s3 sync | |
|---|---|---|
| アクセスキー | 不要 | 不要 |
| タイムアウト耐性 | 弱い | 強い(途中再開可能) |
| スキップ機能 | なし | あり(変更なし=スキップ) |
| 大量ファイル対応 | 辛い | 得意 |
まとめ
IAMアクセスキーが使えない環境でも、CloudShellを使えばCLIと同等の操作が可能です。特にs3 syncはタイムアウトに強く、再実行時のスキップ機能があるため、大量ファイルのアップロードには積極的に使っていきたいと思いました。
コンソール操作でつまずいたときは、まずCloudShellで解決できないか考えてみるとよいかもしれません。







