Storj DCS オブジェクトストレージ
最終更新日 2021-05-04
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 バケットを利用できるようにするには、以下の手順に従ってください。
新規サービスを作成する
新規サービスを作成する手順に従ってください。
- 新しいドメインとホストを作成する場合、以下を行います:
- Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例:
cdn.example.com
)。 - Origins ページの Hosts フィールドに、バケットを含む
<BUCKET>.gateway.<REGION>.storjshare.io
の形式を使用して Storj DCS ゲートウェイエンドポイントの IP アドレスまたはホスト名を入力します (例:origin.gateway.us1.storjshare.io
)。
- Create a domain ページの Domain Name フィールドに、URL として使用するホスト名を入力します (例:
- Edit this host ページで ホストの詳細を編集する場合、以下を行ってください。
- まだ入力されていない場合は、Name フィールドに分かりやすい任意のサービスの名前を入力します。
- Address フィールドに、Storj DCS ゲートウェイエンドポイントの IP アドレスまたはホスト名が入力されていることを確認します。この情報はホスト作成時に入力されたものです。
- トランスポートレイヤーセキュリティ (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 エイリアスを作成します (例: cdn.example.com
に対する global-nossl.fastly.net
の CNAME)。
Fastly は、明示的な Cache-Control
ヘッダーのないコンテンツを1時間にわたってキャッシュします。キャッシュヘッダーを送信しているかどうかは、curl コマンドを使用して確認することができます。例:
1$ curl -I https://cdn.example.com2
3Accept-Ranges: bytes4Content-Length: 2505Content-Type: application/xml6Server: MinIO/DEVELOPMENT.GOGET7Vary: Origin8Date: 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 フィールドに以下のコードを入力します (特定の値は、お客様自身のバケットに関連するものに変更してください)。
1declare local var.accessKey STRING;2declare local var.secretKey STRING;3declare local var.storjBucket STRING;4declare local var.storjGateway STRING;5declare local var.region STRING;6declare local var.canonicalHeaders STRING;7declare local var.signedHeaders STRING;8declare local var.canonicalRequest STRING;9declare local var.canonicalQuery STRING;10declare local var.stringToSign STRING;11declare local var.dateStamp STRING;12declare local var.signature STRING;13declare local var.scope STRING;14
15
16set var.accessKey = "YOUR_ACCESS_KEY"; # Change this value to your own data17set var.secretKey = "YOUR_SECRET_KEY"; # Change this value to your own data18set var.storjBucket = "YOUR_BUCKET_NAME"; # Change this value to your own data19set var.storjGateway = "STORJ-DCS_GATEWAY"; # Change this value to your own data20set var.region = "decentralized";21
22
23if (req.method == "GET" && !req.backend.is_shield) {24
25 set bereq.http.x-amz-content-sha256 = digest.hash_sha256("");26 set bereq.http.x-amz-date = strftime({"%Y%m%dT%H%M%SZ"}, now);27 set bereq.http.host = var.storjBucket "." var.storjGateway;28 set bereq.url = querystring.remove(bereq.url);29 set bereq.url = regsuball(urlencode(urldecode(bereq.url.path)), {"%2F"}, "/");30 set var.dateStamp = strftime({"%Y%m%d"}, now);31 set var.canonicalHeaders = ""32 "host:" bereq.http.host LF33 "x-amz-content-sha256:" bereq.http.x-amz-content-sha256 LF34 "x-amz-date:" bereq.http.x-amz-date LF35 ;36 set var.canonicalQuery = "";37 set var.signedHeaders = "host;x-amz-content-sha256;x-amz-date";38 set var.canonicalRequest = ""39 "GET" LF40 bereq.url.path LF41 var.canonicalQuery LF42 var.canonicalHeaders LF43 var.signedHeaders LF44 digest.hash_sha256("")45 ;46
47 set var.scope = var.dateStamp "/" var.region "/s3/aws4_request";48
49
50 set var.stringToSign = ""51 "AWS4-HMAC-SHA256" LF52 bereq.http.x-amz-date LF53 var.scope LF54 regsub(digest.hash_sha256(var.canonicalRequest),"^0x", "")55 ;56
57 set var.signature = digest.awsv4_hmac(58 var.secretKey,59 var.dateStamp,60 var.region,61 "s3",62 var.stringToSign63 );64
65
66 set bereq.http.Authorization = "AWS4-HMAC-SHA256 "67 "Credential=" var.accessKey "/" var.scope ", "68 "SignedHeaders=" var.signedHeaders ", "69 "Signature=" + regsub(var.signature,"^0x", "")70 ;71
72 unset bereq.http.Accept;73 unset bereq.http.Accept-Language;74 unset bereq.http.User-Agent;75 unset bereq.http.Fastly-Client-IP;76}