JPCYBERのPUT通信をWiresharkで確認する(ACL設定あり)

# はじめに
前回以下の記事を書きましたが、JPCYBERのACL設定が正常に適用されるかは確認ができませんでした。
https://qiita.com/handy-dd18/items/8bd91eba22d46ab66ba9

そこで今回はJPCYBERの通信をWiresharkで見て、どのような処理をしているのかを追ってみようと思います。
パケットレベルのネットワークはそこまで理解していないので、変な表現があってもご了承ください。

# Wireshark確認
## 事前確認
環境は前回の流用ですが、最低限以下は既に整っていることとします。
・ファイルアップロードするAWSアカウントとS3のあるAWSアカウントは別
・アップロード元AWSアカウント上でEC2(JPCYBER)を準備
・JPCYBERはEC2にアタッチされたIAMロールの権限を使用する
・S3バケットのポリシーでIAMロールを許可
・EC2にはWiresharkをインストール済み

## 確認内容
前回記事ではJPCYBERは想定通りにできず、CloudBerryDriveは想定通りにできました。

CloudBerryDriveの設定では、S3へ送信するリクエストヘッダにx-amz-aclを追加したことで、AWS CLIと同じように設定がされたのだと思います。

そのため、今回はJPCYBERのオプション設定のACL項目にチェックを入れたときに、リクエストヘッダに同じパラメータが設定されるかを確認します。

## JPCYBER設定
検証用に作成したS3バケットをJPCYBERでマウントします。
この時の注意点は「SSL/TLS暗号化通信を使用する」チェックを外しておくことです。
そうすることで復号しなくてもWiresharkでパケットを確認することができます。
※検証される場合は自己責任でお願いします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/d1e543c0-f6fc-1aaf-397a-f9cc7a8a6e45.png)

サービス状態が実行中で割り当て済みドライブに名前があれば設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b540a3cc-63b8-0e0d-5ef8-110e23b424af.png)

エクスプローラーからS3の中身が確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/67314f45-12a6-ef8a-510c-bbcd6f4b8cd9.png)

オプション設定の「親バケットの～」のチェックをつけておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/c00bfa2c-0bbf-2181-3cd8-546d3555ed93.png)


## ファイルアップロード
まずは普通にファイルをアップロードしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/a4a35f9c-2427-3967-237e-46b22d41fd8d.png)

チェックは付けていたはずですが、親バケットのACLは適用されていないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/c6deca44-a6f9-f839-d330-ad35f1fdb449.png)

## Wireshark起動
Wiresharkを起動してイーサネットを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/ee475990-8dd8-7e54-d52c-fbf2ebca5dd9.png)

パケットのキャプチャがスタートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/062ac6b4-20f6-4fda-aa18-b4e6e6856fd5.png)

今回はHTTPのパケットだけ確認出来たらよいので、フィルタで絞っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/e7f4ff7a-2985-22f2-9b7e-3a08c3d4567b.png)


## ファイル再アップロード
Wiresharkの設定ができたところでファイルを再度アップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/57861854-a5f9-4db5-4ff4-47de95a77a4a.png)

操作時のパケットは以下のようです。思ったよりも出ているようです。
順番に見ていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/60751b0d-5c70-a145-bd56-3ef189b5d605.png)

最初にdesktop.iniのヘッダ情報を取ろうとしていますが、当然そんなファイルがないので404エラーで返されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/2979ff35-b01c-d303-6812-60691e94fb6c.png)

次にGETリクエストが投げられています。
demlimiterに2F(/)、list-typeとmax-keysがあり、Prefixがブランクであることから、S3バケット配下のリストしていると思われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/200cbcb1-d504-aa65-6c34-b1617d0cf21d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/86624806-8f1f-48f2-62c6-e9b7f59c1bfc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/ff8cede2-7c90-05ff-b903-4f27b8e885ea.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/17e977b3-29f8-9265-00f5-c2307a4c6269.png)

その後アップロードするファイルが既に存在しているか確認しています。
testフォルダの配下にアップロードしたので、併せてtestフォルダ配下に対してリストが実施されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/c224d36b-4bed-72c1-6303-f7029d6a8721.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/82acf1b2-cdb3-1f15-744a-da1dc89a90f4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/7f669d71-8db4-2469-b64d-415ed27e759b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/02dbfbf2-576c-8e41-7c9e-f74a4cd31483.png)

既存ファイルがなく、リストリクエストも問題ないことが確認出来た段階でファイルをアップロードしています。
これを見る限りはアップロード→ACL設定の順番でリクエストが送られているようです。
ただ、ACL設定のリクエストで403エラーが発生しており、アップロードだけが成功している状態のようです。
見る限り2回試行してダメであれば終了するようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/642e632f-be0d-ce8d-d252-2f02aea197f9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/0f901bce-b059-a797-1afa-96a4d995c78c.png)

ACL設定のリクエストではQuery Parameterにaclが設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/a1f05649-6af5-3f28-9668-cc3009a1ab32.png)

CloudBerryDriveではリクエストヘッダにX-Amz-Aclパラメータがありましたが、JPCYBERのリクエストではありませんでした。(当然ですが)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/b4c9641a-f534-cec4-d592-f7cb1645c9ec.png)

レスポンスを確認しましたが、権限ではじかれたことぐらいしかわかりませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/3227fdf6-2666-38c5-8c3e-acf7a6afac48.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440403/e341fb14-6ae7-255a-f4fd-c1d4e6bae775.png)

CloudBerryDriveと比較してみる限りだと、リクエストがアップロードとACL設定で分かれているので、そもそもの設定方法が異なるようでした。


# 終わりに
S3をマウントするツールを使用した場合にどのようにリクエストされているかは今まで曖昧だったので、今回具体的に確認できたのは良かったです。

また、CLIだとオブジェクトアップロード時にACLオプションを設定していますが、JPCYBERの場合はアップロードとALC設定を別々に実行していることがわかったので、その処理の違いも理解できました。

S3のALC周りは理解しきれていないところがあるので、今度はその辺りをもう少し勉強してみることにします。