PrivateLink establece una conexión privada y segura entre su VPC y Alibaba Cloud OSS. Esto proporciona aislamiento de tráfico a nivel de red para mitigar los riesgos de seguridad de los datos, resolver conflictos de direcciones de red y reducir la complejidad operativa. De este modo, le ayuda a construir una arquitectura de acceso al almacenamiento en la nube que sea segura y controlable.
Cómo funciona
PrivateLink funciona mediante la creación de un endpoint privado dedicado en su VPC que se conecta a Alibaba Cloud OSS. Esto garantiza que todo el tráfico de acceso permanezca dentro de la red troncal de Alibaba Cloud y no atraviese la internet pública. También ofrece un control de acceso preciso basado en la IP de origen y registros de flujo de VPC para auditorías, lo que crea un framework de seguridad de datos de nivel empresarial. En comparación con los nombres de dominio internos predeterminados que proporciona OSS, PrivateLink ofrece un mayor nivel de aislamiento de seguridad de red nativo y un control detallado. Por ello, es adecuado para los siguientes escenarios de negocio:
|
Escenario de negocio |
Nombre de dominio interno |
PrivateLink |
|
Requisitos estrictos de seguridad y cumplimiento |
El acceso se produce a través de un punto de entrada de servicio público, lo que expone la superficie de ataque a todas las VPC. La seguridad depende principalmente de políticas de capa de aplicación. |
Reduce la superficie de ataque. El punto de entrada está dentro de su VPC, por lo que otras VPC no pueden descubrirlo ni acceder a él. El tráfico se aísla de forma nativa en la capa de red. |
|
Necesidad de un control de acceso detallado a nivel de red |
No es posible usar un security group para controlar el acceso a OSS. Solo puede depender de una política de bucket. |
Admite la vinculación de security groups. Puede configurar reglas de security group para un endpoint de PrivateLink y controlar con precisión qué IP de origen pueden acceder a OSS. |
|
Necesidad de auditar todos los intentos de conexión de red |
Los registros de acceso de OSS solo registran las solicitudes correctas. No permiten auditar los intentos de conexión rechazados en la capa de red. |
Admite registros de flujo de VPC. Permite capturar y auditar todo el tráfico que intenta acceder al endpoint, independientemente de si tiene éxito o no. |
|
Arquitectura de red de nube híbrida compleja con posibles conflictos de IP |
Los servicios en la nube usan el bloque CIDR 100.64.0.0/10 de forma predeterminada, lo cual puede entrar en conflicto con el plan de red de su centro de datos local. |
Evita conflictos de IP. El endpoint usa una dirección IP del bloque CIDR de su VPC. Esto cumple por completo con su plan de IP personalizado y simplifica el enrutamiento en la nube híbrida. |
Regiones compatibles
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) y UK (London).
Configuración y uso de PrivateLink
Cree un endpoint para establecer una conexión privada mediante PrivateLink. Así podrá acceder de forma segura a los recursos de OSS desde su VPC o centro de datos local.
Creación y verificación de un endpoint
Primero, cree un endpoint para establecer una conexión privada y segura entre su VPC y OSS. Una vez creado el endpoint, use una instancia de ECS para comprobar su conectividad de red y acceda a OSS para verificar que la configuración sea correcta.
Antes de empezar, asegúrese de haber created a VPC and a vSwitch . Los pasos de verificación requieren una instancia de ECS. Si no cuenta con una instancia existente, consulte Purchase an ECS instance para crear una instancia pay-as-you-go.
Paso 1: Crear un endpoint
Vaya a la página del endpoint de VPC y haga clic en Create Endpoint. Si es la primera vez que usa el servicio, siga las indicaciones en pantalla para activar el servicio PrivateLink.
-
Configure los siguientes parámetros y mantenga los valores predeterminados para las opciones que no se mencionen.
Region: Seleccione la región donde se encuentra el bucket de OSS de destino, por ejemplo, China (Hangzhou).
Endpoint Name: Introduzca un nombre descriptivo para el endpoint, como
privatelink-oss.Endpoint Type: Seleccione Interface Endpoint.
Endpoint Service: Seleccione Alibaba Cloud Service y luego elija el servicio de endpoint de OSS en la lista (la entrada cuyo nombre termina con
oss).VPC: Seleccione la VPC de destino donde desea crear el endpoint. Si no hay ninguna VPC disponible, haga clic en Create VPC para crear una nueva.
Security Groups: Seleccione el security group que se vinculará al endpoint para controlar los permisos de acceso. Si no hay ningún security group adecuado, haga clic en Create Security Group para crear uno.
Zone and vSwitch: Seleccione la zona de disponibilidad y el vSwitch correspondiente para el despliegue del endpoint. Si no hay ningún vSwitch disponible, haga clic en Create vSwitch para crear uno nuevo.
-
Haga clic en OK. El sistema crea el endpoint automáticamente. Después de la creación, puede consultar y copiar el Domain Name of Endpoint Service en la página de detalles del endpoint. Use este nombre de dominio para el acceso posterior a OSS.
El nombre de dominio del servicio de endpoint tiene el formato
ep-<InstanceID>.oss.cn-hangzhou.privatelink.aliyuncs.com. En la sección Domain name of endpoint service, haga clic en Copy para obtenerlo.
Paso 2: Verificar el endpoint
Ejecute una prueba de conectividad y descargue un archivo para confirmar que el endpoint de PrivateLink esté configurado correctamente.
-
Comprobar la conectividad de red
Use el comando
pingpara probar la conectividad de red hacia el nombre de dominio del endpoint. Así confirmará que la resolución DNS y la ruta de red son correctas.ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com -
Comprobar la descarga de archivos
Desde una instancia de ECS en la misma región, use ossutil para descargar un archivo a través de la conexión de PrivateLink. De esta manera confirmará que la transferencia de datos funciona de extremo a extremo.
-
Use el nombre de dominio del endpoint (por ejemplo,
ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) para acceder a los recursos de OSS. En el siguiente ejemplo se descarga un archivo llamadodest.jpgde un bucket denominadoexample-bucket:ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style pathSi el comando se ejecuta correctamente, se muestra la siguiente salida, lo que indica que el archivo se descargó. Puede consultar el archivo descargado en el directorio
/tmp.Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s 0.193189(s) elapsed
Refuerzo de la seguridad de acceso a la VPC
Después de comprobar la funcionalidad de PrivateLink, puede mejorar aún más la seguridad mediante la configuración de una bucket policy. En el siguiente ejemplo se muestra cómo restringir el acceso para permitir únicamente las solicitudes provenientes de la VPC vinculada al endpoint de PrivateLink. Con esto se implementa el control de acceso tanto en la capa de red como en la de aplicación.
Vaya a la lista de buckets y haga clic en el bucket de destino.
En el panel de navegación izquierdo, haga clic en .
-
Haga clic en Authorize y configure los siguientes ajustes. Para los demás parámetros, puede mantener las opciones predeterminadas.
Authorized User: Seleccione All Accounts (*).
Authorized Operation: Seleccione Advanced Settings.
Effect: Seleccione Reject.
Actions: Seleccione oss:GetObject.
Condition: Seleccione VPC ≠ y elija la VPC vinculada a su endpoint de PrivateLink en la lista desplegable.
Haga clic en OK para completar la configuración de la política del bucket.
Conexión de dispositivos locales mediante SSL-VPN
La solución SSL-VPN permite que dispositivos locales individuales, como estaciones de trabajo de desarrolladores o celulares, se conecten a su VPC a través de un túnel cifrado. Una vez que un dispositivo establece el túnel, puede acceder de forma segura a OSS mediante el endpoint de PrivateLink configurado. Este enfoque es adecuado para escenarios de trabajo remoto, desarrollo y pruebas, así como acceso de emergencia.
Paso 1: Crear la puerta de enlace SSL-VPN y configurar el cliente
Despliegue una puerta de enlace SSL-VPN y complete la configuración del cliente para establecer una conexión cifrada entre su dispositivo local y la VPC. Para conocer los pasos de configuración detallados, consulte Connect a PC or an Android device to a VPC by using an SSL-VPN connection.
Paso 2: Verificar el acceso a OSS mediante PrivateLink
Compruebe la conexión de PrivateLink mediante una prueba de conectividad y la descarga de un archivo. Así se asegurará de que el enlace de acceso privado funcione correctamente.
-
Comprobar la conectividad
Use el comando
pingpara probar la conectividad de red hacia el nombre de dominio del endpoint. Así verificará que la resolución DNS y la ruta de red sean correctas.ping -c 4 ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com -
Comprobar la descarga de archivos
ossutil
Use ossutil para comprobar la conexión mediante una operación con archivos.
-
Use el nombre de dominio del endpoint (por ejemplo,
ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com) para acceder a los recursos de OSS. En el siguiente ejemplo se descarga un archivo llamadodest.jpgde un bucket denominadoexample-bucket:ossutil cp oss://example-bucket/dest.jpg /tmp/ -e ep-bp1i****************.oss.cn-hangzhou.privatelink.aliyuncs.com --addressing-style pathSi el comando se ejecuta correctamente, se muestra la siguiente salida, lo que indica que el archivo se descargó. Puede consultar el archivo descargado en el directorio
/tmp.Success: Total 1 object, size 134102 B, Download done:(1 files, 134102 B), avg 680.112 KiB/s 0.193189(s) elapsed
SDK
Usar un SDK se asemeja más a un entorno de producción, ya que admite la integración de lógica de negocio compleja y el manejo de excepciones. Los siguientes SDK admiten el acceso a OSS mediante PrivateLink.
Java
Cuando acceda a OSS mediante PrivateLink, llame a
setSLDEnabled(true)para habilitar el modo de acceso por ruta. Para el acceso a través de la red pública, establézcalo ensetSLDEnabled(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
Cuando acceda a OSS mediante PrivateLink, establezca
is_path_style=Truepara habilitar el modo de acceso por ruta.# -*- 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
Cuando acceda a OSS mediante PrivateLink, use
ForcePathStyle(true)para habilitar el modo de acceso por ruta.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++
Cuando acceda a OSS mediante PrivateLink, establezca
conf.isPathStyle = truepara habilitar el modo de acceso por ruta.#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; }
Conexión de centros de datos con Express Connect o VPN
Un centro de datos local puede conectarse a una VPC de Alibaba Cloud mediante un circuito de Express Connect o una puerta de enlace VPN. Luego, puede usar PrivateLink para acceder a OSS a través de una red privada. Express Connect ofrece un rendimiento de red estable y ancho de banda garantizado, mientras que una puerta de enlace VPN proporciona una conexión cifrada y flexible. Ambas soluciones son adecuadas para la transferencia de datos a gran escala en entornos de producción. Para conocer los métodos de configuración detallados, consulte Connect a VPC to an on-premises data center or another cloud.
Entorno de producción
Mejores prácticas
-
Optimizar las configuraciones de los security groups
Configure las security group rules según el principio de mínimo privilegio. Abra los puertos de acceso del endpoint solo a los rangos de direcciones IP necesarios y establezca un mecanismo periódico de revisión de reglas de seguridad. Los controles precisos de IP de origen y puerto garantizan que las políticas de acceso se alineen con los requisitos del negocio. Esto previene la proliferación de permisos y el acceso no autorizado.
-
Supervisar la conectividad de red
Habilite la función VPC flow logs y establezca un mecanismo de detección de anomalías basado en patrones de tráfico. Así supervisará el comportamiento de acceso de PrivateLink y el estado de la transferencia de datos en tiempo real.
-
Usar un despliegue multizona
En un entorno de producción, despliegue endpoints en varias zonas de disponibilidad para construir una arquitectura altamente disponible y tolerante a fallos. Utilice balanceo de carga o DNS round-robin para distribuir el tráfico. Si una zona de disponibilidad presenta fallas, el tráfico cambia automáticamente a los endpoints operativos de otras zonas. De este modo se garantiza la continuidad del servicio y la estabilidad del negocio.
Facturación
PrivateLink se factura por hora según el uso real. Los cargos incluyen una tarifa de instancia y una tarifa de procesamiento de datos. El usuario del servicio y el proveedor del servicio pueden ser cuentas de Alibaba Cloud distintas, y los cargos pueden facturarse a una cuenta específica. Para obtener más información sobre la facturación, consulte Billing overview.