質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

1回答

1443閲覧

AWS S3 REST API で使う Signature の生成法

progman

総合スコア66

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2022/12/09 04:14

amazon s3 からrest api でデータ取得を考えています。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/RESTAuthentication.html
に実行例があって

中ほどにGET /photos/puppy.jpg HTTP/1.1
で始まるリクエスト例が載っています。
ここでAuthorizationの末尾部分
「qgk2+6Sv9/oM7G3qLEjTH1a1l1g=」をどうやって生成するか、わかりません。

AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
を元に生成するのではないかと思うのですが、サンプルなどを探しますが、理解できるものが見つかりません。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/RESTAuthentication.html
に説明があって

「Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;」で始まるプログラムのようなものが書かれてますが、上で参照している変数を下で定義していたり。
最後は「 <described below>」となっていて結局わかりません。

どなたか、生成法、それを解説したHPなどご存じでないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2022/12/09 05:59

そうは言っても該当のドキュメント内に具体的に書いてあるのでそのとおりにやればいい、としか言いようがないです。 疑似文法なので書いてある箇所の上下とかはあんまり気にしなくていいと思います 書いてあることを自分の使いたい言語で実装すれば良いです。 一応調べるとやってみた的なものは出てきますが、基本書いてあるとおりに見えますね。 質問の趣旨とは逸れますが、cliやSDKではなくわざわざREST APIを利用するのはなぜでしょう? あんまり使うことがないので純粋に理由が気になっています。
yuma.inaura

2022/12/09 07:31

AWSのドキュメントは書いてあることそのものが難しいですね
progman

2022/12/09 09:53

restを使う理由は ・他のストレージから移行で、元がrestを使用している。 ・セキュリティ上、アクセスするURL、メソッドを明確にする必要があり、restが適している。 の2点ですね わかりづらいので、js,javaなんでもいいので、具体的なコーディング例 出来れば、必要なパラメータが引数で、restでなにか実行するような例があればいいですが gcp storageも見てみましたが、あちらは悩むほどではないです。
guest

回答1

0

AWSの別ドキュメントに署名の仕方について具体的な実装が書いてあったのでそちらを貼っておきます。
S3のほうにあるのはバージョン2の書き方なのでこちらのほうがよいでしょう。

署名バージョン 4 を使用した AWS リクエストへの署名
完全な Signature Version 4 署名プロセスの例 (Python)

ちなみに、cliやSDKも内部的にはAWSのREST APIに対するリクエストを送っているだけなので、自前でリクエスト内容を作るのと大差はないかと思います。

一応、実際に実装している例を書いてあるものを適当に探して見つけた結果を貼っておきます。
古いものもあるので、現在新しく作ったバケットについてはパス形式のリクエストは使えないことにご注意ください。
Amazon S3のREST APIを叩いてファイルを取得する
Amazon S3 REST APIを使う

投稿2022/12/09 11:44

yu_1985

総合スコア7447

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

progman

2022/12/10 14:23

回答ありがとうございます。 cliやSDKはhttpsベースで動いているのでしょうが、アクセスキー、シークレットアクセスキーを利用してヘッダを作成して動作しているのでしょうか? 核動作について、どのような、URL、ヘッダ、メソッドで動いているか明示されている。あるいは容易で確実に想定できる。なら、それでもいいですが、トレースとればわかるでしょう。といったレベルだと困ります。 私は以前rest apiでいろんなクラウト、オンプレミスのVMを統合的に管理するシステムを開発したことあり、AWSもrestで制御してましたが、かなりレアでしょうか? AWSは私の担当だったのですが、、、このようなヘッダを作成してたかは覚えてません。 今のプロジェクトではこれからの利用でV4になりますので、そちらを参考にさせていただきます。
68user

2022/12/11 12:07

利用者がラクできるように aws cli が提供されているわけで、それを使わずにわざわざ低レイヤの REST API 叩くなら自前での調査は必要でしょう (REST API でうまくいかない場合に aws cli でデバッグログ出したりしてリクエストを確認するなども含む)。その辺の事情は Google Cloud も同じです。
yu_1985

2022/12/11 13:49

明示されている、という言い方だとcliもSDKもGitHubで中身が公開されているので必要があればそちらを確認してみてください。 まずAWS自身も(そしておそらくは他のクラウドも)結局はAPIに対するリクエストベースで動かしているという前提があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問