セキュリティ上の理由から、バケットのデフォルトドメイン名を使用して特定の Object Storage Service (OSS) オブジェクトにアクセスすると、強制ダウンロードがトリガーされたり、ダウンロードが禁止されたりする可能性があります。これらのオブジェクトをブラウザでプレビューまたはダウンロードするには、カスタムドメイン名をバケットにマップし、カスタムドメイン名を使用してオブジェクトにアクセスする必要があります。カスタムドメイン名をマップしても、バケットのデフォルトドメイン名には影響しません。バケット内の OSS オブジェクトへのアクセスには、引き続きデフォルトドメイン名を使用できます。
シナリオ
オブジェクトのプレビュー: セキュリティ上の目的で、バケットのデフォルトドメイン名を使用して OSS オブジェクトにアクセスすると、OSS は自動的にダウンロードレスポンスヘッダーを追加します。これにより、ブラウザはオブジェクトのダウンロードを強制的に行います。ただし、カスタムドメイン名を使用して同じオブジェクトにアクセスする場合、OSS はダウンロードレスポンスヘッダーを追加しません。これにより、オブジェクトをダウンロードする代わりに、ブラウザで直接プレビューできるようになります。デフォルトドメイン名を使用して OSS オブジェクトにアクセスすることでトリガーされる自動ダウンロードの有効時間と範囲については、「付録: 強制ダウンロードのためにトリガーされる x-oss-ec ルール」をご参照ください。
.apk または .ipa オブジェクトへのアクセス: セキュリティ上の目的で、バケットのデフォルトドメイン名を使用して .apk または .ipa オブジェクトにアクセスすると、ApkDownloadForbidden エラーコードとともに 400 エラーが発生します。ただし、カスタムドメイン名を使用して同じオブジェクトにアクセスしても制限はありません。デフォルトドメイン名を使用して OSS オブジェクトにアクセスすることでトリガーされるブロックされたアクセスの有効時間と範囲については、「付録」をご参照ください。
ブランドイメージとプロ意識の向上: カスタムドメイン名を OSS バケットにマップすると、ブランドアイデンティティが強化され、プロ意識が強化され、ユーザーの信頼が築かれます。
ドメイン名ブロックのバイパス: 一部のアプリケーションまたはプラットフォームでは、バケットのデフォルトドメイン名がブロックされる場合があります。OSS バケット内のリソースへのアクセスを確保するために、カスタムドメイン名をバケットにマップすることをお勧めします。
アクセス利便性の向上: カスタムドメイン名は、デフォルトドメイン名よりも覚えやすいです。アクセスを簡素化し、使いやすさを向上させ、リソース共有をより効率的にします。
URL の永続性の確保: カスタムドメイン名を OSS バケットにマップすると、ストレージの場所やサービスが変更された場合でも、リソースへのアクセスに同じドメイン名を引き続き使用できます。これにより、リソース URL の永続性が確保され、リソースへの長期的なアクセスと使用が可能になります。
制限事項
漢字を含むカスタムドメイン名はサポートされていません。
画像処理用にすでにマップされているカスタムドメイン名は、バケットに再度マップすることはできません。
各カスタムドメイン名は 1 つのバケットにのみマップできます。
各バケットには最大 100 個のカスタムドメイン名をマップできます。
OSS コンソールは、ワイルドカードドメイン名をバケットにマップすることをサポートしていません。たとえば、アスタリスク (*) で始まるドメイン名はバケットにマップできません。このようなドメイン名がマップされている場合、そのドメイン名のすべてのサブドメインはバケットを指します。ただし、Alibaba Cloud CDN を使用してバケットへのアクセスを高速化する場合、ワイルドカードドメイン名をバケットにマップできます。この場合、ドメイン名は OSS コンソールに表示されません。
前提条件
OSS バケットが作成されている。詳細については、「バケットを作成する」をご参照ください。
カスタムドメイン名が登録されている。サードパーティプロバイダに登録されているドメイン名を Alibaba Cloud のバケットにマップできます。ドメイン名がない場合は、Alibaba Cloud Domains サービスプラットフォームを使用して登録できます。詳細については、「Alibaba Cloud でドメイン名を登録する」をご参照ください。
ドメイン名にインターネットコンテンツプロバイダ (ICP) ファイリングが取得されており、ドメイン名のマップ先となるバケットが中国本土にある場合は、Alibaba Cloud アカウントの実名登録が完了している。IPC ファイリングと実名登録の詳細については、「ICP ファイリングプロセス」および「Alibaba Cloud アカウントの実名登録に関する FAQ」をご参照ください。
手順
ステップ 1: カスタムドメイン名をマップする
カスタムドメイン名をバケットにマップするプロセスは、ドメインレジストラと所有アカウントによって異なります。Alibaba Cloud WHOIS ページでドメインレジストラをクエリし、Alibaba Cloud DNS コンソールで関連付けられている所有アカウントを確認できます。
現在の Alibaba Cloud アカウントを使用して登録されたドメイン名をマップする
現在の Alibaba Cloud アカウントを使用して登録されたカスタムドメイン名をマップするには、次の手順を実行します。
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。
ドメイン名カスタムドメイン名のマッピング ページで、 をクリックします。
カスタムドメイン名のマッピング パネルで、
static.example.com
などのカスタムドメイン名を入力し、[確認] をクリックします。CNAME レコードを追加して、
static.example.com
ドメイン名をバケットのデフォルトドメイン名にマップします。CNAME レコードを自動的に追加する
カスタムドメイン名のマッピング パネルで、CNAMEレコードを自動的に追加する をオンにします。
トグルをオンにすると、次の図に示すように、Alibaba Cloud DNS に CNAME レコードが自動的に追加されます。
CNAME レコードを手動で追加する
カスタムドメイン名のマッピング パネルで CNAMEレコードを自動的に追加する をオンにしない場合は、次の手順を使用して、Alibaba Cloud DNS コンソール に CNAME レコードを手動で追加します。
Alibaba Cloud DNS コンソール にログインします。
[パブリック DNS 解決 >] [権限のある DNS 解決] を選択します。[権限のあるドメイン名] タブで、ドメイン名を見つけて、[アクション] 列の [DNS 設定] をクリックします。
[DNS 設定] タブで、[DNS レコードを追加] をクリックします。[DNS レコードを追加] ダイアログボックスで、次の表に示すパラメータを構成します。
パラメータ
説明
例
[レコードタイプ]
追加する DNS レコードのタイプ。ドメイン名を別のドメイン名にマップするには、CNAME を選択します。
CNAME
[ホスト名]
ドメインのプレフィックス。
static
[DNS リクエストソース]
ドメイン名の解決に使用する DNS 回線。DNS システムが最適な回線を自動的に選択できるように、このパラメータには [デフォルト] を選択することをお勧めします。
デフォルト
[レコード値]
バケットのパブリックドメイン名。バケットのドメイン名は <bucketname>.<endpoint> 形式です。さまざまなリージョンのパブリックエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
examplebucket.oss-cn-hangzhou.aliyuncs.com
[TTL]
レコードの更新間隔。デフォルト値を保持します。
説明TTL 期間の設定は、有効になるまでに遅延が発生する場合があります。
10 分
[OK] をクリックします。
次の図に示すように、Alibaba Cloud DNS のドメイン名の DNS レコードリストに CNAME レコードが表示されます。
別の Alibaba Cloud アカウントを使用して登録されたドメイン名をマップする
Alibaba Cloud A を使用して登録されたドメイン名を Alibaba Cloud B を使用して作成された OSS バケットにマップするには、次の手順を実行します。
Alibaba Cloud アカウント B を使用して、TXT レコードのホスト名と値を取得します。
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。
[ドメイン名] ページで、カスタムドメイン名のマッピング をクリックします。
カスタムドメイン名のマッピング パネルで、Alibaba Cloud A を使用して登録されたドメイン名 (例:
static.example.com
) を入力し、[ホスト名] パラメータと [レコード値] パラメータの値をコピーします。
Alibaba Cloud アカウント A を使用して TXT レコードを追加します。
Alibaba Cloud DNS コンソール にログインします。
ドメインリストで、マップするドメイン名を見つけて、[アクション] 列の [DNS 設定] をクリックします。
[DNS 設定] タブで、[DNS レコードを追加] をクリックします。[DNS レコードを追加] ダイアログボックスで、次の表に示すパラメータを構成します。
パラメータ
説明
例
[レコードタイプ]
追加する DNS レコードのタイプ。TXT を選択します。
TXT
[ホスト名]
ルートドメイン名は自動的に入力されます。ルートドメインの部分を手動で入力する必要はありません。
ルートドメイン名をマップするには、
_dnsauth
と入力します。たとえば、ルートドメイン名がexample.com
の場合は、テキストボックスに_dnsauth
と入力します。サブドメインをマップするには、
_dnsauth.<ドメインプレフィックス>
と入力します。たとえば、static.example.com
をバケットにマップするには、テキストボックスに_dnsauth.static
と入力します。
_dnsauth.static
[DNS リクエストソース]
ドメイン名の解決に使用する DNS 回線。DNS システムが最適な回線を自動的に選択できるように、このパラメータには [デフォルト] を選択することをお勧めします。
デフォルト
[レコード値]
Alibaba Cloud アカウント B を使用して以前に記録された TXT レコードのレコード値 (CnameToken)。
b0d777f7ccddeae93358d908ed59****
[TTL]
レコードの更新間隔。デフォルト値を保持します。
説明TTL 期間の設定は、有効になるまでに遅延が発生する場合があります。
10 分
[OK] をクリックします。
Alibaba Cloud アカウント B で OSS コンソールにログインし、カスタムドメイン名のマッピング パネルに移動します。ドメイン名の所有権の確認 をクリックします。
Alibaba Cloud アカウント A を使用して CNAME レコードを追加します。
ドメインリストで、マップするドメイン名を見つけて、[アクション] 列の [DNS 設定] をクリックします。
[DNS 設定] タブで、[DNS レコードを追加] をクリックします。[DNS レコードを追加] ダイアログボックスで、次の表に示すパラメータを構成します。
パラメータ
説明
例
[レコードタイプ]
追加する DNS レコードのタイプ。CNAME を選択します。
CNAME
[ホスト名]
ホスト名。
ドメイン名が
example.com
などのルートドメイン名である場合は、テキストボックスに @ と入力します。ドメイン名がサブドメイン名である場合は、テキストボックスにサブドメイン名のプレフィックスを入力します。たとえば、サブドメイン名が
static.example.com
の場合は、static と入力します。
static
[DNS リクエストソース]
ドメイン名の解決に使用する DNS 回線。DNS システムが最適な回線を自動的に選択できるように、このパラメータには [デフォルト] を選択することをお勧めします。
デフォルト
[レコード値]
バケットのパブリックドメイン名。バケットのドメイン名は <bucketname>.<endpoint> 形式です。さまざまなリージョンのパブリックエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
examplebucket.oss-cn-hangzhou.aliyuncs.com
[TTL]
レコードの更新間隔。デフォルト値を保持します。
説明TTL 期間の設定は、有効になるまでに遅延が発生する場合があります。
10 分
[OK] をクリックします。
サードパーティプロバイダに登録されているドメイン名をマップする
サードパーティプロバイダに登録されているドメイン名を OSS バケットにマップするには、次の手順を実行します。
OSS コンソールで、ホスト名と値を TXT レコードとして生成します。
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、バケットリスト をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、バケットの設定 > ドメイン名管理 を選択します。
ドメイン名カスタムドメイン名のマッピング ページで、 をクリックします。
カスタムドメイン名のマッピング パネルで、サードパーティプロバイダに登録されているカスタムドメイン名 (例:
static.example.com
) を入力し、[ホスト名] パラメータと [レコード値] パラメータの値をコピーします。
ドメインレジストラの DNS プラットフォームで、次の表に示すパラメータを使用して TXT レコードを追加します。
パラメータ
説明
例
レコードタイプ
追加する DNS レコードのタイプ。TXT を選択します。
TXT
ホスト名
DNS プラットフォームがルートドメイン名を自動的に入力する場合、ルートドメインの部分を手動で入力する必要はありません。
ルートドメイン名をマップするには、
_dnsauth
と入力します。たとえば、ルートドメイン名がexample.com
の場合は、テキストボックスに_dnsauth
と入力します。サブドメインをマップするには、
_dnsauth.<ドメインプレフィックス>
と入力します。たとえば、static.example.com
をバケットにマップするには、テキストボックスに_dnsauth.static
と入力します。
_dnsauth.static
レコード値
OSS から以前に記録された TXT レコードのレコード値 (CnameToken)。
b0d777f7ccddeae93358d908ed59****
OSS コンソールの カスタムドメイン名のマッピング パネルに戻ります。ドメイン名の所有権の確認 をクリックします。
ドメインレジストラの DNS プラットフォームで、次の表に示すパラメータを使用して CNAME レコードを追加します。
パラメータ
説明
例
レコードタイプ
追加する DNS レコードのタイプ。CNAME を選択します。
CNAME
ホスト名
ホスト名。
ドメイン名が
example.com
などのルートドメイン名である場合は、テキストボックスに @ と入力します。ドメイン名がサブドメイン名である場合は、テキストボックスにサブドメイン名のプレフィックスを入力します。たとえば、サブドメイン名が
static.example.com
の場合は、static と入力します。
static
レコード値
バケットのパブリックドメイン名。バケットのドメイン名は <bucketname>.<endpoint> 形式です。さまざまなリージョンのパブリックエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
examplebucket.oss-cn-hangzhou.aliyuncs.com
ステップ 2: カスタムドメイン名を確認する
カスタムドメイン名をバケットにマップすると、カスタムドメイン名を使用して行われたリクエストはすべて、DNS を介してバケットのデフォルトドメイン名に解決されます。カスタムドメイン名の DNS レコードを確認するには、nslookup
コマンドまたは dig
コマンドを実行できます。
nslookup
次のコマンドの static.example.com
を実際のドメイン名に置き換えて、コマンドを実行します。
nslookup -type=CNAME static.example.com
コマンド出力にバケットのパブリックドメイン名が表示されている場合、DNS レコードは有効になっています。
dig
次のコマンドの static.example.com
を実際のドメイン名に置き換えて、コマンドを実行します。
dig CNAME static.example.com
コマンド出力にバケットのパブリックドメイン名が表示されている場合、DNS レコードは有効になっています。
ステップ 3: カスタムドメイン名を使用する
カスタムドメイン名の DNS レコードが有効になったら、HTTP プロトコルとカスタムドメイン名を使用して URL を構築できます。これには、署名と有効期間が含まれます。URL 形式は http://YourDomain/ObjectName?SignatureInformation
です。その後、URL を使用して OSS バケット内のオブジェクトにアクセスできます。
プレサイン URL を取得します。
OSS コンソールを使用する
OSS コンソール にログインします。
左側のナビゲーションウィンドウで、[バケット] をクリックします。[バケット] ページで、バケットの名前をクリックします。
左側のナビゲーションツリーで、
を選択します。[オブジェクト] ページで、オブジェクトの名前をクリックします。
[詳細の表示] パネルで、[カスタムドメイン名] フィールドのバケットにマップされているカスタムドメイン名を選択し、その他のパラメータのデフォルト設定を保持してから、[オブジェクト URL をコピー] をクリックします。
ossbrowser を使用する
ossbrowser を使用して、OSS コンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。ossbrowser の画面上の指示に従って、プレサイン URL を取得できます。ossbrowser のダウンロード方法については、「ossbrowser 1.0」をご参照ください。
カスタムドメイン名を使用して ossbrowser にログインします。
オブジェクトの URL を取得します。
OSS SDK を使用する
カスタムドメイン名を使用して OssClient インスタンスを作成し、プレサイン URL を生成できます。
Java
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import java.net.URL; import java.util.Date; public class Demo { public static void main(String[] args) throws Throwable { // カスタムドメイン名を指定します。例: static.example.com。 String endpoint = "http://static.example.com"; // エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。 String region = "cn-hangzhou"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数が構成されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // OSSClient インスタンスを作成します。 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); // このパラメータを true に設定して、CNAME を有効にします。 clientBuilderConfiguration.setSupportCname(true); // V4 署名アルゴリズムの使用を明示的に宣言します clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // プレサイン URL の有効期間を指定します。単位: ミリ秒。この例では、有効期間は 1 時間に設定されています。 Date expiration = new Date(new Date().getTime() + 3600 * 1000L); // HTTP GET リクエストを許可するプレサイン URL を生成します。この例では、追加のリクエストヘッダーは指定されていません。他のユーザーは、ブラウザを使用して関連コンテンツに直接アクセスできます。 String bucketName = "examplebucket"; String objectName = "demo.png"; URL url = ossClient.generatePresignedUrl(bucketName, objectName, expiration); System.out.println(url); } catch (OSSException oe) { System.out.println("OSSException がキャッチされました。これは、リクエストが OSS に到達しましたが、" + "何らかの理由でエラーレスポンスで拒否されたことを意味します。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエスト ID:" + oe.getRequestId()); System.out.println("ホスト ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("ClientException がキャッチされました。これは、クライアントが OSS と通信しようとしているときに、" + "ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。"); System.out.println("エラーメッセージ:" + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
Python
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンを指定します。例: cn-hangzhou。V4 署名アルゴリズムを使用する場合は、このパラメータが必要です。 region = "cn-hangzhou" # カスタムドメイン名 (例: static.example.com) を指定します。 endpoint = 'http://static.example.com' # yourBucketName をバケットの名前に置き換えます。 bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region, is_cname=True) # オブジェクトのフルパス (例: exampledir/exampleobject.txt) を指定します。オブジェクトのフルパスにバケット名を含めないでください。 object_name = 'exampledir/exampleobject.txt' # オブジェクトをダウンロードするためのプレサイン URL を生成します。URL は 600 秒間有効です。 # プレサイン URL が生成されると、OSS はオブジェクトのフルパスにあるスラッシュ (/) をエスケープ文字として識別します。その結果、生成されたプレサイン URL は直接使用できません。 # slash_safe パラメータを True に設定します。このようにして、OSS はオブジェクトのフルパスにあるスラッシュ (/) をエスケープ文字として識別せず、プレサイン URL を直接使用できます。 url = bucket.sign_url('GET', object_name, 600, slash_safe=True, params=params) print('プレサイン URL のアドレスは次のとおりです。', url)
Node.js
const OSS = require("ali-oss"); // 署名付き URL を生成するために使用される関数を指定します。 async function generateSignatureUrl(fileName) { // 署名付き URL を取得します。 const client = await new OSS({ // バケットにマップするカスタムドメイン名を指定します。 endpoint: 'http://static.example.com', // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 accessKeyId: process.env.OSS_ACCESS_KEY_ID, accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET, bucket: 'examplebucket', // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。 region: 'oss-cn-hangzhou', authorizationV4: true, cname: true }); return await client.signatureUrlV4('GET', 3600, { headers: {} // 実際のリクエストヘッダーに基づいてリクエストヘッダーを指定します。 }, fileName); } // 関数を呼び出し、オブジェクトの名前を渡します。 generateSignatureUrl('yourFileName').then(url => { console.log('生成された署名付き URL:', url); }).catch(err => { console.error('署名付き URL の生成エラー:', err); });
PHP
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\OssClient; use OSS\Core\OssException; use OSS\Http\RequestCore; use OSS\Http\ResponseCore; use OSS\Credentials\EnvironmentVariableCredentialsProvider; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID 環境変数と OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 $provider = new EnvironmentVariableCredentialsProvider(); // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを http://static.example.com に設定します。 $endpoint = "http://static.example.com"; // バケットの名前を指定します。 $bucket= "examplebucket"; // オブジェクトのフルパスを指定します。フルパスにバケット名を含めないでください。 $object = "exampleobject.txt"; // 署名付き URL の有効期間を 600 秒に設定します。最大値: 32400。 $timeout = 600; try { $config = array( "provider" => $provider, "endpoint" => $endpoint, 'signatureVersion'=>OssClient::OSS_SIGNATURE_VERSION_V4, "cname" => true, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); // 署名付き URL を生成します。 $signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET"); print_r($signedUrl); } catch (OssException $e) { printf(__FUNCTION__ . ": 失敗\n"); printf($e->getMessage() . "\n"); return; }
Go
package main import ( "context" "flag" "log" "time" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss" "github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials" ) // グローバル変数を定義します var ( region string // バケットが配置されているリージョン。 bucketName string // バケットの名前。 objectName string // オブジェクトの名前。 ) // init 関数を使用してコマンドラインパラメータを初期化します func init() { flag.StringVar(®ion, "region", "", "バケットが配置されているリージョン。") flag.StringVar(&bucketName, "bucket", "", "バケットの名前。") flag.StringVar(&objectName, "object", "", "オブジェクトの名前。") } func main() { // コマンドラインパラメータを解析します flag.Parse() // バケット名が空かどうかを確認します if len(bucketName) == 0 { flag.PrintDefaults() log.Fatalf("無効なパラメータ、バケット名が必要です") } // リージョンが空かどうかを確認します if len(region) == 0 { flag.PrintDefaults() log.Fatalf("無効なパラメータ、リージョンが必要です") } // オブジェクト名が空かどうかを確認します if len(objectName) == 0 { flag.PrintDefaults() log.Fatalf("無効なパラメータ、オブジェクト名が必要です") } // デフォルトの構成を読み込み、認証情報プロバイダとリージョンを指定します cfg := oss.LoadDefaultConfig(). WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()). WithRegion(region). WithEndpoint("http://static.example.com"). WithUseCName(true) // OSS クライアントを作成します client := oss.NewClient(cfg) // GetObject リクエストの署名付き URL を生成します result, err := client.Presign(context.TODO(), &oss.GetObjectRequest{ Bucket: oss.Ptr(bucketName), Key: oss.Ptr(objectName), //RequestPayer: oss.Ptr("requester"), // リクエスタの ID を指定します }, oss.PresignExpires(10*time.Minute), ) if err != nil { log.Fatalf("オブジェクトのプレサインの取得に失敗しました %v", err) } log.Printf("リクエストメソッド: %v\n", result.Method) log.Printf("リクエストの有効期限: %v\n", result.Expiration) log.Printf("リクエスト URL: %v\n", result.URL) if len(result.SignedHeaders) > 0 { // レスポンス結果に署名付きヘッダーが含まれている場合は、署名付き URL を使用して HTTP GET リクエストを送信するときに、対応するリクエストヘッダーを含める必要があります。これにより、リクエストの失敗や署名エラーの原因となる可能性のある不整合を回避できます。 log.Printf("署名付きヘッダー:\n") for k, v := range result.SignedHeaders { log.Printf("%v: %v\n", k, v) } } }
ossutil を使用する
presign コマンドを実行して、カスタムドメイン名を使用してオブジェクトのプレサイン URL を生成します。
ossutil presign oss://examplebucket/exampleobject.txt --endpoint "http://static.example.com” --addressing-style "cname"
ossutil コマンドがカスタムドメイン名を毎回手動で指定する代わりに自動的に使用できるようにするには、カスタムドメイン名を 構成ファイル に追加します。
ブラウザでプレサイン URL にアクセスします。
API 操作
ドメインの所有権を確認するために呼び出すことができる API 操作の詳細については、「CreateCnameToken」をご参照ください。
CNAME トークンをクエリするために呼び出すことができる API 操作の詳細については、「GetCnameToken」をご参照ください。
カスタムドメイン名をバケットにマップするために呼び出すことができる API 操作の詳細については、「PutCname」をご参照ください。
バケットのドメイン名を指すすべての CNAME レコードをクエリするために呼び出すことができる API 操作の詳細については、「ListCname」をご参照ください。
バケットの CNAME レコードを削除するために呼び出すことができる API 操作の詳細については、「DeleteCname」をご参照ください。
TXT レコードまたは CNAME レコードを追加するために呼び出すことができる API 操作の詳細については、「AddDomainRecord」をご参照ください。
次のステップ
HTTPS 経由で OSS オブジェクトにアクセスする
デフォルトでは、SSL 証明書が構成されていない場合、カスタムドメイン名では HTTPS 経由のアクセスはサポートされていません。HTTPS 経由でカスタムドメイン名を使用してオブジェクトにアクセスしようとすると、ブラウザに安全でない接続の警告が表示されます。HTTPS アクセスを有効にするには、カスタムドメイン名に SSL 証明書を構成する 必要があります。
署名されていない永続的に有効な URL を使用して OSS オブジェクトにアクセスする
取得した URL が tttp://YourDomainName/ObjectName
形式の場合、署名または有効期限は含まれていません。この URL を使用してオブジェクトにアクセスするには、オブジェクトのアクセス制御リスト (ACL) がパブリック読み取りであることを確認してください。ただし、パブリック読み取り ACL を使用すると、すべてのインターネットユーザーがオブジェクトにアクセスできるため、データリークやコストの増加につながる可能性があります。セキュリティを強化するために、署名と有効期限を含む URL を使用することをお勧めします。
次のいずれかの方法を使用して、オブジェクトにパブリック読み取りアクセスを許可できます。
オブジェクトの ACL をパブリック読み取りに設定する: OSS オブジェクトの ACL をパブリック読み取りに設定できます。これにより、誰でもオブジェクトの URL に永続的にアクセスできるようになります。権限のない Web サイトからのアクセスをブロックするには、OSS で ホットリンク保護 を有効にします。
Alibaba Cloud CDN を使用してアクセスを高速化する: OSS オブジェクトの安全なアクセス制御を確保するために、ACL をプライベートに設定し、Alibaba Cloud CDN を使用してパブリックにアクセスできるようにすることができます。これにより、誰でもオブジェクトの URL に永続的にアクセスできるようになります。権限のない Web サイトからのアクセスをブロックするには、Alibaba Cloud CDN で ホットリンク保護 を有効にします。
他の Web サイトによる OSS オブジェクトの不正使用を防ぐ
デフォルトでは、OSS オブジェクトにはどの Web サイトからでもアクセスして表示できます。これにより、不要なリクエストとアウトバウンドトラフィック料金が発生する可能性があります。このリスクを軽減するには、リファラーブラックリストまたはホワイトリストを構成して ホットリンク保護 を有効にします。これにより、アクセスが意図したユーザーに制限されます。ホットリンク保護が有効になると、権限のない Web サイトはオブジェクトへのリンクがブロックされ、失敗したリクエストに対してリクエスト料金とアウトバウンドトラフィック料金は発生しません。
OSS で静的 Web サイトをホストする
OSS を静的 Web サイトサーバーとして使用して、HTML、CSS、JavaScript リソースなどの静的リソースをインターネット経由で保存および配信するには、カスタムドメイン名を OSS バケットにマップし、静的 Web サイトホスティング を構成する必要があります。
リージョン全体で OSS オブジェクトのダウンロード速度を向上させる
たとえば、OSS オブジェクトが中国 (杭州) に保存されている場合、Alibaba Cloud CDN は、他のリージョンのユーザーによるこれらのオブジェクトへのアクセスを高速化できます。Alibaba Cloud CDN が有効になっている場合、OSS オブジェクトはリージョナルポイントオブプレゼンス (POP) にキャッシュされます。これらのオブジェクトにアクセスするユーザーは、最寄りの POP に自動的にルーティングされ、より高速で効率的なダウンロードが保証されます。
リージョン全体のパフォーマンスを最適化するために、ダウンロードには CDN 高速ドメイン名を使用し、アップロードにはバケットのデフォルトドメイン名を使用することをお勧めします。
OSS オブジェクトの長距離伝送を最適化する
たとえば、OSS オブジェクトが中国 (杭州) に保存されている場合、中国本土以外からアクセスするユーザーは、アップロードとダウンロードの速度が遅くなる可能性があります。国境を越えたアクセス速度と安定性を向上させるには、転送アクセラレーション を有効にできます。この機能は、カスタムドメイン名をバケットの OSS 高速ドメイン名にマップします。