2022年1月20日木曜日

PostmanでContent-MD5をつけてS3 lifecycle configurationを送信する

前回( PostmanでS3バケットにファイルを送信する)の続きで、ヘッダを増やしてAPI送信します。

やること

PostmanでS3のlifecycle configuration APIを送信します。


サンプルはこちらのものを使います。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html

bodyは<LifecycleConfiguration>からの部分です。設定は2つあり、

  • id1ではdocuments/フォルダ内のオブジェクトは30日経ったらGlacierに移動
  • id2ではlogs/フォルダのものが365日経ったら削除

headerのうち、PUT、Hostの部分はPostman内で書き込みます。

x-amz-date、Authorization、Content-Lengthは、Postmanがデフォルトで自動で生成してくれます。

Content-MD5もPostman内で計算しますが、別途設定が 必要です。

MD5がないとこのようなエラーが出たりします。

<Error><Code>InvalidRequest</Code><Message>Missing required header for this request: Content-MD5</Message>


PUT /?lifecycle HTTP/1.1 Host: examplebucket.s3.<Region>.amazonaws.com x-amz-date: Wed, 14 May 2014 02:11:21 GMT Content-MD5: q6yJDlIkcBaGGfb3QLY69A== Authorization: authorization string Content-Length: 415 <LifecycleConfiguration> <Rule> <ID>id1</ID> <Filter> <Prefix>documents/</Prefix> </Filter> <Status>Enabled</Status> <Transition> <Days>30</Days> <StorageClass>GLACIER</StorageClass> </Transition> </Rule> <Rule> <ID>id2</ID> <Filter> <Prefix>logs/</Prefix> </Filter> <Status>Enabled</Status> <Expiration> <Days>365</Days> </Expiration> </Rule> </LifecycleConfiguration>


設定

メソッドと宛先に

PUT 、 your-bucketname.s3.your-region.amazonaws.com/?lifecycle

と入力します。your-bucketnameはバケット名、your-regionはregion名です。

PUT /?lifecycle HTTP/1.1 

Host: examplebucket.s3.<Region>.amazonaws.com

となっていた  部分を反映しています。

Pre-request ScriptタブでContent-MD5 計算

タブ内でmd5を計算するスクリプトを書きます。

var md5checksum = CryptoJS.MD5(""+pm.request.body+"");
base64value = CryptoJS.enc.Base64.stringify(md5checksum);
postman.setGlobalVariable("contentMD5", base64value);

100%こちらを参考にしています。

https://raaviblog.com/how-to-generate-content-md5-value-base64-encoded-128-bit-md5-of-the-data/

ここではリクエストボディをMD5ハッシュにして、base64にして、contentMD5というGlobalVariableにアサインしています。


PostmanのEnvironment→Globalsを開き、contentMD5というVARIABLE名を入力します。他のINITIAL VALUE, CURRENT VALUEは空欄です。



Headersタブ

Key: Content-MD5
Value: {{contentMD5}}

をヘッダのテーブルに追加します。これで計算したMD5がヘッダに与えられます。

Body タブ


<LifecycleConfiguration>
から
</LifecycleConfiguration>

までをすべて貼り付けます。

実行

SendするだけでOKです。

ちなみにコードで見るとこうなっています。(省略あり)

curl --location --request PUT 'xxxxx.s3.region.amazonaws.com/?lifecycle' \
--header 'Content-MD5: xxxxx' \
--header 'X-Amz-Content-Sha256: xxxxx' \
--header 'X-Amz-Date: xxxxx' \
--header 'Authorization: AWS4-HMAC-SHA256 Credential=xxxxx/xxxxx/region/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=xxxxx' \
--header 'Content-Type: text/plain' \
--data-raw '<LifecycleConfiguration>
....
</LifecycleConfiguration>'

0 件のコメント:

コメントを投稿