分散型クラウドストレージのStorj DCSを使ってみる

2022.04.22

Storj DCSというクラウドストレージのサービスを知ったので実際に使ってみようかと思います。

Storj DCSは、

  • オープンソース
  • 集中型データセンターに保存されず、分散型ネットワークのノード上に断片に分割され保存される
  • デフォルト暗号化(アップロード前に暗号化される)
  • S3互換

といった特徴があります。

StorjDCSにアップロードされると、デフォルトで暗号化され、80以上の部分に分割され、ほぼ100か国の数千の多様なノードとISPに分散されます。単一障害点や一元化された場所はありません。つまり、停止、ダウンタイム、ビットロット、ランサムウェア、およびデータ侵害は事実上不可能です。何らかの理由でノードがオフラインになった場合、配布された29個の部分からファイルを再構成できます

といったように、開発者がより安全でプライベートなアプリケーションを構築することにとても役に立つと言われていました。

現在、150GBまではFreeプランで使えたので、実際にファイルのアップロード、ダウンロードなどから試してみたいと思います。

アカウント作成

サービスのトップページからメールアドレスとパスワードを入力してStart for Freeボタンを押して作成します。

※ 入力したメールアドレス宛に確認メールが届くので、そこのリンクをクリックして登録を完了させることになります。

メールアドレスの確認リンクを押すと、上記画面にリダイレクトされます。

CONTINUE IN WEBをクリックすると

上記のように管理コンソールにアクセスできるようになります、。

CONTINUE IN CLIをクリックすると

Uplink CLIというクライアントツールを使ってファイルを操作するために必要なSatellite AddressAPI Keyが発行されます。 これらはかくじ保存しておく必要があります。

コピー後、Nextをクリックすると、クライアントツールをインストールする方法が記載されたページが表示されます。

ブラウザからの操作

CONTINUE IN WEBをクリックして、管理コンソールから操作してみます。

ブラウザを介してオブジェクトを直接アップロードおよび管理することをサポートしていて、S3と同じようにバケットを作成して、その中にファイルをアップロードしていきます。 バケットは、プロジェクト内のオブジェクトとそのメタデータを保存するための単なるコンテナです.

バケット作成

バケットの管理ページからNew Bucketをクリックするとダイアログが起動するので、バケット名を入力して作成します。

バケット一覧に作成したものばあるのか確認します。

暗号化パスフレーズ保存

作成したバケットをクリックすると

暗号化パスフレーズを保存してください と注意書きされた画面が表示されます。 暗号化パスフレーズは、Storjにアップロードするデータを暗号化し、アクセスするために使用されます。

Generate a new passphraseタブの箇所では、クライアント側に自動的にパスフレーズを生成してくれます。

COPYをクリックするとパスフレーズをクリップボードにコピーできますし、Download as a text fileをクリックすることでローカルPCにテキストファイルとしてダウンロードすることができます。

Enter your own passphraseタブの箇所では、独自で作成したパスフレーズを入力して使用することができます。

どちらにせよ、暗号化パスフレーズは保存しておく必要があります。

保存後、Nextボタンをクリックするとオブジェクトビューに移動します。

ファイルのアップロード

ローカルPCにあるファイルをアップロードしてみます。

オブジェクトビューの Uploadをクリックすることでアップロードできます。 もしくは、直接ファイルをドロップしてもアップロードすることができます。

アップロードすると、上記のようにファイルの情報が表示されます。 ファイルを保存しているノードの情報も可視化されますね。

ファイルのダウンロードとシェア

アップロードしたファイルは、ブラウザで一覧表示されます。

クリックすると、アップロードした時と同じようにファイルの情報ダイアログが立ち上がります。

DownloadをクリックするとローカルPCにファイルをダウンロードできます。

shareをクリックすると、このファイルにアクセスするためのURLが表示されます。 これはアップロードしたデータを共有するために使用するものとなっています。

一覧ページの各ファイルのリストにある3つの縦のドットをクリックし、shareのリンクをクリックしてオブジェクトを共有することもできます。

共有リンクにアクセスしてみると、

ファイルの一部がストレージノードのグローバルに分散されたネットワーク上のどこにあるかのレンダリングと、そのファイルのプレビューが含まれたページが表示されました。

次はクライアントツール(Uplink CLI)からファイルを操作する方法を試してみます。

Uplink CLIは、メタデータやパスデータなどのオブジェクトデータにエンドツーエンドの暗号化を使用しており、データと関連するメタデータにアクセスできるのは自分だけであることを意味しています

ダウンロード&インストール

ダウンロード方法を参考に、使用しているクライアントに合わせた方法でダウンロードしてインストールしましよう。

Access Grantsの作成

CLIからのアクセスに必要な権限を作成する必要があります。

アクセスページに移動し、Create Access Grant +をクリックします。。

作成するAccess Grantに名前を付けます。

次はアクセス許可を割り当てます。

  • Download
  • Upload
  • List
  • Delete

が実行できるオペレーションで、DurationはこのAccess Grantsの期限を決定します。 Bucketsではアクセス可能なバケットを選択できます。

試しにListだけできる権限にしてみます。

Continue in Browserをクリックすると、クライアント側のJavaScriptが暗号化パスフレーズを使用してアクセス許可を確定するようです。

パスフレーズを入力し、Nextをクリックします。

※ 独自の暗号化パスフレーズを入力するか、12ワードのニーモニックパスフレーズを生成します。暗号化パスフレーズは、作成後にリセットできないため、必ず保存してください

※ Storjは暗号化パスフレーズを認識または保存しないため、パスフレーズを紛失した場合、ファイルを回復できなくなることに注意してください

アクセス許可は1回だけ表示されます。この情報をパスワードマネージャーまたは機密情報を保存したい場所に保存します。

Access Grantを使用してUplink Cliを設定

各自の端末に合った方法でAccess Grantを使ってCLIが実行できるようにセットアップします。

set-up-uplink-cli

MacOSのコマンドでは

uplink access save main accessgrant.txt

のようになっていましたが、unknown command: "save" for "uplink access"というエラーがでて設定できませんでした。

Available commands:
    create      Create an access from the satellite UI
    export      Export an access to a file
    import      Import an existing access
    inspect     Inspect shows verbose details about an access
    list        List saved accesses
    register    Register an access grant for use with a hosted S3 compatible gateway and linksharing
    remove      Removes an access from local store
    restrict    Restrict an access
    revoke      Revoke an access
    setup       Wizard for setting up uplink from satellite UI
    use         Set default access to use

ということだったので、

uplink access import main accessgrant.txt

のようにimportを実行することで登録できるようです。

オブジェクト操作に関してのコマンドを実行してみる

バケットの作成は以下のコマンドを実行します。

uplink mb sj://<<バケット名>>

バケット、プレフィックス、またはオブジェクトをリストアップするには以下のコマンドを実行します。

uplink ls sj://<<バケット名>>
uplink ls sj://<<バケット名>>/<<オブジェクトのパス>>

ファイルやオブジェクトをストレージにコピーするには以下のコマンドを実行します。

uplink cp <<ローカルPCのファイルパス>> sj://<<バケット名>>

コマンドを実行したが、権限がたりないと

uplink: permission denied (metaclient: Unauthorized API credentials)

といったメッセージが返ってきます。

ブラウザからアップロードしたデータにCLIからアクセスできないとき

2つのアクセス許可で同じデータにアクセスできるようにする場合は、同じパスフレーズを使用する必要があります。 アクセス許可のパスフレーズが、データをアップロードしたパスフレーズと異なる場合、データにアクセスすることはできません

といった挙動になるので、CLIでAccess Grantsを作成するときは、ブラウザ操作した時に作成したパスフレーズを指定して作成すればアクセス可能になります。

さいごに

分散型クラウドストレージサービスであるStorjを使ってファイルを保存してみました。

ブロックチェーンの仕組みを使って暗号化された安全かつ手頃な価格で、従来の集中型クラウドオブジェクトストレージの代替手段と比較しても比類のないデータ保護とプライバシーを提供してくれるので、ストレージの選択肢として考えることがこれからあると思われます。

S3との互換性もあるというサービスですが、今回は試せなかったので次回試してみようと思っています。

参考