O ApsaraVideo Live oferece controle de acesso por meio de listas de bloqueios ou de permissões baseadas em Referer, User-Agent e endereços IP para restringir o acesso não autorizado aos seus recursos de vídeo.
Visão geral
O controle de acesso permite configurar políticas na nuvem que protegem os recursos de vídeo. Essa funcionalidade exige apenas configuração no console, sem necessidade de desenvolvimento adicional, e entra em vigor imediatamente. Políticas suportadas:
Lista de bloqueios ou de permissões de Referer
Lista de bloqueios ou de permissões de User-Agent
Lista de bloqueios ou de permissões de endereços IP
Devido à complexidade e aos riscos de configuração incorreta, a definição de lista de bloqueios ou de permissões de User-Agent não está disponível no console do ApsaraVideo Live. Para configurar esse recurso, envie um ticket para entrar em contato com o suporte técnico da Alibaba Cloud. Para mais informações, consulte Fale conosco.
Cenários
Configuração simples e eficaz para proteção básica, especialmente contra acessos não autorizados via navegador.
Os controles de Referer e User-Agent dependem de cabeçalhos HTTP, que são suscetíveis a falsificação e oferecem segurança limitada.
Controles baseados em IP são difíceis de gerenciar em grande escala e inadequados para distribuição massiva de conteúdo.
Lista de bloqueios ou de permissões de Referer
-
Visão geral
O cabeçalho HTTP Referer identifica a origem das requisições. Configure uma lista de bloqueios ou de permissões de Referer para filtrar requisições e controlar o acesso aos recursos de vídeo.
Quando uma requisição chega a um ponto de presença (POP) da Alibaba Cloud CDN, o POP a verifica em relação à lista de Referer. Requisições correspondentes recebem os dados de vídeo; requisições não correspondentes recebem HTTP 403.
Nenhuma lista de bloqueios ou de permissões de Referer é ativada por padrão. Configure uma conforme as necessidades do seu negócio.
Nomes de domínio com curinga são suportados. Por exemplo, se você especificar
example.com, a lista corresponderá ao nome de domínio com curinga*.example.come a todos os seus subdomínios.É possível definir se requisições com cabeçalho Referer vazio serão permitidas. Permitir cabeçalhos vazios possibilita que usuários acessem recursos inserindo URLs diretamente no navegador.
-
Métodos de configuração
Console: Para mais informações, consulte Configurar proteção contra hotlink.
-
API: Chame a operação BatchSetLiveDomainConfigs para configurar vários nomes de domínio simultaneamente, incluindo a configuração da lista de bloqueios ou de permissões de Referer.
Adicione a dependência do SDK Java ao pom.xml.
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-live20161101</artifactId> <version>2.0.3</version> </dependency>Configure a proteção contra hotlink baseada em 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(); } }NotaNeste exemplo, DomainNames especifica o domínio de streaming. O campo referer_white_domain_list lista os nomes de domínio permitidos. O parâmetro allow_empty está definido como off para negar requisições com cabeçalho Referer vazio.
Para obter informações sobre o SDK de servidor para Java, consulte Usar o SDK de servidor para Java.
-
Observações de uso
ImportanteAs listas de bloqueios e de permissões são mutuamente exclusivas.
Clientes móveis enviam requisições com cabeçalho Referer vazio por padrão. Para negar essas requisições, configure um cabeçalho Referer confiável para clientes móveis por meio do ApsaraVideo Player.
Se você negar cabeçalhos Referer vazios, configure a aceleração segura HTTPS e o redirecionamento de URL para encaminhar requisições HTTP para HTTPS. Isso evita que navegadores removam o cabeçalho Referer quando páginas HTTPS solicitam recursos HTTP.
-
Exemplo
Você configura uma lista de permissões de Referer que inclui
example.compara o domínio de streamingdemo.developer.aliyundoc.come nega requisições com cabeçalho Referer vazio.-
Requisição de exemplo:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' -
Resposta de erro de exemplo:
X-Tengine-Error:denied by Referer ACL -
Requisição de exemplo com o cabeçalho Referer confiável:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'Referer: http://www.example.com'
-
Lista de bloqueios ou de permissões de User-Agent
-
Visão geral
O cabeçalho User-Agent identifica o sistema operacional e o navegador do cliente. Configure uma lista de bloqueios ou de permissões de User-Agent para controlar o acesso de navegadores ou dispositivos específicos.
-
Métodos de configuração
Para configurar uma lista de bloqueios ou de permissões de User-Agent, envie um ticket para entrar em contato com o suporte técnico da Alibaba Cloud. Para mais informações, consulte Fale conosco.
-
Exemplo
-
Cabeçalho User-Agent do Internet Explorer 9 em um PC:
User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0; -
Requisição com um cabeçalho User-Agent personalizado:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \ -H 'User-Agent: iPhone OS;MI 5'
-
Lista de bloqueios ou de permissões de endereços IP
-
Visão geral
Configure uma lista de bloqueios ou de permissões de endereços IP para negar ou permitir o acesso de endereços IP específicos.
Endereços IP na lista de bloqueios não podem acessar o nome de domínio acelerado.
Somente endereços IP na lista de permissões podem acessar o nome de domínio acelerado.
-
É possível adicionar endereços IP individuais ou blocos CIDR.
Por exemplo, 127.0.0.0/24 abrange endereços IP de 127.0.0.0 a 127.0.0.254. A máscara de sub-rede /24 designa os primeiros 24 bits como a parte de rede, deixando 8 bits para hosts (28-2 = 254 endereços utilizáveis).
-
Métodos de configuração
Console: Para mais informações, consulte Configurar uma lista de bloqueios ou de permissões de endereços IP.
-
API: Chame a operação BatchSetLiveDomainConfigs para configurar vários nomes de domínio simultaneamente, incluindo a configuração da lista de bloqueios ou de permissões de endereços IP.
Configure uma lista de permissões de endereços IP usando o SDK de servidor 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(); } }NotaNeste exemplo, DomainNames especifica o domínio de streaming. Endereços IP no bloco CIDR 127.0.0.0/24 são adicionados à lista de permissões.
Para obter informações sobre o SDK de servidor para Java, consulte Usar o SDK de servidor para Java.
-
Observações de uso
ImportanteAs listas de bloqueios e de permissões são mutuamente exclusivas.
É possível adicionar até 3.000 endereços IPv4 ou 1.000 endereços IPv6. Endereços IPv6 não diferenciam maiúsculas de minúsculas e devem usar notação completa.