Los access points proporcionan puntos de entrada independientes para los buckets. Cree un access point separado para cada aplicación o equipo y utilice las políticas de access point para gestionar los permisos de forma individual; así evitará reglas complejas en una sola política de bucket.
Funcionamiento
Un access point actúa como una capa de proxy para un bucket. Al crear uno, OSS genera un alias de access point único que reemplaza el nombre del bucket en las solicitudes. Cada access point cuenta con su propia política de access point (que define las acciones permitidas, los recursos y las identidades) y un origen de red (internet o una VPC específica) para lograr un acceso aislado y adaptado a cada escenario.
Cuando un usuario realiza una solicitud a través de un access point, el sistema evalúa conjuntamente la RAM policy, la bucket policy y la política del access point. La solicitud se completa correctamente solo cuando tanto las políticas combinadas de RAM/bucket como la política del access point se evalúan como Allow. Permission evaluation logic.
De forma predeterminada, un access point no tiene acceso al bucket. Configure la delegación de permisos en la política del bucket mediante las claves de condición oss:DataAccessPointArn, oss:DataAccessPointAccount o oss:AccessPointNetworkOrigin para otorgar explícitamente al access point acceso al bucket.
Inicio rápido
Cree un access point, delegue permisos en la política del bucket y luego acceda a los recursos mediante el alias del access point.
Paso 1: Crear un access point
Cree un access point y configure su política para definir quién puede realizar qué acciones sobre qué recursos de OSS y bajo qué condiciones.
Vaya a la Access Point List y haga clic en Create Access Point.
-
Introduzca un Access Point Name, seleccione el bucket asociado y el Network Origin, y luego haga clic en Next.
NotaSi establece el Network Origin en VPC, debe introducir un VPC ID. Puede obtener el VPC ID desde la VPC Console.
La región de la VPC especificada debe ser una de las regions that support OSS gateway endpoints. Si las regiones no coinciden, las solicitudes de autenticación no podrán asociarse correctamente con la VPC indicada, lo que provocará fallos de autenticación.
-
Desactive la opción Block Public Access y configure una política de access point.
GUI
Parámetro
Descripción
Applied To
Seleccione si desea autorizar el acceso al Whole Bucket o a Specific Resources.
Resource Paths
-
Si establece Applied To en Whole Bucket, el campo Resource Paths se configura como
accesspoint/{Access Point Name}/*. -
Si establece Applied To en Specific Resources, introduzca el directorio u objeto individual que desea autorizar. Puede agregar varias entradas.
Authorized User
Especifique el destinatario de los permisos.
-
RAM user: Seleccione un usuario de RAM que pertenezca a la cuenta actual de Alibaba Cloud.
La cuenta que ha iniciado sesión debe ser una cuenta de Alibaba Cloud o un usuario de RAM con permisos de gestión de buckets y permiso
ListUsers. De lo contrario, no será posible listar los usuarios de RAM. -
Other Account: Introduzca el UID de otra cuenta o usuario de RAM, o bien un usuario con rol asumido cuyo ARN comience con
arn:sts, por ejemploarn:sts::1798**:assumed-role/role-name/session-name. Puede otorgar permisos a varios usuarios, con una entrada por línea.
Authorized Operation
-
Simple Settings: Seleccione una combinación común de operaciones autorizadas. Las opciones incluyen Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access y Deny Access.
-
Advanced Settings: Personalice el Effect (Allow o Reject) y la Action.
Syntax
Introduzca la política de autorización en formato JSON en el editor.
Ejemplo de política: Otorgar permisos de lectura/escritura al usuario
20816353761158****.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:GetObject", "oss:PutObject", "oss:GetObjectAcl", "oss:PutObjectAcl", "oss:ListObjects", "oss:AbortMultipartUpload", "oss:ListParts", "oss:RestoreObject", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}" ], "Condition": { "StringLike": { "oss:Prefix": [ "*" ] } } }] }Un documento de política contiene Version y Statement.
Version: La versión de la política. Este valor es fijo en
1y no se puede modificar.-
Statement: Una regla de la política. Cada declaración contiene Effect, Action, Principal, Resource y Condition.
Elemento de la política
Descripción
Effect
El efecto de la política. Los valores válidos son
AllowyDeny.Action
La operación que se realizará sobre el recurso. Se admite el comodín de asterisco (
*).Principal
El usuario, la cuenta o el rol al que aplica la política.
Resource
Los recursos a los que aplica la política.
Condition
Las condiciones bajo las cuales la política entra en vigor.
Si se especifican varias condiciones, se evalúan mediante un AND lógico; todas las condiciones deben cumplirse para que la política surta efecto.
Todos los elementos de la política se definen en Authorization Syntax and Elements.
-
Haga clic en Submit y espere a que se cree el access point.
Paso 2: Delegar permisos
Después de crear un access point, configure la delegación de permisos en la política del bucket para otorgarle acceso al mismo. Hay tres tipos de delegación disponibles:
oss:DataAccessPointArn: Delega permisos de acceso para un access point específico.oss:DataAccessPointAccount: Delega permisos de acceso para todos los access points bajo la cuenta actual de Alibaba Cloud.oss:AccessPointNetworkOrigin: Delega permisos de acceso para todos los access points que tienen un origen de red específico.
Access point específico
Vaya a la Bucket List y haga clic en el nombre del bucket de destino.
En el panel de navegación izquierdo, elija y luego haga clic en la pestaña Add Rule by Syntax.
-
Haga clic en Edit e introduzca la política de autorización en formato JSON en el editor.
NotaReemplace el UID, el nombre del bucket, el ID de región y el nombre del access point con sus valores reales. Si la política del bucket ya contiene declaraciones, agregue esta regla al arreglo
Statement.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointArn": [ "acs:oss:oss-{region-id}:179882766168****:accesspoint/{ap-name}" ] } } }] } Haga clic en Save para aplicar la política del bucket.
Todos los access points
Vaya a la Bucket List y haga clic en el nombre del bucket de destino.
En el panel de navegación izquierdo, elija y luego haga clic en la pestaña Add Rule by Syntax.
-
Haga clic en Edit e introduzca la política de autorización en formato JSON en el editor.
NotaReemplace el UID y el nombre del bucket con sus valores reales. Si la política del bucket ya contiene declaraciones, agregue esta regla al arreglo
Statement.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:DataAccessPointAccount": [ "179882766168****" ] } } }] } Haga clic en Save para aplicar la política del bucket.
Por origen de red
Vaya a la Bucket List y haga clic en el nombre del bucket de destino.
En el panel de navegación izquierdo, elija y luego haga clic en la pestaña Add Rule by Syntax.
-
Haga clic en Edit e introduzca la política de autorización en formato JSON en el editor.
NotaReemplace el UID y el nombre del bucket con sus valores reales. Si la política del bucket ya contiene declaraciones, agregue esta regla al arreglo
Statement.Cuando
oss:AccessPointNetworkOriginse establece eninternet, los permisos se delegan a todos los access points cuyo origen de red es internet. Esta configuración permite el acceso tanto desde internet como desde VPCs. Para restringir el acceso únicamente a VPCs, cambie el valor avpc.
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] } Haga clic en Save para aplicar la política del bucket.
Si recibe un error como "The bucket policy contains public access semantics", desactive Block Public Access para el bucket antes de delegar permisos.
Paso 3: Acceder a los recursos
Las identidades autorizadas (como los usuarios de RAM) utilizan el alias del access point para acceder a los recursos de OSS.
SDK
Solo los SDKs de Java y Python admiten alias de access point.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;
import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
import java.io.File;
/**
* OSS Java SDK V2 example: Download an object to a local file by using an access point.
*/
public class DownloadObjectWithAccessPoint {
public static void main(String[] args) {
// Create an OSS client.
String accessKeyId = System.getenv("OSS_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("OSS_ACCESS_KEY_SECRET");
CredentialsProvider provider = new StaticCredentialsProvider(accessKeyId, accessKeySecret);
OSSClient client = OSSClient.newBuilder()
.credentialsProvider(provider)
.region("<region-id>")
.build();
// Download the object to a local file by using an access point alias.
String bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias";
String key = "example.jpg";
File file = new File("example.jpg");
client.getObjectToFile(GetObjectRequest.newBuilder()
.bucket(bucket)
.key(key)
.build(), file);
System.out.println("Download complete: " + key + " -> " + file.getPath());
// Close the client.
try {
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""OSS Python SDK V2 example: Download an object to a local file by using an access point."""
import alibabacloud_oss_v2 as oss
def main() -> None:
"""Main function"""
# Create an OSS client.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
config = oss.config.load_default()
config.credentials_provider = credentials_provider
config.region = "<region-id>"
config.endpoint = "oss-<region-id>.aliyuncs.com"
client = oss.Client(config)
# Download the object to a local file by using an access point alias.
bucket = "example-ap-b156d01070a10322664d6704cd1d47****-ossalias"
key = "example.jpg"
file_path = "example.jpg"
request = oss.GetObjectRequest(bucket, key)
client.get_object_to_file(request, file_path)
print(f"Download complete: {key} -> {file_path}")
if __name__ == "__main__":
main()
ossutil
Utilice el alias del access point como nombre del bucket en los comandos de ossutil.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmp
REST API
Utilice el alias del access point en el encabezado Host:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Puede usar curl para comprobar rápidamente la conectividad y la configuración de permisos de su access point:
curl -v \
-H "Date: <GMT time>" \
-H "Authorization: OSS <AccessKeyId>:<Signature>" \
"https://<access-point-alias>.oss-<region-id>.oss-accesspoint.aliyuncs.com/<ObjectName>" \
-o <local-file-path>
Escenario de ejemplo
Este ejemplo utiliza access points para proporcionar acceso seguro y aislado a múltiples departamentos en un escenario de análisis de big data.
Escenario
Una empresa (UID de cuenta de Alibaba Cloud: 137918634953****) almacena datos recopilados centralmente en un bucket llamado examplebucket. Diez departamentos comerciales diferentes necesitan acceder a este bucket con los siguientes requisitos:
|
Departamento |
Alcance de acceso |
Permisos |
Origen de red |
|
Departamentos 1–3 |
Directorio |
Solo lectura |
Internet |
|
Departamento 4 |
Todo el bucket |
Lectura/Escritura |
Internet |
|
Departamentos 5–10 |
Directorio |
Lectura/Escritura |
Solo VPC |
Diseño de la solución
Diseñe tres access points para los diferentes escenarios de acceso, utilizando políticas de access point para el control de permisos y las restricciones de red.
|
Access point |
Parámetro |
Origen de red |
Destinatario |
Recurso autorizado |
Permisos |
|
Access Point 1 |
|
Internet |
Usuarios de RAM de los Departamentos 1–3 (UID: |
|
Solo lectura |
|
Access Point 2 |
|
Internet |
Usuarios de RAM del Departamento 4 (UID: |
|
Lectura/Escritura |
|
Access Point 3 |
|
VPC |
Usuarios de RAM de los Departamentos 5–10 (UID: |
|
Lectura/Escritura |
Política de access point
ap-01: Acceso de solo lectura
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:GetObjectAcl",
"oss:ListObjects",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01/object/dir1/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26571698800555****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-01"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir1/*"
]
}
}
}]
}
ap-02: Acceso de lectura/escritura
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02/object/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"25770968794578****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-02"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"*"
]
}
}
}]
}
ap-03: Acceso de lectura/escritura desde VPC
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03/object/dir2/*"
]
},{
"Effect": "Allow",
"Action": [
"oss:ListObjects",
"oss:GetObject"
],
"Principal": [
"26806658794579****"
],
"Resource": [
"acs:oss:{region-id}:137918634953****:accesspoint/ap-03"
],
"Condition": {
"StringLike": {
"oss:Prefix": [
"dir2/*"
]
}
}
}]
}
Delegación de política de bucket
Este escenario utiliza oss:DataAccessPointAccount para una delegación unificada en todos los access points bajo la misma cuenta. Para un control granular, utilice oss:DataAccessPointArn para delegar por access point.
Delegación unificada
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}
Delegación individual
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointArn": [
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-01",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-02",
"acs:oss:oss-{region-id}:137918634953****:accesspoint/ap-03"
]
}
}
}]
}
Lógica de evaluación de permisos
|
Resultado de política de RAM y bucket |
Resultado de política de access point |
Resultado final |
|
Allow |
Allow |
Allow |
|
Allow |
Deny |
Deny |
|
Allow |
Implicit Deny |
Implicit Deny |
|
Deny |
Allow |
Deny |
|
Deny |
Deny |
Deny |
|
Deny |
Implicit Deny |
Deny |
|
Implicit Deny |
Allow |
Implicit Deny |
|
Implicit Deny |
Deny |
Deny |
|
Implicit Deny |
Implicit Deny |
Implicit Deny |
Allow: La solicitud coincide con una declaración Allow y no hay declaraciones Deny.
Denegación explícita: La solicitud coincide con una declaración Deny. Deny tiene prioridad sobre Allow.
Denegación implícita: La solicitud no coincide ni con una declaración Allow ni con una Deny. De forma predeterminada, una identidad de RAM no tiene permisos. Cualquier acción no permitida explícitamente se deniega implícitamente.
Cuotas y limitaciones
|
Limitación |
Descripción |
|
Método de creación |
Cree access points mediante la consola de OSS, la API u ossutil. No se admite la creación mediante SDKs. |
|
Cantidad de access points |
Máximo de 1,000 access points por cuenta de Alibaba Cloud. |
|
Reglas de modificación |
Después de la creación, solo se puede modificar la política del access point. El nombre y el alias son inmutables. |
|
Método de acceso |
No se admite el acceso anónimo. |
Preguntas frecuentes
¿La política de access point admite listas de permitidos de IP?
Sí. Agregue una condición acs:SourceIp a su política de access point para implementar control de acceso basado en IP. Ejemplo:
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": ["oss:GetObject"],
"Principal": ["*"],
"Resource": ["acs:oss:{region-id}:179882766168****:accesspoint/{ap-name}/object/*"],
"Condition": {
"IpAddress": {
"acs:SourceIp": ["192.168.1.0/24", "203.0.113.5"]
}
}
}]
}
Esta política permite que solo las solicitudes provenientes de las IPs o rangos CIDR especificados accedan a los recursos a través del access point. El ejemplo usa "203.0.113.5" (una IP sin máscara), que es la forma recomendada de especificar una sola IP. Si prefiere la notación CIDR (como /32 para una sola IP), elija el operador de condición apropiado:
|
Operador de condición |
Comportamiento |
Caso de uso |
|
|
Excluye las IPs límite (direcciones de red y broadcast) |
IPs simples o rangos /1~/31 |
|
|
Incluye las IPs límite |
Cuando se usa /32 para una sola IP |
IpAddress excluye las IPs límite (direcciones de red y broadcast) al evaluar rangos CIDR. Con una máscara /32, la propia IP es la dirección límite y queda excluida, lo que hace que la política no tenga efecto. Utilice IpAddressIncludeBorder en su lugar:
"Condition": {
"IpAddressIncludeBorder": {
"acs:SourceIp": ["203.0.113.5/32"]
}
}
Permisos obligatorios para la creación
Se requieren los siguientes permisos: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy y oss:DeleteBucketPolicy.