ApsaraVideo Live propose un contrôle d'accès via des listes noires ou blanches basées sur les champs Referer et User-Agent, ainsi que sur les adresses IP, afin de restreindre l'accès non autorisé à vos ressources vidéo.
Présentation
Le contrôle d'accès vous permet de configurer des politiques côté cloud pour protéger vos ressources vidéo. Cette fonctionnalité ne nécessite aucun développement supplémentaire : une simple configuration via la console suffit et prend effet immédiatement. Les politiques prises en charge sont les suivantes :
Liste noire ou liste blanche Referer
Liste noire ou liste blanche User-Agent
Liste noire ou liste blanche d'adresses IP
La configuration des listes noires ou blanches User-Agent n'est pas disponible dans la console ApsaraVideo Live en raison de sa complexité et des risques de mauvaise configuration. Pour en configurer une, soumettez un ticket pour contacter le support technique d'Alibaba Cloud. Pour plus d'informations, consultez la rubrique Nous contacter.
Scénarios
Configuration simple et efficace pour une protection de base, notamment contre les accès non autorisés depuis un navigateur.
Les contrôles basés sur les champs Referer et User-Agent s'appuient sur les en-têtes HTTP, susceptibles d'être falsifiés, ce qui offre une sécurité limitée.
Les contrôles basés sur les adresses IP sont difficiles à gérer à grande échelle et ne conviennent pas à la distribution de contenu à large audience.
Liste noire ou liste blanche Referer
-
Présentation
L'en-tête HTTP Referer identifie l'origine des requêtes. Configurez une liste noire ou blanche Referer pour filtrer les requêtes et contrôler l'accès aux ressources vidéo.
Lorsqu'une requête atteint un point de présence (POP) d'Alibaba Cloud CDN, le POP la vérifie par rapport à la liste Referer. Les requêtes correspondantes reçoivent les données vidéo ; les autres reçoivent une réponse HTTP 403.
Aucune liste noire ou blanche Referer n'est activée par défaut. Configurez-en une selon les besoins de votre activité.
Les noms de domaine avec caractères génériques sont pris en charge. Par exemple, si vous spécifiez
example.com, la liste correspond au nom de domaine avec caractère générique*.example.comet à tous ses sous-domaines.Vous pouvez choisir d'autoriser ou non les requêtes dont l'en-tête Referer est vide. L'autorisation des en-têtes vides permet aux utilisateurs d'accéder aux ressources en saisissant directement les URL dans un navigateur.
-
Méthodes de configuration
Console : pour plus d'informations, consultez la rubrique Configurer la protection contre le hotlinking.
-
API : appelez l'opération BatchSetLiveDomainConfigs pour configurer plusieurs noms de domaine simultanément, y compris la liste noire ou blanche Referer.
Ajoutez la dépendance du SDK Java au fichier pom.xml.
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-live20161101</artifactId> <version>2.0.3</version> </dependency>Configurez la protection contre le hotlinking basée sur le champ Referer :
// This file is auto-generated, don't edit it. Thanks. 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 { // HttpClient Configuration /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds .maxConnections(128) // Set the connection pool size .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds // Configure the proxy .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001)) .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>")) // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true)) .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Configure Credentials authentication information, including ak, secret, token StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set. .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token .build()); // Configure the Client AsyncClient client = AsyncClient.builder() .region("<Your RegionId>") // Region ID //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient) .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // Service-level configuration // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc. .overrideConfiguration( ClientOverrideConfiguration.create() // The service endpoint. Refer to https://api.alibabacloud.com/product/live. .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Parameter settings for API request BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder() .domainNames("<Your DomainNames>") .functions("<Your Functions>") // Request-level configuration rewrite, can set Http request parameters, etc. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Asynchronously get the return value of the API request CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest); // Synchronously get the return value of the API request BatchSetLiveDomainConfigsResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Asynchronous processing of return values /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Handling exceptions System.out.println(throwable.getMessage()); return null; });*/ // Finally, close the client client.close(); } }RemarqueDans cet exemple, DomainNames spécifie le domaine de streaming. Le champ referer_white_domain_list répertorie les noms de domaine autorisés. Le paramètre allow_empty est défini sur off pour refuser les requêtes dont l'en-tête Referer est vide.
Pour plus d'informations sur le SDK serveur pour Java, consultez la rubrique Utiliser le SDK serveur pour Java.
-
Remarques d'utilisation
ImportantLa liste noire et la liste blanche s'excluent mutuellement.
Les clients mobiles envoient par défaut des requêtes avec un en-tête Referer vide. Pour refuser ces requêtes, configurez un en-tête Referer de confiance pour les clients mobiles via ApsaraVideo Player.
Si vous refusez les en-têtes Referer vides, configurez l'accélération sécurisée HTTPS et la redirection d'URL pour rediriger les requêtes HTTP vers HTTPS. Cela empêche les navigateurs de supprimer l'en-tête Referer lorsque des pages HTTPS demandent des ressources HTTP.
-
Exemple
Vous configurez une liste blanche Referer incluant
example.compour le domaine de streamingdemo.developer.aliyundoc.comet refusez les requêtes dont l'en-tête Referer est vide.-
Exemple de requête :
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' -
Exemple de réponse d'erreur :
X-Tengine-Error:denied by Referer ACL -
Exemple de requête avec l'en-tête Referer de confiance :
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'Referer: http://www.example.com'
-
Liste noire ou liste blanche User-Agent
-
Présentation
L'en-tête User-Agent identifie le système d'exploitation et le navigateur du client. Configurez une liste noire ou blanche User-Agent pour contrôler l'accès depuis des navigateurs ou appareils spécifiques.
-
Méthodes de configuration
Pour configurer une liste noire ou blanche User-Agent, soumettez un ticket pour contacter le support technique d'Alibaba Cloud. Pour plus d'informations, consultez la rubrique Nous contacter.
-
Exemple
-
En-tête User-Agent provenant d'Internet Explorer 9 sur un PC :
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0; -
Requête avec un en-tête User-Agent personnalisé :
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'User-Agent: iPhone OS;MI 5'
-
Liste noire ou liste blanche d'adresses IP
-
Présentation
Configurez une liste noire ou blanche d'adresses IP pour refuser ou autoriser l'accès depuis des adresses IP spécifiques.
Les adresses IP figurant dans la liste noire ne peuvent pas accéder au nom de domaine accéléré.
Seules les adresses IP figurant dans la liste blanche peuvent accéder au nom de domaine accéléré.
-
Vous pouvez ajouter des adresses IP individuelles ou des blocs CIDR.
Par exemple, 127.0.0.0/24 couvre les adresses IP de 127.0.0.0 à 127.0.0.254. Le masque de sous-réseau /24 désigne les 24 premiers bits comme partie réseau, laissant 8 bits pour les hôtes (28-2 = 254 adresses utilisables).
-
Méthodes de configuration
Console : pour plus d'informations, consultez la rubrique Configurer une liste noire ou blanche d'adresses IP.
-
API : appelez l'opération BatchSetLiveDomainConfigs pour configurer plusieurs noms de domaine simultanément, y compris la liste noire ou blanche d'adresses IP.
Configurez une liste blanche d'adresses IP à l'aide du SDK serveur Java :
// This file is auto-generated, don't edit it. Thanks. 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 { // HttpClient Configuration /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder() .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds .maxConnections(128) // Set the connection pool size .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds // Configure the proxy .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001)) .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>")) // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true)) .x509TrustManagers(new X509TrustManager[]{}) .keyManagers(new KeyManager[]{}) .ignoreSSL(false) .build();*/ // Configure Credentials authentication information, including ak, secret, token StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder() // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set. .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")) .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")) //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token .build()); // Configure the Client AsyncClient client = AsyncClient.builder() .region("<Your RegionId>") // Region ID //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient) .credentialsProvider(provider) //.serviceConfiguration(Configuration.create()) // Service-level configuration // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc. .overrideConfiguration( ClientOverrideConfiguration.create() // The service endpoint. Refer to https://api.alibabacloud.com/product/live. .setEndpointOverride("live.aliyuncs.com") //.setConnectTimeout(Duration.ofSeconds(30)) ) .build(); // Parameter settings for API request BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder() .domainNames("<Your DomainNames>") .functions("<Your Functions>") // Request-level configuration rewrite, can set Http request parameters, etc. // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders())) .build(); // Asynchronously get the return value of the API request CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest); // Synchronously get the return value of the API request BatchSetLiveDomainConfigsResponse resp = response.get(); System.out.println(new Gson().toJson(resp)); // Asynchronous processing of return values /*response.thenAccept(resp -> { System.out.println(new Gson().toJson(resp)); }).exceptionally(throwable -> { // Handling exceptions System.out.println(throwable.getMessage()); return null; });*/ // Finally, close the client client.close(); } }RemarqueDans cet exemple, DomainNames spécifie le domaine de streaming. Les adresses IP du bloc CIDR 127.0.0.0/24 sont ajoutées à la liste blanche.
Pour plus d'informations sur le SDK serveur pour Java, consultez la rubrique Utiliser le SDK serveur pour Java.
-
Remarques d'utilisation
ImportantLa liste noire et la liste blanche s'excluent mutuellement.
Vous pouvez ajouter jusqu'à 3 000 adresses IPv4 ou 1 000 adresses IPv6. Les adresses IPv6 sont insensibles à la casse et doivent utiliser la notation complète.