0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】EC2でS3をCLI操作したら「バケット作成は成功、アップロードだけ失敗」した話

0
Posted at

EC2 に SSM Session Manager で接続して、AWS CLI で S3 操作をひと通り(作成 → アップロード → ダウンロード → 削除)やろうとしました。まず aws s3 mb でバケット作成。

成功🎉 よし次、とファイルをアップロード。

Permission denied。え、バケットは作れたのに、アップロードだけ無理…?「権限が足りないのか?」とロールを疑い始めました。

犯人は権限(IAM)じゃなくて、「いま自分がいる場所」でした😅

「失敗しているのに、流れの中で見落としやすい」という地味に気づきにくいやつだったので残します。

環境

  • AWS EC2(Amazon Linux 2023)
  • 接続:SSM Session Manager(SSH の 22 番は開けない方針)
  • AWS CLI v2(EC2 に標準で入っている)
  • Amazon S3
  • リージョン:ap-northeast-1

起きたこと

こんなコマンドを順に流しました(抜粋)。

aws s3 mb s3://my-study-bucket-xxxx --region ap-northeast-1
echo "hello from ec2" > test.txt
aws s3 cp test.txt s3://my-study-bucket-xxxx/

返ってきた出力がこれ。

make_bucket: my-study-bucket-xxxx
sh: test.txt: Permission denied
The user-provided path test.txt does not exist.
  • make_bucket → バケット作成は成功
  • sh: test.txt: Permission deniedecho > test.txtファイルが作れていない
  • cp → 「test.txt が存在しない」で失敗

作成は通ったのにアップロードだけコケる。これで「権限(ロール)かな?」と勘違いしました。

原因

まず現在地を確認したら、これでした。

$ pwd
/usr/bin

SSM Session Manager で入った直後、今回の環境では ssm-user として /usr/bin にいました。/usr/bin はコマンド本体が置かれるシステム用フォルダで、一般ユーザーに書き込み権限がありません。

そのうえで、各コマンドが「何に触るか」で結果が分かれていました。

コマンド 触る対象 書けない場所での結果
echo > test.txt ローカル(EC2 上)にファイルを作る Permission denied(作れない)
aws s3 mb / aws s3 rb S3 側だけ 成功する(ローカルに触らない)
aws s3 cp ローカルのファイルを読む/書く 失敗する(元ファイルが無い/書けない)

echo でファイルが作れない → その後の cp が「ファイルが無い」で失敗、というドミノ倒し。一方 mb/rb は S3 だけの操作なので平然と成功する。だから「作成・削除は通るのにアップロードだけ落ちる」となり、流れの中で原因が見えにくくなっていました。

ちなみに Permission denied(ローカルのファイル権限)と Access Denied(AWS 側の権限=IAM)は別物で、今回は前者。メッセージで切り分けられます。

対処:書ける場所に移動してから

/tmp は一時作業用の、誰でも書き込める場所です(ただし一時置き場なので、残したいファイルは cd ~ でホームに置く方が安全)。最初に移動するだけ。

cd /tmp
aws s3 mb s3://my-study-bucket-xxxx --region ap-northeast-1
echo "hello from ec2" > test.txt
ls -l test.txt
aws s3 cp test.txt s3://my-study-bucket-xxxx/
aws s3 ls s3://my-study-bucket-xxxx/
aws s3 cp s3://my-study-bucket-xxxx/test.txt downloaded.txt
cat downloaded.txt
aws s3 rb s3://my-study-bucket-xxxx --force

今度はアップロード → ダウンロードまで全部通りました。

学び

  • Permission denied(場所・ファイルの権限)と Access Denied(IAM の権限)は別物。 エラーメッセージで切り分ける。
  • コマンドをまとめて流すと、失敗が流れの中で見落としやすい。 各ステップの成功/失敗を 1 つずつ確認する。
  • SSM で接続した直後はいきなり作業しない。 まず pwd で現在地を確認し、書ける場所(cd /tmpcd ~)へ移動してから。
  • プロンプトが sh-5.2$ のように素っ気ない時は、現在地が表示されないので pwd が確実。

おわりに

「権限かな?」と身構えた瞬間こそ、まず pwd——という小さなメモでした😅 同じく「作成は通るのにアップロードだけ落ちる…?」で固まった人の参考になれば嬉しいです🙌

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?