AmazonS3 RESTパケット解析(Downlaod)

AmazonS3 RESTパケット解析 S3


https://www.simulationroom999.com/blog/amazons3-rest-packet-analysis/

はじめに

今回は、AmazonS3からのDownload。
FTP のGET相当となる。。
S3 仕様としてはGET object に相当。

aws s3 cp s3://XXXXXXXXXXXXXXX/folder/text2.txt ./

ちなみにawscli 的には指定ディレクトリ以下全部Download指示ができるが、REST 的にはGET Bucket とGET object の繰り返しになる。

リクエストパケット

GET /XXXXXXXXXXXXXXX/folder/test2.txt HTTP/1.1
Host: 192.168.5.128
Accept-Encoding: identity
X-Amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20200310T032729Z
Authorization: AWS4-HMAC-SHA256 Credential=AAAAAAAAAAAAAAAAAAAA/20200310/ap-northeast-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=62faf3270199a123253c71c080076d7eb72d5e761bd92330dbc122b57d5d4336
User-Agent: aws-cli/1.16.51 Python/2.7.15 Windows/10 botocore/1.12.41

レスポンスパケット

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 0
Content-Security-Policy: block-all-mixed-content
Content-Type: text/plain
Etag: "00000000000000000000000000000000-1" 
Last-Modified: Tue, 10 Mar 2020 23:06:04 GMT
Vary: Origin
X-Amz-Bucket-Region: ap-northeast-1
X-Amz-Request-Id: 156DA09E6B6F3169
X-Xss-Protection: 1; mode=block
Date: Tue, 10 Mar 2020 03:27:29 GMT
<!-- ※本来ならここにHTTPBODYが付くが0byteファイルなため何もいない。-->

裏技

レスポンスパケットはファイルそのものが取れるので、これも組込み系だとバッファ不足とかで死ぬ場合があり得る。
分割できると嬉しいのだが、REST的なCRUDとしてはこの想定は存在しない。
が、
S3とかRESTとかの仕様というよりもHTTPの仕様としてpartial contentsという仕様がある。
HTTPヘッダに以下を追加する。(例の場合はファイル先頭0byte目から500byteまでをよこせって意味になる)

Range:bytes=0-500

S3とかRESTとかよりも下位のレイヤーの仕様であるため、S3に対しても有効。
一応、S3のGet objectのパラメータとして規定はされているが、結局のところ「RFC2616 を参照」になっている。

コメント

タイトルとURLをコピーしました