Storj DCS オブジェクトストレージ

Storj DCS は、Storj DCS S3 ゲートウェイを介して、パブリックおよびプライベート Storj バケットのオリジンとして使用できます。Storj Network 上に構築された Storj DCS は、S3 と互換性のある分散型オブジェクト・ストレージ・サービスで、デフォルトでエンドツーエンドの暗号化を提供します。

前提条件

Fastly サービスのオリジンとして Storj DCS を追加する前に、Storj DCS アカウントプロジェクトとアクセスの認証情報、オリジンとして機能するバケットを作成する必要があります。

Storj DCS をオリジンとして使用する

Storj DCS をオリジンとして使用し、Storj DCS S3 ゲートウェイ経由で Fastly を通じて Storj バケットを利用できるようにするには、以下の手順に従ってください。

新しいサービスの作成

新規サービスを作成する手順に従ってください。

  1. 新しいドメインとホストを作成する場合、以下を行います:
    • Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例: cdn.example.com)。
    • Origins ページの Hosts フィールドに、バケットを含む <BUCKET>.gateway.<REGION>.storjshare.io の形式を使用して Storj DCS ゲートウェイエンドポイントの IP アドレスまたはホスト名を入力します (例: origin.gateway.us1.storjshare.io)。
  2. Edit this host ページでホストの詳細を編集する場合、以下を行ってください。
    • まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
    • Address フィールドに、Storj DCS ゲートウェイエンドポイントの IP アドレスまたはホスト名が入力されていることを確認します。この情報はホスト作成時に入力されたものです。
  3. トランスポートレイヤーセキュリティ (TLS) のセクションでホストの情報を編集する場合、以下を行ってください。
    • Storj DCS S3 ゲートウェイに対して TLS を設定している場合、Enable TLS? をデフォルト設定の Yes のままにし、Fastly とオリジン間の接続を保護します。
    • SNI hostname フィールドで、Match the SNI hostname to the Certificate hostname のチェックボックスを選択します。ホスト作成時に入力したアドレスが表示されます。
    • Certificate hostname フィールドに、Storj DCS S3 ゲートウェイの IP アドレスまたはホスト名を入力します。

結果をテストする

デフォルトでは、yourdomain.global.prod.fastly.net と呼ばれる DNS マッピングが作成されます。上記の例では、cdn.example.com.global.prod.fastly.net となります。指定したドメイン名の DNS エイリアスを作成します (例: global-nossl.fastly.net に対する CNAME cdn.example.com)。

Fastly は、明示的な Cache-Control ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:

$ curl -I https://cdn.example.com
Accept-Ranges: bytes
Content-Length: 250
Content-Type: application/xml
Server: MinIO/DEVELOPMENT.GOGET
Vary: Origin
Date: Wed, 07 Oct 2020 02:31:27 GMT

この例では Cache-Control ヘッダーが設定されていないため、デフォルト TTL が適用されます。

より詳細なキャッシュコントロール

アセットの種類 (JavaScript ファイルや画像など) に応じてキャッシュ方法をより細かくコントロールする必要がある場合は、キャッシュの鮮度に関するドキュメントをご覧ください。

Storj DCS バケットをオリジンホストとして使う

Fastly でオリジンとして Storj DCS S3 ゲートウェイを使用するには、Amazon のヘッダーベース認証のバージョン4を実装する必要があります。これはカスタム VCL を使用して行うことができます。まずは AWS から以下の情報を入手します。

項目説明
バケット名プライベートバケットの名前。バケットからアイテムをダウンロードする際に、各オブジェクトの URL パスやホスト名に記載される文字列です。
アクセスキーバケットに対して少なくとも読み取り権限を持っている Storj DCS Access Grant に関連付けられたアクセスキー文字列。
シークレットキー上記のアクセスキーとペアになっているシークレットアクセスキー。

これらの情報が得られれば、VCL で適切なヘッダー値を計算することで、ヘッダー認証を使用してプライベートバケットに対して認証を行うように Fastly サービスを設定することができます。

重要

サービスの設定で、オリジンの Override host フィールドを空白にすることを検討してください。この設定を行うと、ここで示したスニペットのホストヘッダーが上書きされ、送信される情報を認証する署名が無効になる可能性があります。

まず、レギュラー VCL スニペットを作成します。Storj DCS Origin のような意味のある名前を付けます。スニペットを作成する際に、within subroutine を選択して配置を指定し、サブルーチンタイプとして miss を選択します。次に、VCL フィールドに以下のコードを入力します (特定の値は、お客様自身のバケットに関連するものに変更してください)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
declare local var.accessKey STRING;
declare local var.secretKey STRING;
declare local var.storjBucket STRING;
declare local var.storjGateway STRING;
declare local var.region STRING;
declare local var.canonicalHeaders STRING;
declare local var.signedHeaders STRING;
declare local var.canonicalRequest STRING;
declare local var.canonicalQuery STRING;
declare local var.stringToSign STRING;
declare local var.dateStamp STRING;
declare local var.signature STRING;
declare local var.scope STRING;
set var.accessKey = "YOUR_ACCESS_KEY"; # Change this value to your own data
set var.secretKey = "YOUR_SECRET_KEY"; # Change this value to your own data
set var.storjBucket = "YOUR_BUCKET_NAME"; # Change this value to your own data
set var.storjGateway = "STORJ-DCS_GATEWAY"; # Change this value to your own data
set var.region = "decentralized";
if (req.method == "GET" && !req.backend.is_shield) {
set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");
set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);
set bereq.http.host = var.storjBucket "." var.storjGateway;
set bereq.url = querystring.remove(bereq.url);
set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");
set var.dateStamp = strftime({"%Y%m%d"}, now);
set var.canonicalHeaders = ""
"host:" bereq.http.host LF
"x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF
"x-amz-date:" bereq.http.x-amz-date LF
;
set var.canonicalQuery = "";
set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";
set var.canonicalRequest = ""
"GET" LF
bereq.url.path LF
var.canonicalQuery LF
var.canonicalHeaders LF
var.signedHeaders LF
digest.hash_sha256("")
;
set var.scope = var.dateStamp "/" var.region "/s3/aws4_request";
set var.stringToSign = ""
"AWS4-HMAC-SHA256" LF
bereq.http.x-amz-date LF
var.scope LF
regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")
;
set var.signature = digest.awsv4_hmac(
var.secretKey,
var.dateStamp,
var.region,
"s3",
var.stringToSign
);
set bereq.http.Authorization = "AWS4-HMAC-SHA256 "
"Credential=" var.accessKey "/" var.scope ", "
"SignedHeaders=" var.signedHeaders ", "
"Signature=" + regsub(var.signature,"^0x", "")
;
unset bereq.http.Accept;
unset bereq.http.Accept-Language;
unset bereq.http.User-Agent;
unset bereq.http.Fastly-Client-IP;
}

翻訳についての注意事項
このガイドは役に立ちましたか?

このフォームを使用して機密性の高い情報を送信しないでください。サポートが必要な場合は、サポートチームまでご連絡ください。このフォームは reCAPTCHA によって保護されており、Google のプライバシーポリシー利用規約が適用されます。