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?

S3署名付きURLの仕組みが面白かった

Last updated at Posted at 2024-04-30

はじめに

S3署名付きURL発行機能を触っていたのですが、仕様がおもしろかったので整理します。

結論から言うと、以下の記事原文と、その解説を行ってくれている記事2つが全てです。

その本質は 「URLを発行するIAMユーザーまたはロールで可能なS3に対する操作を、URLを介して、期限付きでできるようにする」 です。

やってみた

S3バケットを用意 S3バケットを用意

適当に拾った犬の画像でテストします(可愛いから)。

バケットとオブジェクトを用意します。

cap0.PNG

CloudShellとgetObjectのみ許可したユーザーを用意

S3コマンドで署名をテストするので、
CloudShellとS3:GetObjectのみを許可するユーザーグループを作成します。

cap1.PNG

動作確認

早速動作確認します。

まずは何もせずにGETしてみます。

cap2.PNG

403が返却されます。
ブラウザでも同様の表示が確認できます。

aws cliで署名付きURL発行コマンドを実行します。

ドキュメントを見るに、以下の形式でよさそうです。
aws s3 presign s3://DOC-EXAMPLE-BUCKET1/mydoc.txt --expires-in 604800
実際にCloudshell内でコマンドを実行してみます。

cap2_2.PNG

コマンドを実行すると、長いURLが返却されました。

cap3.PNG

ブラウザでURLを入力すると、可愛い犬の画像が表示されました。

ここまでで、署名付きURL発行には、s3:GetObjectのみ必要なことが分かりました。

逆に言うと、aws s3 presignコマンドには権限が不要なのでしょうか?
試してみます。

署名付きURL発行ユーザーのIAMポリシーを変更してみる

cap4.PNG

テスト中のユーザーが所属するユーザーグループから、s3:GetObjectを許可していたポリシーをデタッチしました。

この状態で、aws s3 presignコマンドを実行してみます。

cap5.PNG

長いURLが返却されました。コマンド自体は成功しているようです。
ブラウザで確認してみます。

cap6.PNG

よく見る403の画像が表示されました。面白いですね。

おさらい

文頭にも記載しましたが、署名付きURL作成機能の本質は以下の通りです。

その本質は 「URLを発行するIAMユーザーまたはロールで可能なS3に対する操作を、URLを介して、期限付きでできるようにする」 です。

つまり、URLを介して、aws s3 presignコマンド実行者の権限を与えているに過ぎないわけですね。

KMSキーをS3の暗号化キーに指定し、S3:GetObject権限は持つが、KMS:Decryptなどの権限を持たないユーザーで署名付きURLを発行し、アクセスしてみると、この仕様がよく分かります。

cap7.PNG

署名付きURLを発行したユーザーがkms関連の権限を持っていないことが原因で、
オブジェクトにアクセスできない旨が記載されています。

URLのパラメータをもとに、AWS側でURL発行IAMユーザーの権限をチェックしている挙動がうかがえます。

そのため、URL発行コマンドそのものについてはポリシーなしでも可能なようです。

おわりに

そんなに面白くないだろうと思って触ってみたS3の署名付きURL発行機能ですが、
仕様が少し面白かったので記事にしてみました。

こういう発見があるので、あまり興味ない機能・リソースでも、気軽に触っていきたいです。

参考サイト

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?