BOXにあるファイルをAmazon S3バケットに同期してみた

この記事では、NetApp Cloud Syncを使ってBOXにあるファイルをAmazon S3に同期したいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/8ba0823d-4953-710b-7ab8-26caaf24cdc5.png)

# Keyword
* Amazon S3とは
Amazon S3(Amazon Simple Storage Service)はデータを格納・管理できるオブジェクトストレージサービスです。主にウェブサイトやアプリケーションなどのデータバックアップおよび復元、アーカイブなど、さまざまなことに利用します。また、ファイルのバックアップ、ファイル処理の加工前、あるいは加工後のファイルの保存、動画・画像ファイルやCSSなどWebで使う静的なファイルをS3に置いて配信するなど、非常に広範囲な使い方ができます。

* BOX
BOXは、世界中で活用されているファイル共有のオンラインストレージサービスです。オンラインストレージとはさまざまな形式のファイルを管理できるサービスであり、マニュアルの共有や議事録の保存など、ビジネスのあらゆるシーンで活用されています。また、BOXは海外で開発されたサービスですが、日系企業でも広く導入されています。

* NetApp Cloud Sync
ハイブリッド・マルチクラウド環境でのデータ同期サービスです。NFSまたはCIFSファイル共有、Amazon S3 Object、Azure Blob、Google Cloud Storage、IBM Cloud Object Storage、NetApp StorageGRID、BOX、SMB Serverなど異なるフォーマットのファイルサーバーの間でデータを転送できます。

# 手順
1.BOXの認証情報を準備
2.Cloud SyncとS3バケットをAmazon Cloudに作成
3.BOXにあるファイルをS3バケットに同期
構成イメージ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/162e95c4-c677-e405-a52a-823f5ee79506.png)


# 1.BOXの認証情報を準備
BOXの[サイト](https://www.box.com/ja-jp/pricing)にアクセスしてアカウントを作成します。外部ユーザーの二要素認証が必要の為、`Business プランのEnterprise`を14日無料利用できるプランを選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/3ca1fa03-7210-c329-2a94-48b5fcd45218.png)
ログインすると、最初にこの画面になります。`Dev Console`と`Admin Console`により、設定を準備します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/95126645-1be5-382c-8353-b7e0c82bf78e.png)
* Dev Consoleでの操作
Dev Consoleをクリックして`Custome App`と`Server Authentication (with JWT)`を選び、Appを作成して必要な認証情報`Client ID`、`Client Secret`、`Enterprise ID`、`Private Key`、`Passphrase`を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f810a251-70b7-af7b-0346-04336927ab78.png)
`Generate a Public/Private Keypair`を押して`Downlaod as JSON`して保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/b5b482e8-4314-6acd-cde7-c3956d90f4c1.png)
Editorで開いて、中身のJsonを確認して後程これらの情報を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/517e66b3-df48-1a6a-b0e7-cd57a6345aff.png)
* Admin Consoleでの操作
作成したAppの`Client ID`を入れて`Add`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/dc83c383-58ba-e6fa-0cb2-52f21e241947.png)
`Content`にアクセスして、`Log in to user's account`をした後にファイルを作っておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/fbca08c7-8f42-e99d-6beb-6d5b7f7b97a9.png)
* 注意事項：
必ず、My Apps ->Configuration -> App Access Levelを`App + Enterprise Access`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/5e646fc3-7a03-2cc8-b604-8ef610e2ca94.png)
上記の設定後に、`Admin Console`から`Reauthorize App`をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/aa62c54c-1fef-cb64-6618-04819058261e.png)
ここまではBOXの準備が完了です。

# 2.Cloud SyncとS3バケットをAmazon Cloudに作成
* Cloud Sync
こちらの記事[「Amazon Cloud上にNetApp Cloud SyncのData Brokerを作成する二つの方法」](https://qiita.com/heyanxia/items/c19d476bf4df60802e8f)を参考して、Cloud SyncをAWS上に作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/15522c2d-c722-847a-d46f-b5794137f655.png)
Cloud Syncの`IAM role`をクリックして`ARN`をメモし、後程S3バケットに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/c0fbe50a-bb6f-5066-3fd7-9071c3b44c95.png)
* S3
AWS consoleで`Block public access`を`off`にしてS3バケットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/1c00405c-21b0-ed0e-9b3f-a5108aaee90e.png)
[こちらのドキュメント](https://docs.netapp.com/us-en/cloud-manager-sync/reference-requirements.html#permissions-required-for-s3-buckets-in-other-aws-accounts)を参考して[「The permissions included in this JSON file」](https://docs.netapp.com/us-en/cloud-manager-sync/media/aws_iam_policy_s3_bucket.json)を確認した上で`Bucket policy`を編集します。`<bucketName>`をここで作成したバケットにして、`<roleARN>`を上記のCloud Syncでメモしたを`ARN`にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/ff2213d3-8efe-2c1a-6765-ebe56fdf72df.png)

# 3.BOXにあるファイルをS3バケットに同期
NetApp BlueXPのGUIからドラッグでBOXとS3の`Sync Relationship`を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/86a604e7-efeb-c667-ba34-f361e46b27b3.png)
最初準備したBOXの認証情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/7f8929cb-5aab-9d03-3e45-e50e3999727a.png)
正しくBOXの認証情報を入れた後、BOXのファイルが読めるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/99d4efe6-196e-5534-50be-68a5b71870d5.png)
BOXにあるデモ用のファイルを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/564c9762-29bd-43e6-f40a-3ff103a44ad7.png)
用意したS3バケットを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/f9f985cf-ebe4-9d2d-568d-519e30f312a9.png)
S3バケットへのアクセス方法は、`S3 Private Links`と`S3 Bucket Policy`二つがあります。
`S3 Private Links`の場合は、事前にAWS consoleでS3バケットにアクセスできるVPC endpointを作成して選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/d38199a0-5a30-67e9-ec15-132bf36beed2.png)
今回は`S3 Private Links`を利用せずに、`S3 Bucket Policy`にCloud Syncの`ARN`を入れてアクセスできるように設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/d63aa37a-9817-5ad3-d069-21d1b13abd4b.png)
`Relationship Metadata`はdefaultのままで行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/61c78a2f-3cfb-0ee8-5a73-31b0c7a729df.png)
BOXにあるファイル`/NetAppCloudSyncDemo/`をS3バケット `netappcloudsyncboxtos3demo`に同期します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/fff46b8e-b371-a8c8-60d4-08dc8b3e0899.png)
同期が完了後、Dashboardから詳細を確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/0a26e913-381b-6f82-8888-680526386385.png)
S3に同期できたファイルを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2807172/269f1f30-5ea3-43a2-03a7-cc25d422e929.png)

# まとめ
NetApp Cloud Syncを使って、NetApp BlueXPのGUIにより、BOXにあるファイルをAmazon S3に同期しました。同じことをAmazon FSx for NetApp ONTAPでもできます。

# 参考リンク
1.[Permissions required for S3 buckets in other AWS accounts](https://docs.netapp.com/us-en/cloud-manager-sync/reference-requirements.html#supported-aws-regions)
2.[Amazon S3 とは](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html)
3.Cloud Sync: [Creating a new data broker in AWS](https://docs.netapp.com/us-en/cloud-manager-sync/task-installing-aws.html)
4.[Amazon Cloud上にNetApp Cloud SyncのData Brokerを作成する二つの方法](https://qiita.com/heyanxia/items/c19d476bf4df60802e8f)
5.[NetApp BlueXP: Create a Connector in AWS from BlueXP](https://docs.netapp.com/us-en/cloud-manager-setup-admin/task-creating-connectors-aws.html)
6.[クラウドストレージ「Box」とは？](https://www.ntt.com/bizon/box-basic-merit.html)
7.[Configuring provisioning for Box](https://www.ibm.com/docs/en/security-verify?topic=endpoints-configuring-provisioning-box)
8.[【AWS初心者向け】ストレージサービス「Amazon S3」](https://business.ntt-east.co.jp/content/cloudsolution/column-try-43.html#section-02)