ApsaraVideo Live memungkinkan Anda menerapkan kontrol akses dengan mengonfigurasi daftar hitam atau daftar putih Referer, daftar hitam atau daftar putih User-Agent, serta daftar hitam atau daftar putih IP. Topik ini menjelaskan fitur kontrol akses, kasus penggunaannya, dan metode konfigurasinya.
Ikhtisar
Fitur kontrol akses memungkinkan Anda mengonfigurasi kebijakan akses di cloud untuk memberikan perlindungan dasar bagi sumber daya video Anda. Fitur ini mudah dipelajari dan langsung berlaku efeknya. Hanya diperlukan konfigurasi sederhana di cloud tanpa pengembangan tambahan. Kebijakan kontrol akses umum meliputi yang berikut ini:
Daftar hitam atau daftar putih Referer
Daftar hitam atau daftar putih User-Agent
Daftar hitam atau daftar putih IP
Anda tidak dapat mengonfigurasi daftar hitam atau daftar putih User-Agent di Konsol ApsaraVideo Live karena konfigurasinya kompleks dan rentan terhadap kesalahan. Untuk mengonfigurasi daftar hitam atau daftar putih User-Agent, Anda dapat mengirim tiket untuk menghubungi dukungan teknis Alibaba Cloud. Untuk informasi lebih lanjut, lihat Hubungi Kami.
Skenario
Fitur kontrol akses mudah dikonfigurasi dan memberikan perlindungan dasar, terutama untuk akses dari browser web.
Daftar hitam dan daftar putih Referer serta User-Agent didasarkan pada Header HTTP, yang dapat dengan mudah dipalsukan dan menyediakan tingkat keamanan rendah.
Daftar hitam atau daftar putih IP sulit dikelola oleh banyak pengguna dan tidak cocok untuk distribusi konten berskala besar.
Daftar hitam atau daftar putih Referer
Ikhtisar
Header Referer dalam protokol HTTP digunakan untuk melacak dan mengidentifikasi sumber permintaan. Anda dapat mengonfigurasi daftar hitam atau daftar putih Referer untuk mengidentifikasi dan memfilter permintaan tersebut. Ini memungkinkan Anda mengontrol akses ke sumber daya video Anda.
Setelah permintaan dikirim ke titik kehadiran (POP) CDN, POP akan mengotentikasi permintaan berdasarkan daftar hitam atau daftar putih yang telah dikonfigurasi. Jika permintaan berhasil diautentikasi, data video akan dikembalikan. Jika tidak, kode status HTTP 403 akan dikembalikan.
Secara default, tidak ada daftar hitam atau daftar putih Referer yang diaktifkan. Anda dapat mengonfigurasi daftar hitam atau daftar putih Referer sesuai kebutuhan.
Saat mengonfigurasi daftar hitam atau daftar putih Referer, nama domain wildcard didukung. Sebagai contoh, jika Anda menentukan
example.com, daftar hitam atau daftar putih Referer akan berlaku untuk nama domain wildcard*.example.com, yang mencakup semua subdomainnya.Anda dapat menentukan apakah akan mengizinkan permintaan yang memiliki bidang Referer kosong. Jika Anda mengizinkan permintaan ini, pengguna dapat langsung mengakses sumber daya dengan memasukkan URL sumber daya di bilah alamat browser.
Metode Konfigurasi
Konsol: Untuk informasi lebih lanjut, lihat Perlindungan hotlink.
API: Anda dapat memanggil operasi BatchSetLiveDomainConfigs untuk mengonfigurasi beberapa nama domain sekaligus. Ini termasuk mengonfigurasi daftar hitam atau daftar putih Referer.
Impor SDK untuk Java ke file pom.xml:
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-live20161101</artifactId> <version>2.0.3</version> </dependency>Berikut adalah contoh kode yang menunjukkan cara mengonfigurasi perlindungan hotlink menggunakan SDK untuk Java:
// File ini dibuat secara otomatis, jangan diedit. Terima kasih. package demo; import com.aliyun.auth.credentials.Credential; import com.aliyun.auth.credentials.provider.StaticCredentialProvider; import com.aliyun.core.http.HttpClient; import com.aliyun.core.http.HttpMethod; import com.aliyun.core.http.ProxyOptions; import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder; import com.aliyun.sdk.service.live20161101.models.*; import com.aliyun.sdk.service.live20161101.*; import com.google.gson.Gson; import darabonba.core.RequestConfiguration; import darabonba.core.client.ClientOverrideConfiguration; import darabonba.core.utils.CommonUtil; import darabonba.core.TeaPair; //import javax.net.ssl.KeyManager; //import javax.net.ssl.X509TrustManager; import java.net.InetSocketAddress; import java.time.Duration; import java.util.*; import java.util.concurrent.CompletableFuture; import java.io.*; public class BatchSetLiveDomainConfigs { public static void main(String[] args) throws Exception { // Konfigurasi HttpClient /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // Set waktu batas koneksi, default adalah 10 detik .responseTimeout(Duration.ofSeconds(10)) // Set waktu batas respons, default adalah 20 detik .maxConnections(128) // Set ukuran kolam koneksi .maxIdleTimeOut(Duration.ofSeconds(50)) // Set waktu batas kolam koneksi, default adalah 30 detik // Konfigurasi proxy .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001)) .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>")) // Jika ini adalah koneksi https, Anda perlu mengonfigurasi sertifikat, atau abaikan sertifikat(.ignoreSSL(true)) .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Konfigurasi informasi autentikasi Kredensial, termasuk ak, secret, token StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel. .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // gunakan token STS .build()); // Konfigurasi Client AsyncClient client = AsyncClient.builder() .region("<Your RegionId>") // ID Wilayah //.httpClient(httpClient) // Gunakan HttpClient yang telah dikonfigurasi, jika tidak gunakan HttpClient default (Apache HttpClient) .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // Konfigurasi tingkat layanan // Konfigurasi ulang tingkat klien, dapat menyetel Endpoint, parameter permintaan Http, dll. .overrideConfiguration( ClientOverrideConfiguration.create() // Untuk endpoint, lihat https://api.aliyun.com/product/live .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Pengaturan parameter untuk permintaan API BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder() .domainNames("<Your DomainNames>") .functions("<Your Functions>") // Konfigurasi ulang tingkat permintaan, dapat menyetel parameter permintaan Http, dll. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Dapatkan nilai balik permintaan API secara asinkron CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest); // Dapatkan nilai balik permintaan API secara sinkron BatchSetLiveDomainConfigsResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Pemrosesan asinkron nilai balik /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Penanganan pengecualian System.out.println(throwable.getMessage()); return null; });*/ // Akhirnya, tutup klien client.close(); } }CatatanDalam kode sampel sebelumnya, daftar putih perlindungan hotlink Referer dikonfigurasi untuk <DomainNames>. Parameter <referer_white_domain_list> menentukan nama domain yang masuk daftar putih. Parameter allow_empty disetel ke <off> untuk menolak permintaan yang memiliki header Referer kosong.
Untuk informasi lebih lanjut tentang cara menggunakan SDK untuk Java, lihat Gunakan SDK untuk Java.
Catatan Penggunaan
PentingDaftar hitam dan daftar putih saling eksklusif. Anda tidak dapat menggunakannya pada saat yang sama.
Secara default, klien seluler mengizinkan permintaan akses yang memiliki header Referer kosong. Jika Anda ingin menolak permintaan ini, Anda dapat menggunakan Pemutar Video Apsara untuk mengonfigurasi header Referer tepercaya untuk klien seluler.
Jika Anda menolak permintaan yang memiliki header Referer kosong, Anda harus mengonfigurasi percepatan aman HTTPS dan pengalihan URL untuk memaksa pengalihan dari HTTP ke HTTPS. Pengalihan ini mencegah kegagalan akses yang dapat terjadi ketika browser menghapus header Referer dari permintaan HTTPS untuk sumber daya HTTP.
Contoh
Dalam contoh ini, daftar putih Referer yang mencakup
example.comdikonfigurasi untuk domain streamingdemo.developer.aliyundoc.com. Permintaan yang memiliki header Referer kosong ditolak.Permintaan sampel:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000'Tanggapan mencakup informasi berikut:
X-Tengine-Error:denied by Referer ACLPermintaan sampel dengan header Referer tepercaya:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'Referer: http://www.example.com'
Daftar hitam atau daftar putih User-Agent
Ikhtisar
Header User-Agent adalah string yang memungkinkan server mengidentifikasi informasi tentang klien, seperti sistem operasi dan browser. Anda dapat mengonfigurasi daftar hitam atau daftar putih User-Agent untuk mengontrol akses dari browser atau perangkat tertentu.
Metode Konfigurasi
Anda dapat mengirim tiket ke dukungan teknis Alibaba Cloud. Untuk informasi lebih lanjut, lihat Hubungi Kami.
Contoh
Berikut adalah contoh header User-Agent untuk permintaan dari Internet Explorer 9 di PC:
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;Anda dapat mensimulasikan permintaan HTTP untuk otentikasi:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'User-Agent: iPhone OS;MI 5'
Daftar hitam atau daftar putih IP
Ikhtisar
ApsaraVideo Live memungkinkan Anda mengonfigurasi daftar hitam atau daftar putih IP untuk menolak akses dari atau hanya mengizinkan akses dari alamat IP tertentu.
Jika Anda mengonfigurasi daftar hitam IP, alamat IP dalam daftar hitam tidak dapat mengakses nama domain yang dipercepat.
Jika Anda mengonfigurasi daftar putih IP, hanya alamat IP dalam daftar putih yang dapat mengakses nama domain yang dipercepat.
Anda dapat menambahkan daftar alamat IP atau blok CIDR.
Sebagai contoh, Anda dapat menambahkan 127.0.0.0/24 ke daftar hitam atau daftar putih IP. /24 adalah subnet mask, yang menunjukkan bahwa 24 bit pertama dari alamat 32-bit mewakili bagian jaringan dan 8 bit sisanya mewakili bagian host. Blok CIDR ini mencakup alamat IP dari 127.0.0.0 hingga 127.0.0.255.
Alamat IPv6 didukung.
Metode Konfigurasi
Konsol: Untuk informasi lebih lanjut, lihat Daftar hitam atau daftar putih IP.
API: Anda dapat memanggil operasi BatchSetLiveDomainConfigs untuk mengonfigurasi beberapa nama domain sekaligus. Ini termasuk mengonfigurasi daftar hitam atau daftar putih IP.
Berikut adalah contoh kode yang menunjukkan cara mengonfigurasi daftar hitam atau daftar putih alamat IP menggunakan SDK untuk Java:
// File ini dibuat secara otomatis, jangan diedit. Terima kasih. package demo; import com.aliyun.auth.credentials.Credential; import com.aliyun.auth.credentials.provider.StaticCredentialProvider; import com.aliyun.core.http.HttpClient; import com.aliyun.core.http.HttpMethod; import com.aliyun.core.http.ProxyOptions; import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder; import com.aliyun.sdk.service.live20161101.models.*; import com.aliyun.sdk.service.live20161101.*; import com.google.gson.Gson; import darabonba.core.RequestConfiguration; import darabonba.core.client.ClientOverrideConfiguration; import darabonba.core.utils.CommonUtil; import darabonba.core.TeaPair; //import javax.net.ssl.KeyManager; //import javax.net.ssl.X509TrustManager; import java.net.InetSocketAddress; import java.time.Duration; import java.util.*; import java.util.concurrent.CompletableFuture; import java.io.*; public class BatchSetLiveDomainConfigs { public static void main(String[] args) throws Exception { // Konfigurasi HttpClient /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // Set waktu batas koneksi, default adalah 10 detik .responseTimeout(Duration.ofSeconds(10)) // Set waktu batas respons, default adalah 20 detik .maxConnections(128) // Set ukuran kolam koneksi .maxIdleTimeOut(Duration.ofSeconds(50)) // Set waktu batas kolam koneksi, default adalah 30 detik // Konfigurasi proxy .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001)) .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>")) // Jika ini adalah koneksi https, Anda perlu mengonfigurasi sertifikat, atau abaikan sertifikat(.ignoreSSL(true)) .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Konfigurasi informasi autentikasi Kredensial, termasuk ak, secret, token StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel. .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // gunakan token STS .build()); // Konfigurasi Client AsyncClient client = AsyncClient.builder() .region("<Your RegionId>") // ID Wilayah //.httpClient(httpClient) // Gunakan HttpClient yang telah dikonfigurasi, jika tidak gunakan HttpClient default (Apache HttpClient) .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // Konfigurasi tingkat layanan // Konfigurasi ulang tingkat klien, dapat menyetel Endpoint, parameter permintaan Http, dll. .overrideConfiguration( ClientOverrideConfiguration.create() // Untuk endpoint, lihat https://api.aliyun.com/product/live .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Pengaturan parameter untuk permintaan API BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder() .domainNames("<Your DomainNames>") .functions("<Your Functions>") // Konfigurasi ulang tingkat permintaan, dapat menyetel parameter permintaan Http, dll. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Dapatkan nilai balik permintaan API secara asinkron CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest); // Dapatkan nilai balik permintaan API secara sinkron BatchSetLiveDomainConfigsResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Pemrosesan asinkron nilai balik /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Penanganan pengecualian System.out.println(throwable.getMessage()); return null; });*/ // Akhirnya, tutup klien client.close(); } }CatatanDalam kode sampel sebelumnya, daftar putih alamat IP dikonfigurasi untuk <DomainNames>. Alamat IP yang masuk daftar putih ditentukan dalam blok CIDR <127.0.0.0/24>.
Untuk informasi lebih lanjut tentang cara menggunakan SDK untuk Java, lihat Gunakan SDK untuk Java.
Catatan Penggunaan
PentingDaftar hitam dan daftar putih saling eksklusif. Anda tidak dapat menggunakannya pada saat yang sama.
Anda dapat menambahkan hingga 1.000 alamat IPv6 atau 3.000 alamat IPv4. Alamat IPv6 tidak peka huruf besar/kecil. Anda tidak dapat menggunakan notasi singkat untuk alamat IPv6.