O PrivateLink estabelece uma conexão privada e segura entre sua VPC e o Alibaba Cloud OSS. Esse recurso proporciona isolamento de tráfego no nível de rede para mitigar riscos de segurança de dados, resolver conflitos de endereçamento de rede e reduzir a complexidade operacional, ajudando você a construir uma arquitetura de acesso a armazenamento em nuvem segura e controlável.
Como funciona
O PrivateLink cria um endpoint privado dedicado na sua VPC que se conecta ao Alibaba Cloud OSS. Isso garante que todo o tráfego de acesso permaneça na rede backbone da Alibaba Cloud, sem trafegar pela internet pública. O recurso também oferece controle de acesso preciso baseado em IP de origem e logs de fluxo da VPC para auditoria, criando uma estrutura de segurança de dados de nível empresarial. Em comparação aos nomes de domínio internos padrão fornecidos pelo OSS, o PrivateLink oferece um nível superior de isolamento nativo de segurança de rede e controle refinado, sendo adequado para os seguintes cenários de negócios:
|
Cenário de negócios |
Nome de domínio interno |
PrivateLink |
|
Requisitos rigorosos de segurança e conformidade |
O acesso ocorre por um ponto de entrada de service público, expondo a superfície de ataque a todas as VPCs. A segurança depende principalmente de políticas da camada de aplicação. |
Reduz a superfície de ataque. O ponto de entrada fica dentro da sua VPC, impedindo que outras VPCs o descubram ou acessem. O tráfego é isolado nativamente na camada de rede. |
|
Necessidade de controle de acesso refinado no nível de rede |
Não é possível usar um grupo de segurança para controlar o acesso ao OSS. A única opção é depender de uma política de bucket. |
Suporta vinculação a grupos de segurança. Configure regras de grupo de segurança para um endpoint do PrivateLink e controle com precisão quais IPs de origem podem acessar o OSS. |
|
Necessidade de auditar todas as tentativas de conexão de rede |
Os logs de acesso do OSS registram apenas solicitações bem-sucedidas. Eles não conseguem auditar tentativas de conexão rejeitadas na camada de rede. |
Suporta logs de fluxo da VPC. Capture e audite todo o tráfego que tentar acessar o endpoint, independentemente do sucesso da conexão. |
|
Arquitetura de rede híbrida complexa com possíveis conflitos de IP |
Os services de cloud usam o bloco CIDR 100.64.0.0/10 por padrão, o que pode entrar em conflito com o planejamento de rede do seu data center local. |
Evita conflitos de IP. O endpoint utiliza um endereço IP do bloco CIDR da sua VPC, respeitando totalmente seu plano de IP personalizado e simplificando o roteamento em cloud híbrida. |
Regiões suportadas
China (Hangzhou), China (Shanghai), China (Qingdao), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Heyuan), China (Guangzhou), China (Chengdu), Hong Kong (China), Japan (Tokyo), South Korea (Seoul), Singapore, Indonesia (Jakarta), Thailand (Bangkok), Germany (Frankfurt), US (Silicon Valley), US (Virginia) e UK (London).
Configure e use o PrivateLink
Crie um endpoint para estabelecer uma conexão privada por meio do PrivateLink, permitindo o acesso seguro aos recursos do OSS a partir da sua VPC ou data center local.
Crie e verifique um endpoint
Primeiro, crie um endpoint para estabelecer uma conexão privada e segura entre sua VPC e o OSS. Após criar o endpoint, utilize uma instância ECS para verificar a conectividade de rede e acesse o OSS para confirmar se a configuração está correta.
Antes de começar, certifique-se de ter created a VPC and a vSwitch . As etapas de verificação exigem uma instância ECS. Caso não possua uma instância existente, consulte Purchase an ECS instance para criar uma instância de pagamento conforme o uso.
Etapa 1: Crie um endpoint
Acesse a página VPC endpoint e clique em Create Endpoint. Se esta for a primeira vez que você utiliza o service, siga as instruções na tela para ativar o service PrivateLink.
-
Configure os parâmetros abaixo e mantenha os valores padrão para as opções não listadas.
Region: Selecione a região onde o bucket do OSS de destino está localizado, por exemplo, China (Hangzhou).
Endpoint Name: Insira um nome descritivo para o endpoint, como
privatelink-oss.Endpoint Type: Selecione Interface Endpoint.
Endpoint Service: Selecione Alibaba Cloud Service e escolha o service de endpoint do OSS na lista (a entrada cujo nome termina com
oss).VPC: Escolha a VPC de destino onde deseja criar o endpoint. Se nenhuma VPC estiver disponível, clique em Create VPC para criar uma nova.
Security Groups: Selecione o grupo de segurança a ser vinculado ao endpoint para controlar as permissões de acesso. Caso não haja um grupo adequado, clique em Create Security Group para criar um.
Zone and vSwitch: Defina a zona de disponibilidade e o vSwitch correspondente para a implantação do endpoint. Se nenhum vSwitch estiver disponível, clique em Create vSwitch para criar um novo.
-
Clique em OK. O sistema cria o endpoint automaticamente. Após a criação, visualize e copie o Domain Name of Endpoint Service na página de detalhes do endpoint. Utilize este nome de domínio para o acesso subsequente ao OSS.
O nome de domínio do service de endpoint segue o formato
ep-<InstanceID>.oss.cn-hangzhou.privatelink.aliyuncs.com. Na seção Domain name of endpoint service, clique em Copy para obtê-lo.
Etapa 2: Verifique o endpoint
Execute um teste de conectividade e baixe um arquivo para confirmar se o endpoint do PrivateLink está configurado corretamente.
-
Verifique a conectividade de rede
Utilize o comando
pingpara testar a conectividade de rede com o nome de domínio do endpoint e confirmar se a resolução de DNS e o caminho de rede estão corretos.ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com -
Verifique o download de arquivo
A partir de uma instância ECS na mesma região, use o ossutil para baixar um arquivo pela conexão PrivateLink e confirme se a transferência de dados funciona de ponta a ponta.
-
Use o nome de domínio do endpoint (por exemplo,
ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) para acessar os recursos do OSS. O exemplo abaixo baixa um arquivo chamadodest.jpgde um bucket denominadoexample-bucket:ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style pathUm comando bem-sucedido exibe a saída abaixo, indicando que o arquivo foi baixado. Visualize o arquivo baixado no diretório
/tmp.Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s 0.193189(s) elapsed
Fortaleça a segurança de acesso à VPC
Após verificar a funcionalidade do PrivateLink, aumente a segurança configurando uma bucket policy. O exemplo a seguir mostra como restringir o acesso para permitir apenas solicitações originadas da VPC vinculada ao endpoint do PrivateLink. Isso implementa o controle de acesso tanto na camada de rede quanto na de aplicação.
Acesse a Bucket list e clique no bucket de destino.
No painel de navegação à esquerda, clique em .
-
Clique em Authorize e configure as definições a seguir. Mantenha as opções padrão para os demais parâmetros.
Authorized User: Selecione All Accounts (*).
Authorized Operation: Escolha Advanced Settings.
Effect: Selecione Reject.
Actions: Marque oss:GetObject.
Condition: Selecione VPC ≠ e escolha a VPC vinculada ao seu endpoint do PrivateLink na lista suspensa.
Clique em OK para concluir a configuração da política de bucket.
Conecte dispositivos locais usando SSL-VPN
A solução SSL-VPN permite que dispositivos locais individuais, como estações de trabalho de desenvolvedores ou dispositivos móveis, se conectem à sua VPC por meio de um túnel criptografado. Depois que um dispositivo estabelece o túnel, ele acessa o OSS com segurança usando o endpoint do PrivateLink configurado. Essa abordagem é ideal para trabalho remoto, desenvolvimento e testes, além de cenários de acesso emergencial.
Etapa 1: Crie o gateway SSL-VPN e configure o cliente
Implante um gateway SSL-VPN e conclua a configuração do cliente para estabelecer uma conexão criptografada entre seu dispositivo local e a VPC. Para obter etapas detalhadas de configuração, consulte Connect a PC or an Android device to a VPC by using an SSL-VPN connection.
Etapa 2: Verifique o acesso ao OSS via PrivateLink
Valide a conexão do PrivateLink executando um teste de conectividade e baixando um arquivo para garantir que o link de acesso privado esteja funcional.
-
Verifique a conectividade
Utilize o comando
pingpara testar a conectividade de rede com o nome de domínio do endpoint e verificar se a resolução de DNS e o caminho de rede estão corretos.ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com -
Verifique o download de arquivo
ossutil
Use o ossutil para validar a conexão realizando uma operação de arquivo.
-
Utilize o nome de domínio do endpoint (por exemplo,
ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) para acessar os recursos do OSS. O exemplo abaixo baixa um arquivo chamadodest.jpgde um bucket denominadoexample-bucket:ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style pathUm comando bem-sucedido exibe a saída abaixo, indicando que o arquivo foi baixado. Visualize o arquivo baixado no diretório
/tmp.Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s 0.193189(s) elapsed
SDK
O uso de um sdk assemelha-se mais a um ambiente de produção, com suporte à integração de lógica de negócios complexa e tratamento de exceções. Os sdks a seguir oferecem suporte ao acesso ao OSS por meio do PrivateLink.
Java
Ao acessar o OSS via PrivateLink, chame
setSLDEnabled(true)para ativar o modo de acesso estilo caminho. Para acesso via rede pública, defina comosetSLDEnabled(false).import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.model.GetObjectRequest; import java.io.File; /** * OSS PrivateLink access example * Demonstrates how to access OSS and download a file by using PrivateLink */ public class Test { public static void main(String[] args) throws Exception { // PrivateLink endpoint domain name. String endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com"; // Specify the region that corresponds to the endpoint, for example, cn-hangzhou. String region = "cn-hangzhou"; // Obtain credentials from environment variables. // Before running, set the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name, for example, example-bucket. String bucketName = "example-bucket"; // Specify the full path of the object, excluding the bucket name. String objectName = "dest.jpg"; // Specify the local file name. String pathName = "dest.jpg"; // Configure client parameters. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); // Enable path-style access for PrivateLink access. Set to false for public access via the bucket's internet domain name. clientBuilderConfiguration.setSLDEnabled(true); // Explicitly declare the use of the Signature Version 4 algorithm. clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); // Create an OSS client instance. OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Download the object to a local file. // If the specified local file exists, it will be overwritten. If not, it will be created. // If no local path is specified, the downloaded file is saved by default to the project's root directory. ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName)); } catch (OSSException oe) { // Handle OSS server-side exceptions. System.out.println("Caught an OSSException, which means your request made it to the OSS server, but was rejected with an error response."); 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) { // Handle client-side exceptions. System.out.println("Caught a 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 { // Release resources. if (ossClient != null) { ossClient.shutdown(); } } } }Python
Ao acessar o OSS via PrivateLink, defina
is_path_style=Truepara ativar o modo de acesso estilo caminho.# -*- coding: utf-8 -*- """ OSS PrivateLink access example Accesses OSS via PrivateLink and downloads a file locally. """ import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider def main(): """Main function: Demonstrates accessing OSS and downloading a file via PrivateLink.""" # Configure access credentials. # Note: An Alibaba Cloud account's AccessKey has all API permissions and carries high risk. # We strongly recommend creating and using a RAM user for API access or daily O&M. Log in to the RAM console to create a RAM user. auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider()) # PrivateLink endpoint domain name. endpoint = 'https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com' # Bucket name. bucket_name = 'example-bucket' # Create a Bucket object. # is_path_style=True enables path-style access mode, which is suitable for scenarios like PrivateLink. bucket = oss2.Bucket(auth, endpoint, bucket_name, is_path_style=True) # OSS object path (full path excluding the bucket name). object_name = 'dest.jpg' # Local path to save the file. local_file_path = 'dest.jpg' # Download the object to a local file. # If the specified local file exists, it will be overwritten. If not, a new file will be created. bucket.get_object_to_file(object_name, local_file_path) print(f"File downloaded successfully: {object_name} -> {local_file_path}") if __name__ == '__main__': main()Go
Ao acessar o OSS via PrivateLink, use
ForcePathStyle(true)para ativar o modo de acesso estilo caminho.package main import ( "fmt" "os" "github.com/aliyun/aliyun-oss-go-sdk/oss" ) const ( // PrivateLink endpoint domain name. endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com" // Bucket name. bucketName = "example-bucket" // OSS object path (full path excluding the bucket name). objectName = "dest.jpg" // Local path to save the file. localFilePath = "dest.jpg" ) func main() { // Initialize the access credentials provider. // Obtain credentials from environment variables. // Before running this code example, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. provider, err := oss.NewEnvironmentVariableCredentialsProvider() if err != nil { fmt.Printf("Failed to initialize credentials provider: %v\n", err) os.Exit(-1) } // Create an OSS client instance. // oss.ForcePathStyle(true) enables path-style access mode, which is suitable for scenarios like PrivateLink. client, err := oss.New( endpoint, "", // AccessKeyId is obtained through the credentials provider. "", // AccessKeySecret is obtained through the credentials provider. oss.SetCredentialsProvider(&provider), oss.ForcePathStyle(true), ) if err != nil { fmt.Printf("Failed to create OSS client: %v\n", err) os.Exit(-1) } // Get the Bucket object. bucket, err := client.Bucket(bucketName) if err != nil { fmt.Printf("Failed to get Bucket object: %v\n", err) os.Exit(-1) } // Download the object to a local file. // If the specified local file exists, it will be overwritten. If not, a new file will be created. // If no local path is specified, the downloaded file is saved by default to the project's root directory. err = bucket.GetObjectToFile(objectName, localFilePath) if err != nil { fmt.Printf("Failed to download file: %v\n", err) os.Exit(-1) } fmt.Printf("File downloaded successfully: %s -> %s\n", objectName, localFilePath) }C++
Ao acessar o OSS via PrivateLink, defina
conf.isPathStyle = truepara ativar o modo de acesso estilo caminho.#include <alibabacloud/oss/OssClient.h> #include <memory> #include <fstream> #include <iostream> using namespace AlibabaCloud::OSS; int main(void) { // PrivateLink endpoint domain name. std::string Endpoint = "https://ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com"; // Bucket name. std::string BucketName = "example-bucket"; // OSS object path (must not include the bucket name). std::string ObjectName = "dest.jpg"; // Local path to save the file. // If the specified local file exists, it will be overwritten. If not, a new file will be created. // If no local path is specified, the downloaded file is saved by default to the project's root directory. std::string FileNametoSave = "dest.jpg"; // Initialize OSS SDK resources. InitializeSdk(); // Configure client parameters. ClientConfiguration conf; // Obtain credentials from environment variables. // Before running this code example, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>(); // Enable path-style access mode, which is suitable for scenarios like PrivateLink. conf.isPathStyle = true; // Create an OSS client instance. OssClient client(Endpoint, credentialsProvider, conf); // Build the GetObject request. GetObjectRequest request(BucketName, ObjectName); // Set the response stream factory to create a local file stream. request.setResponseStreamFactory([=]() { return std::make_shared<std::fstream>( FileNametoSave, std::ios_base::out | std::ios_base::in | std::ios_base::trunc | std::ios_base::binary ); }); // Execute the download operation. auto outcome = client.GetObject(request); // Process the download result. if (outcome.isSuccess()) { std::cout << "File downloaded successfully. Size: " << outcome.result().Metadata().ContentLength() << " bytes" << std::endl; std::cout << "File saved to: " << FileNametoSave << std::endl; } else { // Handle errors. std::cout << "File download failed" << std::endl << "Error code: " << outcome.error().Code() << std::endl << "Error message: " << outcome.error().Message() << std::endl << "Request ID: " << outcome.error().RequestId() << std::endl; // Release resources and return an error code. ShutdownSdk(); return -1; } // Release OSS SDK resources. ShutdownSdk(); return 0; }
Conecte data centers com Express Connect ou VPN
Um data center local pode se conectar a uma VPC da Alibaba Cloud por meio de um circuito Express Connect ou um gateway VPN e, em seguida, usar o PrivateLink para acessar o OSS via rede privada. O Express Connect oferece desempenho de rede estável e largura de banda garantida, enquanto o gateway VPN proporciona uma conexão criptografada flexível. Ambas as soluções são adequadas para transferência de dados em grande escala em ambientes de produção. Para métodos detalhados de configuração, consulte Connect a VPC to an on-premises data center or another cloud.
Ambiente de produção
Melhores práticas
-
Otimize as configurações de grupos de segurança
Configure security group rules seguindo o princípio do menor privilégio. Abra portas de acesso ao endpoint apenas para faixas de endereços IP necessárias e estabeleça um mecanismo regular de revisão de regras de segurança. Controles precisos de IP de origem e porta garantem que as políticas de acesso estejam alinhadas aos requisitos de negócios, evitando a proliferação de permissões e acessos não autorizados.
-
Monitore a conectividade de rede
Ative o recurso VPC flow logs e estabeleça um mecanismo de detecção de anomalias baseado em padrões de tráfego para monitorar o comportamento de acesso ao PrivateLink e o status de transferência de dados em tempo real.
-
Adote uma implantação multizona
Em ambientes de produção, implante endpoints em várias zonas de disponibilidade para construir uma arquitetura altamente disponível e tolerante a falhas. Utilize balanceamento de carga ou DNS round-robin para distribuir o tráfego. Se uma zona de disponibilidade falhar, o tráfego muda automaticamente para endpoints saudáveis em outras zonas, assegurando a continuidade do service e a estabilidade dos negócios.
Faturamento
O PrivateLink é faturado por hora com base no uso real. As taxas incluem uma tarifa de instância e uma tarifa de processamento de dados. O usuário do service e o provedor do service podem ser contas diferentes da Alibaba Cloud, e as cobranças podem ser faturadas para uma conta especificada. Para mais informações sobre faturamento, consulte Billing overview.