この記事は、Amazon S3 REST APIを呼び出した時のhttpプロトコルシーケンスをパケットキャプチャした結果を記録したものです(読んで面白いものではない)。
前提
- S3のTokyoリージョン(
ap-northeast-1
)のバケット(samplebucket
)に対して、オブジェクト(sample.txt
)をPut/Get/Deleteしました。 - APIの署名は、署名バージョン4を使用したものです。
- アクセスキーID(
AKIAXXXXXXXXXXXXXXXX
)はダミーなので、HTTPリクエストのAuthorization
ヘッダの署名とはリンクしません。 samplebucket
には、ライフサイクルポリシーsample-lifecycle
が設定済みです。- クライアントプログラムはC#で実装しています。また、ビルド時のターゲットフレームワークは
.NET Framework 4.6.1
を指定しています。 - HTTPクライアントのクラスは
System.Net.Http.HttpClient
を使用しています。
クライアントプログラムの実装イメージ(C#)
varcontent=newByteArrayContent("hoge\n".ToBytes());//////// ここでhttpClientを作成(過程は省略)//////// var httpClient = new HttpClient(...);httpClient.PutAsync(newURI("http://samplebucket.s3.amazonaws.com"),content);httpClient.PutAsync(newURI("http://samplebucket.s3-accelerate.amazonaws.com"),content);httpClient.GetAsync(newURI("http://samplebucket.s3.amazonaws.com"));httpClient.DeleteAsync(newURI("http://samplebucket.s3.amazonaws.com"));
1. PutObject
1.1 クライアント → Amazon S3
PUT/sample.txtHTTP/1.1x-amz-content-sha256:2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2x-amz-date:20191117T001244ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=d4de97b542321428a14c85c3d37c3ba508bd79d50cd40064850e376b804e3ffbHost:samplebucket.s3.amazonaws.comContent-Length:5Expect:100-continueConnection:Keep-Alive
1.2 クライアント ← Amazon S3
HTTP/1.1100Continue
1.3 クライアント → Amazon S3
PUT/sample.txtHTTP/1.1x-amz-content-sha256:2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2x-amz-date:20191117T001244ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=d4de97b542321428a14c85c3d37c3ba508bd79d50cd40064850e376b804e3ffbHost:samplebucket.s3.amazonaws.comContent-Length:5Expect:100-continueConnection:Keep-Alive
hoge
1.4 クライアント ← Amazon S3
HTTP/1.1200OKx-amz-id-2:1gGAlxbb3z+elQEmbYNLEJ+hBL5X9jFSbOJFp3Kph91JwVzQybaQzYbDOnbQFU1kH4IxYjMP+Pc=x-amz-request-id:127EE4E6FAAF7A70Date:Sun, 17 Nov 2019 00:12:44 GMTx-amz-expiration:expiry-date="Tue, 19 Nov 2019 00:00:00 GMT", rule-id="sample-lifecycle"ETag:"c59548c3c576228486a1f0037eb16a1b"Content-Length:0Server:AmazonS3
2.PutObject (Transfer Acceleration)
2.1 クライアント → Amazon S3
PUT/sample.txtHTTP/1.1x-amz-content-sha256:2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2x-amz-date:20191117T032908ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=b57a429bc93f01a0263f69791bd73359249b7e8a5259eb08e0dbb28d479191ccHost:samplebucket.s3-accelerate.amazonaws.comContent-Length:5Expect:100-continueConnection:Keep-Alive
2.2 クライアント ← Amazon S3
HTTP/1.1100Continue
2.3 クライアント → Amazon S3
PUT/sample.txtHTTP/1.1x-amz-content-sha256:2e0390eb024a52963db7b95e84a9c2b12c004054a7bad9a97ec0c7c89d4681d2x-amz-date:20191117T032908ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=b57a429bc93f01a0263f69791bd73359249b7e8a5259eb08e0dbb28d479191ccHost:samplebucket.s3-accelerate.amazonaws.comContent-Length:5Expect:100-continueConnection:Keep-Alive
hoge
2.4 クライアント ← Amazon S3
HTTP/1.1200OKContent-Length:0Connection:keep-alivex-amz-id-2:IhjWCgokNW4vHoZDAlgBmBj6FW/sWyjDeYYI5yPCCRe3wO6Y6n0wxWryDAwkIIBH5ucjGx4Mo2M=x-amz-request-id:CBA86EAD08B58714Date:Sun, 17 Nov 2019 03:29:08 GMTx-amz-expiration:expiry-date="Tue, 19 Nov 2019 00:00:00 GMT", rule-id="sample-lifecycle"ETag:"c59548c3c576228486a1f0037eb16a1b"Server:AmazonS3X-Cache:Miss from cloudfrontVia:1.1 f8f7fa10720e88f937ab7011bfa41fb6.cloudfront.net (CloudFront)X-Amz-Cf-Pop:NRT20-C4X-Amz-Cf-Id:mnZLq--nNnfv6CaTRW2lBEKe5lfncyUNPP55FCBizHA5WhD8lFnd6A==
3. GetObject
3.1 クライアント → Amazon S3
GET/sample.txtHTTP/1.1x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date:20191117T030846ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=9075643d96f2632360561e07241a12073a2e24161bb160370520a4c3cca4f529Host:samplebucket.s3.amazonaws.com
3.2 クライアント ← Amazon S3
HTTP/1.1200OKx-amz-id-2:HcaZFDvu5473rQHE41W24Oc41VEEz9Wap83Of0yeYeqZ2nA91GtBLCJgj9gGiYcX4FMY8Lev+/k=x-amz-request-id:6B87E38BF4BACBADDate:Sun, 17 Nov 2019 03:08:46 GMTLast-Modified:Sun, 17 Nov 2019 02:25:22 GMTx-amz-expiration:expiry-date="Tue, 19 Nov 2019 00:00:00 GMT", rule-id="sample-lifecycle"ETag:"c59548c3c576228486a1f0037eb16a1b"Accept-Ranges:bytesContent-Type:binary/octet-streamContent-Length:5Server:AmazonS3
hoge
4. DeleteObject
4.1 クライアント → Amazon S3
DELETE/sample.txt_1HTTP/1.1x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date:20191117T043633ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=a3b9594cb11e4752b64dd1d86399fded7cfd3feddd6776be2d0a3d37e29b88abHost:samplebucket.s3.amazonaws.comContent-Length:0
4.2 クライアント ← Amazon S3
HTTP/1.1204No Contentx-amz-id-2:3ObtFd4sB6or4i4TEAZFi+UvVqtDBx9s8YqkqaPZtLbchBNmNyV+b4YCc+0HVWa11sLP0sKe2fY=x-amz-request-id:83E10C229B619354Date:Sun, 17 Nov 2019 04:36:33 GMTServer:AmazonS3
5. DeleteObject (Transfer Acceleration)
GetObjectやDeleteObjectでTransfer Accelerationを使っても問題ないみたい(TAを使うことには意味はないけど、実装を切り替える必要がないという意味では意味がある)。
Cloud Frontを経由するかどうかの違いしかないからかな。
5.1 クライアント → Amazon S3
DELETE/sample.txtHTTP/1.1x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855x-amz-date:20191117T032225ZAuthorization:AWS4-HMAC-SHA256 Credential=AKIAXXXXXXXXXXXXXXXX/20191117/ap-northeast-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=87feb911b7dbcad7538738895feb88e33660b453b62b282b6dbde5f65496e454Host:samplebucket.s3-accelerate.amazonaws.comContent-Length:0
5.2 クライアント ← Amazon S3
HTTP/1.1204No ContentConnection:keep-alivex-amz-id-2:8zkozysIbd19ycClxTyFvGOu3Esx4pJwL00XgJdDntvGMBHY9yt/KrIXijTaIsaCzWexPMimAwI=x-amz-request-id:BFDC403D14CC0A69Date:Sun, 17 Nov 2019 03:22:25 GMTServer:AmazonS3X-Cache:Miss from cloudfrontVia:1.1 5fa8781927f0b3b53d2119c9d6e2e874.cloudfront.net (CloudFront)X-Amz-Cf-Pop:NRT20-C1X-Amz-Cf-Id:_U_7MT7LFGrhYgQiylaqD5A_QsVawI6_P7IFl6NK1_EfZ0pOX39HSw==