Webブラウザをインターフェイスとしたファイル転送・共有ソフト(FileMage Gateway)のIBM Cloudへの導入

# はじめに
FileMage GatewayはWebブラウザ上でファイルのやり取りができるファイル転送ソリューションです。さらに、データ保管先としてICOSを利用することができます。IBMCloudではポータル画面からFileMageの注文を行うとSchematics(IaC)にて自動的にVPC上にFileMageのソフトウェアを導入されたubuntuサーバーを構築し、すぐに利用することが可能となります。しかし、Managedなサービスではないので運用、管理は利用者側で行う必要があります。今回はIBMCloud上のカタログからFileMageをVPCに導入し、ファイルの保管先のディスクとしてICOSを利用することを目標とします。構築手順としては[FileMageの公式docs](https://www.filemage.io/docs/)を参考に進めます。
今回の構成図は以下の通りです。FileMageはユーザーの設定やストレージの登録ができる管理者ポータルとファイルの受け渡しができる利用者ワークスペースの２つで構成されます。
![スクリーンショット 2023-10-30 15.45.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/28108e5c-4ff8-7480-291d-330040f7819f.png)

# 前提環境
IBM Cloudのアカウント
Cloud Object Storageのバケット(jp-tok)

# 実装手順
## 1 FileMageサーバーの構築
### 1-1.FileMageのオーダー
IBMのポータル画面の検索機能で「FileMage」と検索し、オーダー画面を開きます。
![スクリーンショット_2023-10-19_15_32_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6a372b28-7fb3-58f6-6c68-e9a15fb98daf.png)
### 1-2.オプション項目の入力
FileMageの作成画面で下にスクロールすると入力変数の設定ができるので以下の値を入力します。()がついているものは任意の名前を入力します
|パラメーター | 値|
|:--|:--|
|TF＿VERSION|1.0|
|create_floating_ip|ture|
|public_image_name|(作成するイメージ名)|
|region|jp-tok|
|ssh_key_name|登録しているsshkey名|
|subnet_id|サーバー作成先のsubnetのID|
|vsi_instance_name|(作成するサーバーの名前)|
|vsi_profile|bx2-2x8|
|vsi_security_group|(作成するセキュリティグループの名前)|

sshkeyはポータルから「VPC infrastructure」→「SSH鍵」→「作成」でsshkeyの生成・登録をすることができるので、filemageを作成するリージョンに作成しておきます。subnetも同様に「VPC infrastructure」→「サブネット」→「作成」から東京リージョンにサブネットを作成し、subnet idを確認します。
![スクリーンショット_2023-10-30_11_16_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/0337714d-70eb-bae9-d27a-8193421b355f.png)


入力が完了したら右側のチェックボックスにチェックを入れ、インストールボタンをクリックします。
![スクリーンショット_2023-10-19_15_46_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6714bfda-a223-f47d-d005-9353ae5e2257.png)


### 1-3. Terraformリソースの確認
インストールボタンを押すとTerraformが起動し、環境が自動で構築されます。構築が完了したら左側のメニューのリソースから作成されたリソースの一覧(サーバー、floating_ipなど)を確認することができます。
![スクリーンショット_2023-10-19_15_51_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/70a08750-32dc-b7fe-cae9-30da41f8cac5.png)![スクリーンショット_2023-10-19_15_51_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/a86bd9d5-56ff-6286-c986-ec32cac215f7.png)

### 1-4.トライアルライセンスの取得
FileMageは$399/年でライセンスを取得できますが、今回は無料のトライアルライセンスを取得します。
[FilaMageのホームページ](https://www.filemage.io/trial/)からフォーム入力をするとメールでライセンスキーを入手することができます。

### 1-5.FileMageサーバーへのアクセス
先ほど作成したサーバーのfloatingIPを利用してサーバーへのSSH接続を行いサーバーへアクセスします。
サーバーへアクセスしたらfilemageのアップデートを行います。
```
sudo filemage update
```
### 1-6.FileMageサーバーの起動
以下のコマンドでサーバーの起動を行います。この時にメールアドレスとパスワードが要求されるのでライセンス取得時に登録したものを入力します。
```
sudo filemage init
Enter an email address for your default administrator account:
(メールアドレス)
Enter password for your default administrator account:
Administrator account created successfully.
```
この時点で管理ポータルへhttps://(floatingIP)/でアクセスすることができるようになっています。
アクセスするとライセンスキーが要求されるので、メールで送られたものを入力することでFileMageが使用可能になります。
![スクリーンショット 2023-10-30 11.41.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/2950ce97-cbda-b20f-43e1-04976e348cca.png)


## 2 FileMageの設定
### 2-1.ICOS資格情報の取得
FileMageをICOSに接続するためにICOSの資格情報の作成を行います。
事前に作成したICOSの資格情報の画面を開きます。
![スクリーンショット_2023-10-19_17_20_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/4b45574e-65c9-1b23-10a3-9465cd739307.png)
![スクリーンショット_2023-10-19_17_21_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/0a2759e8-ee41-e3cb-a584-f866e6f80ce8.png)
資格情報はロール：ライター、HMAC資格情報を含めるをオンに設定します。
![スクリーンショット_2023-10-19_17_21_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/66c36f08-8ebd-1fc6-24aa-f93e74710be9.png)
作成後、作成した資格情報を確認します。特に"cos_hmac_keys"の中にある"access_key_id"と"secret_access_key"はこの後使用するので控えておきます。

### 2-2.APIKEYの取得
上側のメニューの管理をクリックし、アクセス(IAM)をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/3ee60566-e898-dc0f-718d-8c5910af1059.png)
左側のメニューからユーザーをクリックし、自分自身のユーザーIDをクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/61edba80-d215-7008-ab5a-d4cd4420dc9f.png)
一番下までスクロールし、IBM Cloud APIキーの作成をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/fb036bfa-21da-3bb5-7784-552579908a66.png)
任意の名前をつけて作成ボタンを押すことでAPIKEYを作成できます。
この画面は閉じたら二度と表示されないのでダウンロードを推奨します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/49f66a4e-395a-b3b6-caf9-27e6c5727c87.png)

### 2-3.ICOS Endpointの設定
ストレージエンドポイントとはクラウドプロバイダーが提供するオブジェクトストレージAPIに接続するために必要な設定と資格情報を表します。
これからICOSとの接続のため、FileMageの管理ポータルからICOSのEndpointの登録を行います。左側の「Endpoints」を選択し、パラメータを入力します。
|パラメーター | 値|
|:--|:--|
|Endpoint Name| (任意の名前)|
|Storage Provider Type|IBM Cloud COS|
|IBM COS Bucket Name|作成したバケットの名前|
|IBM CLoud Object Storage API Endpoint|s3.jp-tok.cloud-object-storage.appdomain.cloud|
|IBM Cloud API Key|2-2で取得したAPIKEY|
|HMAC Access Key ID|2-1で取得したAccessKey|
|HMAC Secret Key ID|2-1で取得したSecretKey|

入力が終わったらSAVEボタンで設定を保存します。

### 2-4.ユーザー設定
続いてFileMageを利用するユーザーの設定を行います。
左側の「Users」を選択し、ADDボタンを押しユーザーの設定を追加します。
「Authentication」ではユーザーネームとパスワード、Endpointを入力する必要があります。
![スクリーンショット 2023-10-20 11.09.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/57fe0108-8a66-0dd9-b6b3-d57e9e3c7a3f.png)
「Home Directory」と「Folder Permissions」ではユーザーのフォルダアクセスについての権限を設定できます。
![スクリーンショット 2023-10-20 11.14.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/ace8d1f5-f340-eea9-7ce0-c49988765ad8.png)
「Whitelisted IP Ranges」ではログイン可能なIPアドレスを指定することができます。
![スクリーンショット 2023-10-20 11.16.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/6ab7df00-7cf3-d12c-7c7d-f0d4f037db91.png)
必要な項目を設定したら最後にSAVEボタンを押して設定完了です。

### 2-5.ワークスペースポータルの追加
次に実際にファイルのやり取りをするワークスペースを追加します。
SSHでサーバーにアクセスし、アプリケーション設定ファイルを編集し、ワークスペースポートを追加します。
```
sudo vi /etc/filemage/config.yml
```
このコマンドでアプリケーション設定ファイルを開き、最後の行に
```
https_port: 8443
workspace_port: 443
```
を追加します。追加後サーバーを再起動します。
```
sudo systemctl restart filemage
```
ワークスペースが有効になると以後https://(floatingIP)/でアクセスするとワークスペースへ繋がります。管理ポータルへアクセスする場合はポートを8443に指定する必要があります。
![スクリーンショット 2023-10-20 11.31.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/9bafb02f-d610-9116-c004-c2edacd154b9.png)
![スクリーンショット 2023-10-20 11.32.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8d57949e-edc4-d605-7081-bb457cff3057.png)

### 2-6.CORSの設定
ICOSとの接続はできてますが、現段階ではFileMageのワークスペース側でファイルのアップロードができません。そのためICOSのCORSを有効にする必要があります。CORS(Cross Origin Resource Sharing)はICOSが外部の第三者とリソースを正式に共有するための設定です。
ローカル環境でテキストエディタを開き、次のテキストファイルを作成します。<WORKSPACE_HOSTNAME>はワークスペースのホスト名を追加します(今回であればfloatingIP)。
```json
{
  "CORSRules": [
    {
      "AllowedHeaders": [
        "*"
      ],
      "AllowedMethods": [
        "PUT",
        "POST",
        "DELETE"
      ],
      "AllowedOrigins": [
        "https://<WORKSPACE_HOSTNAME>"
      ],
      "ExposeHeaders": []
    }
  ]
}
```
次に[ibmcloudのcli](https://cloud.ibm.com/docs/cli?topic=cli-install-ibmcloud-cli)をインストールします。
続いて`ibmcloud plugin install cloud-object-storage`を実行して、COS拡張機能をインストールします。
最後に以下のコマンドを実行してCORSを有効化します。
```
ibmcloud cos bucket-cors-put --bucket <BUCKET_NAME> --cors-configuration file://<JSON_FILE_NAME>.json --region jp-tok
```
これでワークスペースからファイルのアップロードが行えるようになりました。
実際にファイルをアップロードしてみると、ICOS側でもファイルが追加されていることがわかります。
![スクリーンショット 2023-10-30 16.41.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/79f555b4-1f2a-330d-3bc2-931b2167e716.png)
![スクリーンショット 2023-10-30 16.41.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2625926/8d24ba02-dc6d-494e-61f4-2904fa227ec2.png)
FileMage上にアップロードされているファイルはFileMageサーバーの中から確認できないので注意してください。