互換性向上!署名バージョン4へ対応したIIJのオブジェクトストレージをs3fsから使ってみた

2021年03月01日 月曜日


【この記事を書いた人】
寺田 充毅

2013年からオブジェクトストレージの開発を担当。最近はコードよりも資料を書いてる時間が増えている。趣味はギターと農業。

「互換性向上!署名バージョン4へ対応したIIJのオブジェクトストレージをs3fsから使ってみた」のイメージ

前回は「日本の東西でデータ同期 – 東西分断しても動き続けるオブジェクトストレージを作る」で内部データベースの東西同期というIIJオブジェクトストレージのアーキテクチャの話をしました。
今回はお客様が触れることが多いAPIの話をします。先日リリースした署名バージョン4対応による、AWS s3との互換性の向上についてご紹介します。

改めてIIJオブジェクトストレージとは

IIJオブジェクトストレージは名前の通りオブジェクトストレージのサービスです。

オブジェクトストレージはREST APIを経由して利用するストレージです。REST APIはHTTPもしくはHTTPSのプロトコルで呼び出します。

REST APIを通じてオブジェクト(ファイル)のアップロード、ダウンロード、削除ができます。

APIで呼び出せるためアプリケーションから呼び出すのが簡単です。つまりアプリケーションとの親和性が高いストレージという特徴を持っています。

オブジェクトストレージは様々な用途で使われています。例えばHTTP(S)でオブジェクト(ファイル)を取り出すことができるので、コンテンツの置き場として利用されることもあります。また比較的安価ですのでバックアップストレージとしての利用や、容量が増大しがちなカメラからの動画データの置き場など、広く利用されています。

署名バージョン4対応によりs3との互換性が向上しました

2021/2/18のリリースでIIJオブジェクトストレージは署名バージョン4に対応しました。

IIJオブジェクトストレージはAWS s3と互換性を有しています。認証時に使うヘッダ情報はIIJ固有の形式のみならず、AWS s3の形式でも認証できます。

AWS s3の署名形式は数年前より署名バージョン4という新形式での認証に移行しており、旧来の認証方式である署名バージョン2は廃止に向かっています。

IIJオブジェクトストレージは長らく旧来の認証方式を提供していましたが、2021/2/18のリリースでついに署名バージョン4に対応しました。

これにより互換性が向上しました。なお、IIJオブジェクトストレージでは署名バージョン2の廃止予定は現時点(2021年2月)ではありません。

s3fsでIIJオブジェクトストレージに接続してみる

互換性の向上を確認するため、署名バージョン4でOSSからIIJオブジェクトストレージに接続してみましょう。

今回はクライアントの例として、s3fsを取り上ます。s3fsはオブジェクトストレージをファイルストレージのように扱えるソフトウェアです。

この手のソフトウェアですとgoofysなど新興のツールもありますが、s3fsが定番だと思います。s3fsは署名バージョン2で接続するオプションがありますが今回は指定しません。

注意: 本稿ではs3fsを検証していますが、s3fsはIIJオブジェクトストレージのサポートの対象ではありません。技術的なサポートは対応できません。ご利用は自己責任でお願いいたします。ご了承ください。

インストール

OSはUbuntu 16.04を利用しました。aptコマンドで簡単にインストールできました。

$ sudo apt install s3fs

aptでインストールされたs3fsは以下のバージョンでした。
$ dpkg -l | grep s3fs
ii s3fs 1.79+git90-g8f11507-2 amd64 FUSE-based file system backed by Amazon S3

設定

認証情報を設定します。通常のログインになぞらえるとアクセスキーIDはID、シークレットアクセスキーはパスワードにあたります。

echo <アクセスキーID>:<シークレットアクセスキー> > ${HOME}/.passwd-s3fs

バケットを準備する

バケットの作成をあらかじめ実施しておきます。IIJオブジェクトストレージでバケットを作成する場合REST APIを使えばもちろん作成できますが、より簡単な方法として管理コンソール、CLIツールを提供しています。

CLIツールはdagtoolsというもので、これは非常に簡単に使えるのですが今回は管理コンソールを使います。

管理コンソールでの作業イメージはこのような感じです。青枠のバケット作成ボタンを押して、バケット名を入力することでバケットが作成できます。

今回はs3fs-testというバケットを作成しました。

マウントしてみる

まずはマウントポイントのディレクトリを作成します。今回はオーナーもグループもrootで作成しています。

$ sudo mkdir -p /mnt/s3fs

いよいよマウントです。今回はシンプルにコマンドラインからマウントしてみます。自動マウントをしたい場合はfstabの編集をするなど対応をしますが今回は割愛します。

sudoは必須ではないのですが、今回は後の検証の都合で付けています。

sudo s3fs s3fs-test /mnt/s3fs -o url="https://ap1.dag.iijgio.com" -o endpoint="ap1"

オプションの”-o url”は、IIJオブジェクトストレージのエンドポイントを指定します。”-o endpoint”は名前からはわかり難いのですがリージョン名を指定します。

IIJオブジェクトストレージのリージョンは”ap1”(西日本リージョン)を指定しました。

これでマウントができました。容量を確認してみましょう。

Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 7.9M 388M 2% /run
/dev/mapper/vagrant--vg-root 62G 3.9G 55G 7% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/sda1 720M 59M 625M 9% /boot
tmpfs 396M 0 396M 0% /run/user/1000
s3fs 256T 0 256T 0% /mnt/s3fs

一番下の行がs3fsでマウントしたファイルシステムの情報です。256TBと表示されています。この上限を突破した場合にどのような挙動となるのか興味はありますが今回は検証してません。

簡単に動作確認をしてみます(sudoは省略)。

$ ls /mnt/s3fs/

$ touch /mnt/s3fs/testfile.txt

$ echo "iij-object-storage" > /mnt/s3fs/testfile.txt

$ cat /mnt/s3fs/testfile.txt
iij-object-storage

$ rm /mnt/s3fs/testfile.txt

$ ls /mnt/s3fs/testfile.txt
ls: cannot access '/mnt/s3fs/testfile.txt': No such file or directory

ファイルの書き込み、読み込み、削除ができました。

署名バージョン4でほんとにリクエストがきているのか?

マウント時のURLをhttpに変更し、リクエストをtcpdumpでのぞいてみました。赤線を引いている箇所をみると、AWS4-HMAC-SHA256でAuthorization(認証)ヘッダが送られてきています。

AWSの署名バージョン4の形式でリクエストを受け、処理が実行できていることが分かります。

バックアップしてみる

バックアップといえばrsyncということで、/var/log/をバックアップしてみようと思います。

/var/log/ 直下はこんな状況です。

$ ls -ls /var/log/
total 1200
4 -rw-r--r-- 1 root root 2948 Feb 4 14:31 alternatives.log
0 -rw-r----- 1 root adm 0 Feb 6 06:25 apport.log
4 -rw-r----- 1 root adm 1643 Feb 5 04:02 apport.log.1
4 drwxr-xr-x 2 root root 4096 Feb 2 01:54 apt
28 -rw-r----- 1 syslog adm 25066 Feb 8 10:03 auth.log
160 -rw-r----- 1 syslog adm 158047 Feb 7 06:25 auth.log.1
0 -rw-r--r-- 1 root root 0 Feb 2 02:11 boot.log
0 -rw-r--r-- 1 root root 0 Feb 2 02:11 bootstrap.log
0 -rw------- 1 root utmp 0 Feb 2 02:11 btmp
0 -rw-r----- 1 root adm 0 Feb 2 02:11 dmesg
32 -rw-r--r-- 1 root root 32021 Feb 5 02:57 dpkg.log
0 -rw-r--r-- 1 root root 0 Feb 2 02:11 faillog
4 drwxr-xr-x 2 root root 4096 Feb 2 01:54 fsck
52 -rw-r----- 1 syslog adm 52410 Feb 8 10:00 kern.log
568 -rw-r----- 1 syslog adm 580138 Feb 5 04:55 kern.log.1
4 -rw-rw-r-- 1 root utmp 292292 Feb 8 10:01 lastlog
4 drwxr-xr-x 2 root root 4096 Dec 7 2017 lxd
4 drwxr-x--- 2 root adm 4096 Oct 28 12:48 samba
76 -rw-r----- 1 syslog adm 76235 Feb 8 10:01 syslog
8 -rw-r----- 1 syslog adm 4373 Feb 8 06:25 syslog.1
4 -rw-r----- 1 syslog adm 880 Feb 7 06:25 syslog.2.gz
176 -rw-r----- 1 syslog adm 177370 Feb 6 06:25 syslog.3.gz
4 -rw-r--r-- 1 root root 61 Feb 8 10:00 vboxadd-setup.log
4 -rw-r--r-- 1 root root 61 Feb 4 14:12 vboxadd-setup.log.1
4 -rw-r--r-- 1 root root 61 Feb 4 14:07 vboxadd-setup.log.2
4 -rw-r--r-- 1 root root 61 Feb 4 14:02 vboxadd-setup.log.3
4 -rw-r--r-- 1 root root 61 Feb 4 13:51 vboxadd-setup.log.4
48 -rw-rw-r-- 1 root utmp 43008 Feb 8 10:01 wtmp

バックアップ用のディレクトリをs3fsのマウントポイントに作ります。そのディレクトリにrsyncでデータをバックアップしてみます。
$ sudo mkdir /mnt/s3fs/log-buckup
$ sudo rsync -va /var/log/ /mnt/s3fs/log-buckup/
sending incremental file list
./
alternatives.log
apport.log
apport.log.1
auth.log
auth.log.1
boot.log
bootstrap.log
btmp
dmesg
dpkg.log
faillog
kern.log
kern.log.1
lastlog
syslog
syslog.1
syslog.2.gz
syslog.3.gz
vboxadd-setup.log
vboxadd-setup.log.1
vboxadd-setup.log.2
vboxadd-setup.log.3
vboxadd-setup.log.4
wtmp
apt/
apt/history.log
apt/term.log
fsck/
fsck/checkfs
fsck/checkroot
lxd/
samba/

sent 1,466,965 bytes received 571 bytes 15,865.25 bytes/sec
total size is 1,464,506 speedup is 1.00

ちゃんとバックアップできました。ユーザもグループも正しくコピーされています。
$ sudo ls -ls /mnt/s3fs/log-buckup/
total 1425
3 -rw-r--r-- 1 root root 2948 Feb 4 14:31 alternatives.log
1 -rw-r----- 1 root adm 0 Feb 6 06:25 apport.log
2 -rw-r----- 1 root adm 1643 Feb 5 04:02 apport.log.1
1 drwxr-xr-x 1 root root 0 Feb 2 01:54 apt
26 -rw-r----- 1 syslog adm 26239 Feb 8 10:12 auth.log
155 -rw-r----- 1 syslog adm 158047 Feb 7 06:25 auth.log.1
1 -rw-r--r-- 1 root root 0 Feb 2 02:11 boot.log
1 -rw-r--r-- 1 root root 0 Feb 2 02:11 bootstrap.log
1 -rw------- 1 root utmp 0 Feb 2 02:11 btmp
1 -rw-r----- 1 root adm 0 Feb 2 02:11 dmesg
32 -rw-r--r-- 1 root root 32021 Feb 5 02:57 dpkg.log
1 -rw-r--r-- 1 root root 0 Feb 2 02:11 faillog
1 drwxr-xr-x 1 root root 0 Feb 2 01:54 fsck
52 -rw-r----- 1 syslog adm 52410 Feb 8 10:00 kern.log
567 -rw-r----- 1 syslog adm 580138 Feb 5 04:55 kern.log.1
286 -rw-rw-r-- 1 root utmp 292292 Feb 8 10:01 lastlog
1 drwxr-xr-x 1 root root 0 Dec 7 2017 lxd
1 drwxr-x--- 1 root adm 0 Oct 28 12:48 samba
75 -rw-r----- 1 syslog adm 76235 Feb 8 10:01 syslog
5 -rw-r----- 1 syslog adm 4373 Feb 8 06:25 syslog.1
1 -rw-r----- 1 syslog adm 880 Feb 7 06:25 syslog.2.gz
174 -rw-r----- 1 syslog adm 177370 Feb 6 06:25 syslog.3.gz
1 -rw-r--r-- 1 root root 61 Feb 8 10:00 vboxadd-setup.log
1 -rw-r--r-- 1 root root 61 Feb 4 14:12 vboxadd-setup.log.1
1 -rw-r--r-- 1 root root 61 Feb 4 14:07 vboxadd-setup.log.2
1 -rw-r--r-- 1 root root 61 Feb 4 14:02 vboxadd-setup.log.3
1 -rw-r--r-- 1 root root 61 Feb 4 13:51 vboxadd-setup.log.4
43 -rw-rw-r-- 1 root utmp 43008 Feb 8 10:01 wtmp

まとめ

IIJオブジェクトストレージは署名バージョン4に対応しました。互換性が向上したことを確かめるため今回はs3fsとの接続を試してみました。無事に接続することができました。繰り返しとなりますがIIJオブジェクトストレージとしてs3fsは正式にサポートしません。ですがIIJオブジェクトストレージがAWS s3に対し今回の検証範囲においては互換性があることがご理解いただけたと思います。

本サービスに興味を持たれた方は弊社までお問い合わせください。

関連リンク

寺田 充毅

2021年03月01日 月曜日

2013年からオブジェクトストレージの開発を担当。最近はコードよりも資料を書いてる時間が増えている。趣味はギターと農業。

Related
関連記事