セキュリティ上の理由から、バケットのデフォルトドメイン名を使用して特定のObject Storage Service (OSS) オブジェクトにアクセスすると、強制ダウンロードがトリガーされたり、ダウンロードが禁止されたりする可能性があります。これらのオブジェクトをブラウザでプレビューまたはダウンロードするには、カスタムドメイン名をバケットにマップし、カスタムドメイン名を使用してオブジェクトにアクセスする必要があります。カスタムドメイン名をマップしても、バケットのデフォルトドメイン名には影響しません。バケット内のOSSオブジェクトへのアクセスには、引き続きデフォルトドメイン名を使用できます。
シナリオ
オブジェクトのプレビュー: セキュリティ上の目的で、バケットのデフォルトドメイン名を使用してOSSオブジェクトにアクセスすると、OSSは自動的にダウンロードレスポンスヘッダーを追加します。これにより、ブラウザはオブジェクトのダウンロードを強制的に行います。ただし、カスタムドメイン名を使用して同じオブジェクトにアクセスする場合、OSSはダウンロードレスポンスヘッダーを追加しません。これにより、オブジェクトはダウンロードされるのではなく、ブラウザで直接プレビューできるようになります。デフォルトドメイン名を使用してOSSオブジェクトにアクセスすることでトリガーされる自動ダウンロードの有効時間と範囲については、「付録: 強制ダウンロードのためにトリガーされる x-oss-ec ルール」をご参照ください。
.apk または .ipa オブジェクトへのアクセス: セキュリティ上の目的で、バケットのデフォルトドメイン名を使用して .apk または .ipa オブジェクトにアクセスすると、ApkDownloadForbidden エラーコードを含む 400 エラーが発生します。ただし、カスタムドメイン名を使用して同じオブジェクトにアクセスしても制限はありません。
ブランドイメージとプロ意識の向上: カスタムドメイン名をOSSバケットにマップすることで、ブランドアイデンティティが強化され、プロ意識が強化され、ユーザーの信頼が築かれます。
ドメイン名ブロッキングのバイパス: OSSバケット内のリソースへのアクセスを確保するために、カスタムドメイン名をバケットにマップします。
アクセス利便性の向上: カスタムドメイン名を使用すると、アクセスが簡素化され、使いやすさが向上し、リソース共有がより効率的になります。
URL の永続性の確保: カスタムドメイン名をマップすることで、リソースURLの永続性が確保され、ストレージの場所やサービスが変更された場合でも、リソースに長期間アクセスして使用できます。
制限事項
漢字を含むカスタムドメイン名はサポートされていません。
画像処理用にすでにマップされているカスタムドメイン名は、バケットに再度マップすることはできません。
各カスタムドメイン名は1つのバケットにのみマップできます。
各バケットには最大 100 個のカスタムドメイン名をマップできます。
OSSコンソールは、ワイルドカードドメイン名をバケットにマップすることをサポートしていません。たとえば、アスタリスク (*) で始まるドメイン名はバケットにマップできません。このようなドメイン名がマップされている場合、そのドメイン名のすべてのサブドメインはバケットを指します。ただし、Alibaba Cloud CDN を使用してバケットへのアクセスを高速化する場合、ワイルドカードドメイン名をバケットにマップできます。この場合、ドメイン名はOSSコンソールに表示されません。
前提条件
カスタムドメイン名が登録されている。サードパーティプロバイダに登録されているドメイン名をAlibaba Cloudのバケットにマップできます。ドメイン名をお持ちでない場合は、Alibaba Cloud Domains サービスプラットフォームを使用して登録できます。
ドメイン名がマップされるバケットが中国本土にある場合、ドメイン名のインターネットコンテンツプロバイダ (ICP) 登録を取得し、Alibaba Cloud アカウントの実名登録を完了します。 IPC登録と実名登録の詳細については、「ICP 登録プロセス」および「アカウント認証を完了する必要があるユーザー」をご参照ください。
手順
ステップ 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.<domain prefix>
と入力します。たとえば、static.example.com
をバケットにマップするには、テキストボックスに_dnsauth.static
と入力します。
_dnsauth.static
DNSリクエストソース
ドメイン名の解決に使用する DNS 回線。DNS システムが最適な回線を自動的に選択できるように、このパラメーターには [デフォルト] を選択することをお勧めします。
Default
レコード値
Alibaba Cloud アカウント B を使用して以前に記録された TXT レコードのレコード値 (CnameToken)。
b0d777f7ccddeae93358d908ed59****
TTL
レコードの更新間隔。デフォルト値を保持します。
説明TTL 期間の設定は、有効になるまでに遅延が発生する場合があります。
10 Minutes
[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.<domain prefix>
と入力します。 たとえば、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 com.aliyun.oss.model.GeneratePresignedUrlRequest; import java.net.URL; import java.util.Date; public class Demo { public static void main(String[] args) throws Throwable { // カスタムドメイン名を指定します。例: https://static.example.com。 String endpoint = "yourCustomEndpoint"; // バケットが配置されているリージョンを指定します。例: cn-hangzhou。 String region = "cn-hangzhou"; // バケットの名前を指定します。例: examplebucket。 String bucketName = "examplebucket"; // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 String objectName = "exampleobject.txt"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数を構成する必要があります。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // OSSClient インスタンスを作成します。 // OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); // CNAME を有効にするには、このパラメーターを true に設定します。 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); // 署名付き URL を生成します。 GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET); // URL の有効期間を設定します。 request.setExpiration(expiration); // HTTP GET リクエストを許可する署名付き URL を生成します。 URL signedUrl = ossClient.generatePresignedUrl(request); // 署名付き URL を表示します。 System.out.println("signed url for getObject: " + signedUrl); } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message:" + oe.getErrorMessage()); System.out.println("Error Code:" + oe.getErrorCode()); System.out.println("Request ID:" + oe.getRequestId()); System.out.println("Host ID:" + oe.getHostId()); } catch (ClientException ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message:" + 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()) # エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメーターが必要です。 region = "cn-hangzhou" # カスタムドメイン名を指定します。例: static.example.com。 endpoint = 'http://static.example.com' # バケットの名前を指定します。 bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region, is_cname=True) # オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 object_name = 'exampledir/exampleobject.txt' # オブジェクトのダウンロードに使用される署名付き URL を生成します。この例では、URL の有効期間は 600 秒です。 # デフォルトでは、OSS は署名プロセスでオブジェクトの完全なパスにあるスラッシュ (/) をエスケープ文字として識別します。したがって、署名付き URL は直接使用できません。 # slash_safe パラメーターを True に設定します。このようにして、OSS はオブジェクトの完全なパスにあるスラッシュ (/) をエスケープ文字として識別せず、署名付き URL を直接使用できます。 url = bucket.sign_url('GET', object_name, 600, slash_safe=True, params=params) print('Presigned 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('Generated Signature URL:', url); }).catch(err => { console.error('Error generating signature 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(); // yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを 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__ . ": FAILED\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("オブジェクトの署名付き URL の取得に失敗しました %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 { // HTTP GET リクエストを許可する署名付き URL を生成するときにリクエストヘッダーを指定する場合は、署名付き URL を使用して開始された GET リクエストにリクエストヘッダーが含まれていることを確認してください。これにより、リクエストの失敗と署名エラーを防ぎます。 log.Printf("署名付きヘッダー:\n") for k, v := range result.SignedHeaders { log.Printf("%v: %v\n", k, v) } } }
ossutil を使用する
presign (署名付き URL を生成する) コマンドを実行して、カスタムドメイン名を使用してオブジェクトの署名付き URL を生成します。
ossutil presign oss://examplebucket/exampleobject.txt --endpoint "http://static.example.com” --addressing-style "cname"
ossutil コマンドがカスタムドメイン名を毎回手動で指定する代わりに自動的に使用できるようにするには、構成ファイル にカスタムドメイン名を追加します。
ブラウザで署名付き URL にアクセスします。
API 操作
ドメイン所有権検証のために呼び出すことができる CNAME トークンを作成する 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 サイトからでもアクセスして表示できます。 これにより、不要なリクエストとアウトバウンドトラフィック料金が発生する可能性があります。 このリスクを軽減するには、Referer ブラックリストまたはホワイトリストを設定してホットリンク保護を有効にします。 これにより、アクセスが意図したユーザーに制限されます。 ホットリンク保護が有効になると、承認されていない Web サイトはオブジェクトへのリンクがブロックされ、失敗したリクエストに対してリクエスト料金とアウトバウンドトラフィック料金は発生しません。
OSS で静的 Web サイトをホストする
HTML、CSS、JavaScript リソースなどの静的リソースをインターネット経由で保存および配信するための静的 Web サイトサーバーとして OSS を使用するには、カスタムドメイン名を OSS バケットにマッピングし、静的 Web サイトホスティングを設定する必要があります。
リージョン全体で OSS オブジェクトのダウンロード速度を向上させる
たとえば、OSS オブジェクトが中国(杭州)に保存されている場合、Alibaba Cloud CDN は、他のリージョンのユーザーによるこれらのオブジェクトへのアクセスを高速化できます。 Alibaba Cloud CDN が有効になっている場合、OSS オブジェクトはリージョナル ポイント オブ プレゼンス(POP)にキャッシュされます。 これらのオブジェクトにアクセスするユーザーは、最も近い POP に自動的にルーティングされ、より高速で効率的なダウンロードが保証されます。
リージョン全体のパフォーマンスを最適化するために、ダウンロードには CDN アクセラレーションドメイン名を使用してアクセスを高速化し、アップロードにはバケットのデフォルトドメイン名を使用することをお勧めします。
OSS オブジェクトの長距離伝送を最適化する
たとえば、OSS オブジェクトが中国(杭州)に保存されている場合、中国本土以外からアクセスするユーザーは、アップロードとダウンロードの速度が遅くなる可能性があります。 国境を越えたアクセス速度と安定性を向上させるには、転送アクセラレーションを有効にすることができます。 この機能は、カスタムドメイン名をバケットの OSS アクセラレーションドメイン名にマッピングします。