Os access points fornecem pontos de entrada independentes para buckets. Crie um access point separado para cada aplicação ou equipe e use políticas de access point para gerenciar permissões individualmente, evitando regras complexas em uma única política de bucket.
Como funciona
Um access point atua como uma camada de proxy para um bucket. Ao criar um access point, o OSS gera um alias de access point exclusivo que substitui o nome do bucket nas requisições. Cada access point possui sua própria política de access point (que define ações, recursos e identidades permitidos) e origem de rede (internet ou uma VPC específica), garantindo acesso isolado e baseado em cenários.
Quando um usuário faz uma requisição por meio de um access point, o sistema avalia a RAM policy, a bucket policy e a política de access point em conjunto. A requisição só é bem-sucedida quando tanto as políticas combinadas de RAM/bucket quanto a política de access point resultam em Allow. Consulte a Lógica de avaliação de permissões.
Por padrão, um access point não tem acesso ao bucket. Configure a delegação de permissões na política do bucket usando as chaves de condição oss:DataAccessPointArn, oss:DataAccessPointAccount ou oss:AccessPointNetworkOrigin para conceder explicitamente acesso ao bucket por meio do access point.
Início rápido
Crie um access point, delegue permissões na política do bucket e acesse os recursos pelo alias do access point.
Etapa 1: Criar um access point
Crie um access point e configure sua política para definir quem pode executar quais ações em quais recursos do OSS e sob quais condições.
Acesse a Access Point List e clique em Create Access Point.
-
Insira um Access Point Name, selecione o bucket associado e a Network Origin e clique em Next.
NotaSe você definir a Network Origin como VPC, insira um VPC ID. Obtenha o VPC ID no VPC Console.
A região da VPC especificada deve ser uma das regions that support OSS gateway endpoints. Se as regiões não coincidirem, as requisições de autenticação não poderão ser associadas corretamente à VPC especificada, resultando em falhas de autenticação.
-
Desative a opção Block Public Access e configure uma política de access point.
GUI
Parâmetro
Descrição
Applied To
Selecione se deseja autorizar o acesso ao Whole Bucket ou a Specific Resources.
Resource Paths
-
Se você definir Applied To como Whole Bucket, o campo Resource Paths será definido como
accesspoint/{Access Point Name}/*. -
Se você definir Applied To como Specific Resources, insira o diretório ou objeto individual a autorizar. É possível adicionar várias entradas.
Authorized User
Especifique o destinatário da autorização.
-
RAM user: Selecione um usuário RAM pertencente à conta Alibaba Cloud atual.
A conta conectada deve ser uma conta Alibaba Cloud ou um usuário RAM com permissões de gerenciamento de bucket e permissão
ListUsers. Caso contrário, os usuários RAM não serão listados. -
Other Account: Insira o UID de outra conta ou usuário RAM, ou de um usuário com função assumida cujo ARN comece com
arn:sts, comoarn:sts::1798**:assumed-role/role-name/session-name. Você pode conceder permissões a vários usuários, com uma entrada por linha.
Authorized Operation
-
Simple Settings: Selecione uma combinação comum de operações autorizadas. As opções incluem Read-Only (excluding ListObject), Read-Only (including ListObject), Read/Write, Full Access e Deny Access.
-
Advanced Settings: Personalize o Effect (Allow ou Reject) e a Action.
Syntax
Insira a política de autorização no formato JSON no editor.
Exemplo de política: Conceder permissões de leitura/gravação ao usuário
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": [ "*" ] } } }] }Um documento de política contém Version e Statement.
Version: A versão da política. Este valor é fixo em
1e não pode ser alterado.-
Statement: Uma regra da política. Cada statement contém Effect, Action, Principal, Resource e Condition.
Elemento da política
Descrição
Effect
O efeito da política. Os valores válidos são
AlloweDeny.Action
A operação a executar no recurso. O caractere curinga asterisco (
*) é suportado.Principal
O usuário, conta ou função ao qual a política se aplica.
Resource
Os recursos aos quais a política se aplica.
Condition
As condições sob as quais a política entra em vigor.
Se múltiplas condições forem especificadas, elas serão avaliadas usando um AND lógico; todas as condições devem ser atendidas para que a política entre em vigor.
Todos os elementos da política estão definidos em Authorization Syntax and Elements.
-
Clique em Submit e aguarde a criação do access point.
Etapa 2: Delegar permissões
Após criar um access point, configure a delegação de permissões na política do bucket para conceder a ele acesso ao bucket. Existem três tipos de delegação disponíveis:
oss:DataAccessPointArn: Delega permissões de acesso para um access point específico.oss:DataAccessPointAccount: Delega permissões de acesso para todos os access points da conta Alibaba Cloud atual.oss:AccessPointNetworkOrigin: Delega permissões de acesso para todos os access points que possuem uma origem de rede específica.
Specific access point
Acesse a Bucket List e clique no nome do bucket desejado.
No painel de navegação à esquerda, escolha e clique na aba Add Rule by Syntax.
-
Clique em Edit e insira a política de autorização no formato JSON no editor.
NotaSubstitua o UID, o nome do bucket, o ID da região e o nome do access point pelos seus valores reais. Se a política do bucket já contiver statements, adicione esta regra ao array
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}" ] } } }] } Clique em Save para aplicar a política do bucket.
All access points
Acesse a Bucket List e clique no nome do bucket desejado.
No painel de navegação à esquerda, escolha e clique na aba Add Rule by Syntax.
-
Clique em Edit e insira a política de autorização no formato JSON no editor.
NotaSubstitua o UID e o nome do bucket pelos seus valores reais. Se a política do bucket já contiver statements, adicione esta regra ao array
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****" ] } } }] } Clique em Save para aplicar a política do bucket.
By network origin
Acesse a Bucket List e clique no nome do bucket desejado.
No painel de navegação à esquerda, escolha e clique na aba Add Rule by Syntax.
-
Clique em Edit e insira a política de autorização no formato JSON no editor.
NotaSubstitua o UID e o nome do bucket pelos seus valores reais. Se a política do bucket já contiver statements, adicione esta regra ao array
Statement.Quando
oss:AccessPointNetworkOriginestiver definido comointernet, as permissões são delegadas a todos os access points cuja origem de rede seja a internet. Essa configuração permite acesso tanto pela internet quanto por VPCs. Para restringir o acesso apenas a VPCs, altere o valor paravpc.
{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:*" ], "Principal": [ "*" ], "Resource": [ "acs:oss:*:179882766168****:example-bucket", "acs:oss:*:179882766168****:example-bucket/*" ], "Condition": { "StringEquals": { "oss:AccessPointNetworkOrigin": [ "internet" ] } } }] } Clique em Save para aplicar a política do bucket.
Se você receber um erro como "The bucket policy contains public access semantics", desative a opção Block Public Access do bucket antes de delegar permissões.
Etapa 3: Acessar recursos
Identidades autorizadas (como usuários RAM) usam o alias do access point para acessar recursos do OSS.
SDK
Apenas os SDKs Java e Python suportam aliases 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
Use o alias do access point como nome do bucket nos comandos do ossutil.
ossutil cp oss://example-ap-b156d01070a10322664d6704cd1d47****-ossalias/example.jpg /tmp
REST API
Use o alias do access point no cabeçalho Host:
GET /ObjectName HTTP/1.1
Host: example-ap-b156d01070a10322664d6704cd1d47****-ossalias.oss-{region-id}.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
Use o curl para verificar rapidamente a conectividade e a configuração de permissões do seu 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>
Cenário de exemplo
Este exemplo utiliza access points para fornecer acesso seguro e isolado a múltiplos departamentos em um cenário de análise de big data.
Cenário
Uma empresa (UID da conta Alibaba Cloud: 137918634953****) armazena dados coletados centralmente em um bucket chamado examplebucket. Dez departamentos comerciais diferentes precisam acessar este bucket com os seguintes requisitos:
|
Departamento |
Escopo de acesso |
Permissões |
Origem de rede |
|
Departamentos 1–3 |
Diretório |
Somente leitura |
Internet |
|
Departamento 4 |
Bucket inteiro |
Leitura/Gravação |
Internet |
|
Departamentos 5–10 |
Diretório |
Leitura/Gravação |
Apenas VPC |
Design da solução
Projete três access points para os diferentes cenários de acesso, utilizando políticas de access point para controle de permissões e restrições de rede.
|
Access point |
Parâmetro |
Origem de rede |
Destinatário |
Recurso autorizado |
Permissões |
|
Access Point 1 |
|
Internet |
Usuários RAM dos Departamentos 1–3 (UID: |
|
Somente leitura |
|
Access Point 2 |
|
Internet |
Usuários RAM do Departamento 4 (UID: |
|
Leitura/Gravação |
|
Access Point 3 |
|
VPC |
Usuários RAM dos Departamentos 5–10 (UID: |
|
Leitura/Gravação |
Política de access point
ap-01: Read-only access
{
"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: Read/write access
{
"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: VPC read/write access
{
"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/*"
]
}
}
}]
}
Delegação de política de bucket
Este cenário usa oss:DataAccessPointAccount para delegação unificada em todos os access points da mesma conta. Para um controle granular, use oss:DataAccessPointArn para delegar por access point.
Unified delegation
{
"Version": "1",
"Statement": [{
"Effect": "Allow",
"Action": [
"oss:*"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:137918634953****:examplebucket",
"acs:oss:*:137918634953****:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:DataAccessPointAccount": [
"137918634953****"
]
}
}
}]
}
Individual delegation
{
"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 avaliação de permissões
|
Resultado da política RAM e de bucket |
Resultado da 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: A requisição corresponde a um statement Allow e a nenhum statement Deny.
Negação explícita: A requisição corresponde a um statement Deny. Deny tem precedência sobre Allow.
Negação implícita: A requisição não corresponde nem a um statement Allow nem a um statement Deny. Por padrão, uma identidade RAM não possui permissões. Qualquer ação não explicitamente permitida é implicitamente negada.
Cotas e limitações
|
Limitação |
Descrição |
|
Método de criação |
Crie access points usando o console do OSS, API ou ossutil. Não há suporte para criação via SDKs. |
|
Quantidade de access points |
Máximo de 1.000 access points por conta Alibaba Cloud. |
|
Regras de modificação |
Após a criação, apenas a política do access point pode ser modificada. O nome e o alias são imutáveis. |
|
Método de acesso |
Não há suporte para acesso anônimo. |
FAQ
A política de access point suporta listas de permissões de IP?
Sim. Adicione uma condição acs:SourceIp à sua política de access point para controle de acesso baseado em IP. Exemplo:
{
"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 apenas que requisições provenientes dos IPs ou intervalos CIDR especificados acessem recursos através do access point. O exemplo usa "203.0.113.5" (um IP simples sem máscara), que é a forma recomendada de especificar um único IP. Se preferir a notação CIDR (como /32 para um único IP), escolha o operador de condição apropriado:
|
Operador de condição |
Comportamento |
Caso de uso |
|
|
Exclui IPs de borda (endereços de rede e broadcast) |
IPs simples ou intervalos /1~/31 |
|
|
Inclui IPs de borda |
Ao usar /32 para um único IP |
O operador IpAddress exclui IPs de borda (endereços de rede e broadcast) ao avaliar intervalos CIDR. Com uma máscara /32, o próprio IP é o endereço de borda e acaba sendo excluído, fazendo com que a política não tenha efeito. Use IpAddressIncludeBorder em vez disso:
"Condition": {
"IpAddressIncludeBorder": {
"acs:SourceIp": ["203.0.113.5/32"]
}
}
Permissões necessárias para criação
As seguintes permissões são obrigatórias: oss:CreateAccessPoint, oss:GetAccessPoint, oss:DeleteAccessPoint, oss:ListAccessPoints, oss:PutAccessPointPolicy, oss:GetAccessPointPolicy, oss:DeleteAccessPointPolicy, oss:PutBucketPolicy, oss:GetBucketPolicy e oss:DeleteBucketPolicy.