Uma bucket policy é uma política de autorização baseada em recursos anexada a um bucket. Use bucket policies para conceder acesso entre contas, ativar acesso anônimo ou restringir o acesso por endereço IP ou VPC.
Como funciona
A bucket policy utiliza um modelo baseado em recursos: ela se anexa a um bucket e define quais principais podem executar quais ações em quais recursos e sob quais condições.
Quando uma solicitação chega, o OSS avalia todas as políticas relevantes, incluindo bucket policies e políticas do RAM. A avaliação segue o princípio de negação prioritária: qualquer regra Deny explícita bloqueia a solicitação, independentemente das regras Allow. Se não houver nenhuma regra correspondente, a solicitação será negada por padrão.
As bucket policies possuem regras especiais para o proprietário do bucket:
Quando o principal está definido como um caractere curinga (*) e a política não inclui uma condição, a política se aplica apenas a usuários que não são o proprietário do bucket.
Quando o principal está definido como um caractere curinga (*) e a política inclui uma condição, a política se aplica a todos os usuários, incluindo o proprietário do bucket e usuários anônimos. Uma regra Deny pode tornar todo o bucket inacessível. Uma regra Allow pode expor seus dados a usuários anônimos.
Se várias instruções se aplicarem ao mesmo usuário, as permissões efetivas serão a união de todas as instruções, seguindo o princípio de negação prioritária.
A chave de condição
acs:SourceIpcorresponde apenas ao endereço IP de origem de uma solicitação e não distingue se o endereço IP é da rede pública ou de uma VPC. Isso significa que, se você usar apenasacs:SourceIppara restringir o acesso, solicitações de outra VPC que use o mesmo intervalo de endereços IP também serão permitidas, o que cria um risco de acesso não autorizado. Portanto, ao configurar uma Bucket Policy, se você especificaracs:SourceIp, também deverá especificaracs:SourceVpcpara identificar explicitamente a origem de rede da solicitação.Essa restrição se aplica apenas a novas Bucket Policies. As Bucket Policies existentes não são afetadas. No entanto, modificar uma Bucket Policy existente é tratado como um novo envio e está sujeito a essa restrição.
Configurar uma bucket policy
O OSS fornece dois métodos de configuração: gráfico e sintaxe.
Método gráfico: Interface baseada em formulários para cenários comuns de autorização.
Método de sintaxe: Editor baseado em JSON que suporta todos os recursos de política e combinações complexas de condições.
Método gráfico
Acesse a lista de Buckets e clique em no bucket desejado.
No painel de navegação à esquerda, clique em .
-
Selecione Add in GUI e clique em Authorize.
Parâmetro
Descrição
Applied To
Selecione se deseja conceder permissões em Whole Bucket ou em Specific Resources.
Resource Paths
-
Se você definir Applied To como Whole Bucket, Resource Paths será definido como
bucket-name/*. -
Se você definir Applied To como Specific Resources, insira o diretório ou objeto que deseja autorizar. É possível adicionar várias entradas.
Authorized User
Especifique o principal para conceder permissões.
-
All Accounts (*): Concede permissões a qualquer pessoa, incluindo um usuário anônimo.
-
RAM User: Selecione um usuário do RAM que pertença à conta atual da Alibaba Cloud.
A conta conectada deve ser uma conta da Alibaba Cloud (conta raiz) ou um usuário do RAM com permissões de gerenciamento de bucket e a permissão
ListUsersno RAM. Caso contrário, a lista de usuários do RAM não estará visível. -
Other Accounts: Insira o UID de outra conta ou usuário do RAM para autorizar, ou um usuário temporário com credenciais que começam com
arn:sts, comoarn:sts::1798**:assumed-role/role-name/session-name. É possível autorizar vários usuários. Insira um usuário por linha.Se as permissões forem concedidas a uma função do RAM, a função não poderá acessar recursos pelo console do OSS. Use ossutil, um SDK ou uma API.
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 Operation.
Condition (Opcional)
Defina as condições sob as quais a política entra em vigor.
-
Access Method: As opções incluem HTTPS e HTTP. Após selecionar uma opção, a política entra em vigor apenas para solicitações de acesso que usam o método selecionado.
-
IP =: Insira uma lista de endereços IP. Se você selecionar esta opção, a política entrará em vigor apenas para solicitações de acesso dos endereços IP especificados.
-
IP ≠: Insira uma lista de endereços IP. Se você selecionar esta opção, a política entrará em vigor apenas para solicitações de acesso que não sejam dos endereços IP especificados.
-
VPC =: Selecione uma VPC que pertença à conta atual ou insira uma VPC que pertença a outra conta. Se você selecionar esta opção, a política entrará em vigor apenas para solicitações de acesso da VPC especificada.
-
VPC ≠: Selecione uma VPC que pertença à conta atual ou insira uma VPC que pertença a outra conta. Se você selecionar esta opção, a política entrará em vigor apenas para solicitações de acesso que não sejam da VPC especificada.
Ao configurar várias condições, todas as condições devem ser atendidas (uma relação AND).
-
Após confirmar que a configuração está correta, clique em OK para aplicar a Bucket Policy.
Método de sintaxe
Acesse a lista de Buckets e clique em no bucket desejado.
No painel de navegação à esquerda, clique em .
-
Selecione Add by Syntax e clique em Edit. No editor, insira a política de autorização no formato JSON.
Exemplo de política: Negar ao usuário
20214760404935xxxxtodas as operações emexample-bucketse uma solicitação de acesso não se originar da VPCvpc-t4nlw426y44rd3iq4xxxx.{ "Version": "1", "Statement": [ { "Sid": "DenyNonVpcAccess", "Effect": "Deny", "Action": "oss:*", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:example-bucket", "acs:oss:*:174649585760xxxx:example-bucket/*" ], "Condition": { "StringNotEquals": { "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx" } } } ] }Uma política de autorização completa inclui uma Version e uma Statement.
Version: A versão da política de acesso. O valor é fixo em
1e não pode ser alterado.-
Statement: O corpo principal da política. Contém uma ou mais regras específicas. Cada regra suporta um Sid opcional e inclui um Effect, uma Action, um Principal, um Resource e uma Condition.
Elemento da política
Descrição
Significado no exemplo
Sid (opcional)
ID da instrução. Um identificador exclusivo e legível por humanos para cada instrução na política. Ajuda na diferenciação, gerenciamento e auditoria, e não afeta as permissões em si.
Identifica a instrução de negação como
DenyNonVpcAccess.Effect
O efeito da política. Os valores válidos são
AlloweDeny.Nega a solicitação.
Action
A ação específica a ser executada no recurso. O caractere curinga
*é suportado.Negar todas as ações do OSS (
oss:*).Principal
O usuário, conta ou função ao qual a política se aplica.
Definir o campo Principal como uma lista vazia (
Principal:[]) é idêntico a defini-lo para todas as contas (Principal:["*"]).A política se aplica apenas ao usuário do RAM
20214760404935xxxx.Resource
Os recursos aos quais a política se aplica.
A política se aplica ao próprio bucket
example-buckete a todos os objetos dentro dele.Condition
As condições sob as quais a política entra em vigor.
Ao configurar várias condições, todas as condições devem ser atendidas (uma relação AND).
Esta política Deny entra em vigor apenas quando a VPC de origem da solicitação não é
vpc-t4nlw426y44rd3iq4xxxx.Referência completa de elementos de política: Authorization syntax and elements.
Após confirmar que a política de autorização está correta, clique em Save e siga as instruções na tela.
Configurar uma política de bucket vetorial
Buckets vetoriais suportam apenas o método de sintaxe para configuração de bucket policy.
Acesse a lista de Vector Buckets e clique em no bucket vetorial desejado.
No painel de navegação à esquerda, clique em .
-
Clique em Edit. No editor, insira a política de autorização no formato JSON.
Exemplo de política: Conceder ao usuário
20816353761158****permissão para ler e gravar dados vetoriais na tabela de índiceindextestemvector-bucket-example.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:ossvector:*:*:vector-bucket-example/indextest" ] }] }Uma política de autorização completa inclui uma Version e uma Statement.
Version: A versão da política de acesso. O valor é fixo em
1e não pode ser alterado.-
Statement: O corpo principal da política. Contém uma ou mais regras específicas. Cada regra inclui um Effect, uma Action, um Principal, um Resource e uma Condition.
Elemento da política
Descrição
Significado no exemplo
Effect
O efeito da política. Os valores válidos são
AlloweDeny.Permite a solicitação.
Action
A ação específica a ser executada no recurso. O caractere curinga
*é suportado.Ler e gravar dados vetoriais.
Principal
O usuário, conta ou função ao qual a política se aplica.
Definir o campo Principal como uma lista vazia (
Principal:[]) é idêntico a defini-lo para todas as contas (Principal:["*"]).A política se aplica apenas ao usuário do RAM
20816353761158****.Resource
Os recursos aos quais a política se aplica.
A política se aplica à tabela de índice
indextestno bucketvector-bucket-example.Condition
As condições sob as quais a política entra em vigor.
Ao configurar várias condições, todas as condições devem ser atendidas (uma relação AND).
Nenhuma.
Referência completa de elementos de política: Authorization syntax and elements.
Após confirmar que a política de autorização está correta, clique em Save e siga as instruções na tela.
Configurar uma política OSS-HDFS
Para garantir que os usuários do service OSS-HDFS possam acessar o diretório .dlsdata/ e seus objetos, não defina a operação autorizada como Deny Access ao configurar uma Bucket Policy para um bucket com OSS-HDFS ativado. Prerequisites for using OSS-HDFS.
Para restringir o acesso a endereços IP de rede específicos ou a uma VPC, adicione a seguinte condição a todas as instruções Deny. Isso garante que o service de backend do OSS-HDFS possa ler e gravar no bucket pela rede clássica.
"StringNotLike": {
"oss:ClassicIntranet": [
"true"
]
}
Cenários comuns: Concessão de permissões
Os cenários a seguir demonstram a concessão de acesso a usuários específicos, funções ou todos os usuários. Cada um inclui um exemplo de política adaptável.
Cenário 1: Conceder permissões de leitura/gravação
Conceda aos membros da equipe ou parceiros acesso de leitura/gravação a um bucket. Este exemplo concede permissões de leitura/gravação em example-bucket aos usuários do RAM 27737962156157xxxx e 20214760404935xxxx.
Esta política não concede permissão para listar buckets. Os usuários do RAM não podem navegar diretamente na página Buckets. Em vez disso, eles podem adicionar o bucket desejado em no painel de navegação à esquerda.
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:GetVodPlaylist",
"oss:PostVodPlaylist",
"oss:PublishRtmpStream",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"oss:ListObjects"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"*"
]
}
}
}
]
}
Cenário 2: Conceder permissões somente leitura a diretórios específicos
Conceda acesso somente leitura a diretórios específicos. Este exemplo concede ao usuário do RAM 20214760404935xxxx permissões somente leitura em diretórios com os prefixos hangzhou/2020 e shanghai/2015 em example-bucket.
Esta política não concede permissão para listar buckets. Os usuários do RAM não podem navegar diretamente na página Buckets. Em vez disso, eles podem adicionar o bucket desejado em no painel de navegação à esquerda.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:GetObject",
"oss:GetObjectAcl",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
"acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
]
},
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"hangzhou/2020/*",
"shanghai/2015/*"
]
}
},
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Cenário 3: Conceder permissões de visualização e listagem
Permita que um usuário visualize informações do bucket e liste objetos. Este exemplo concede a um usuário do RAM permissões de visualização e listagem em example-bucket.
Esta política não concede permissão para listar buckets. Os usuários do RAM não podem navegar diretamente na página Buckets. Em vez disso, eles podem adicionar o bucket desejado em no painel de navegação à esquerda.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Cenário 4: Conceder permissões de leitura a uma função do RAM
Conceda acesso temporário aos objetos do bucket por meio de uma função do RAM. Um usuário do RAM ou aplicativo assume a função para obter credenciais temporárias. Este exemplo concede permissões de leitura em todos os objetos em example-bucket para todas as sessões sob uma função do RAM e uma sessão específica sob outra.
Ao conceder permissões a uma função do RAM, o Principal deve seguir este formato: arn:sts::<uid>:assumed-role/<role-name>/<session-name>. Os valores para <role-name> e <session-name> devem estar todos em minúsculas.
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject"
],
"Effect": "Allow",
"Principal": [
"arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
"arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
],
"Resource": [
"acs:oss:*:10323xxxxx72056:example-bucket/*"
]
}
]
}
Cenário 5: Conceder permissões de listagem a todos os usuários
Permita que todos os usuários listem objetos sem acessar seu conteúdo. Este exemplo concede a todos os usuários (*) permissões de listagem em example-bucket.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Cenários comuns: Restrição de acesso à rede
Os cenários a seguir restringem o acesso ao bucket com base na origem da rede (IP público ou VPC) usando as chaves de condição acs:SourceIp e acs:SourceVpc. A tabela abaixo resume as abordagens comuns.
|
Origem do acesso |
Abordagem da política |
Cenário |
|
Qualquer VPC |
Negar solicitações onde acs:SourceVpc não começa com |
|
|
VPC específica |
Negar solicitações onde acs:SourceVpc não é igual ao ID da VPC especificada. |
|
|
IP público específico |
A Instrução 1 nega solicitações de rede pública de endereços IP não especificados; a Instrução 2 nega todas as solicitações de VPC. |
|
|
Intervalo de IP específico dentro de uma VPC específica |
A Instrução 1 nega solicitações de VPCs não especificadas; a Instrução 2 nega solicitações de intervalos de IP não especificados dentro da VPC especificada. |
|
|
IP público específico ou VPC específica |
A Instrução 1 nega solicitações de rede pública de endereços IP não especificados; a Instrução 2 nega solicitações de VPC de VPCs não especificadas. |
|
|
Todos, exceto um IP específico (lista de bloqueios) |
Negar solicitações do IP especificado e usar um curinga |
|
|
Rede clássica |
Permitir acesso à rede clássica. |
Cenário 1: Restringir o acesso à rede pública
Bloqueie todo o acesso da rede pública a um bucket adicionando uma instrução de negação com a chave de condição acs:SourceVpc. Esta instrução nega solicitações que não se originam de uma VPC. O exemplo a seguir nega todo o acesso não-VPC a example-bucket.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"StringNotLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
}
]
}
Cenário 2: Restringir o acesso a uma VPC específica
Restrinja o acesso ao bucket a uma VPC específica usando a chave de condição acs:SourceVpc. Esta instrução bloqueia solicitações de outras VPCs ou da rede pública. O exemplo a seguir nega a todos os usuários fora da VPC t4nlw426y44rd3iq4xxxx a leitura de objetos em example-bucket.
Como o principal na seguinte instrução de negação é um caractere curinga (
*) e uma condição está incluída, a instrução de negação se aplica a todos os usuários, incluindo o proprietário do bucket.A seguinte instrução de negação apenas restringe o acesso e não concede nenhuma permissão. Se o principal não tiver recebido permissões, adicione uma instrução de permissão para conceder as permissões necessárias.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
Cenário 3: Restringir o acesso a um endereço IP público específico
Para restringir o acesso ao bucket a um endereço IP público específico, crie duas instruções de negação:
Instrução 1 (Negar solicitações de rede pública de IPs não especificados): Esta instrução usa
StringNotLike: {"acs:SourceVpc": "vpc-*"}para identificar solicitações de rede pública (o valoracs:SourceVpcpara uma solicitação de rede pública não começa comvpc-). Em seguida, usaNotIpAddress: {"acs:SourceIp": "..."}para negar solicitações que não sejam do endereço IP especificado. A ação de negação é acionada quando ambas as condições são atendidas.Instrução 2 (Negar todas as solicitações de VPC): Esta instrução usa
StringLike: {"acs:SourceVpc": "vpc-*"}para corresponder e negar todas as solicitações de qualquer VPC, já que o objetivo é permitir o acesso apenas do endereço IP público especificado.
Uma solicitação é negada se corresponder a qualquer uma das instruções. O exemplo a seguir nega acesso de leitura a example-bucket para todos os usuários, exceto aqueles provenientes do IP público 203.0.113.5.
Como o principal na seguinte instrução de negação é um caractere curinga (
*) e uma condição está incluída, a instrução de negação se aplica a todos os usuários, incluindo o proprietário do bucket.A seguinte instrução de negação apenas restringe o acesso e não concede nenhuma permissão. Se o principal não tiver recebido permissões, adicione uma instrução de permissão para conceder as permissões necessárias.
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": [
"oss:GetObject"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"NotIpAddress": {
"acs:SourceIp": [
"203.0.113.5"
]
},
"StringNotLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:GetObject"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"StringLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
}
]
}
Cenário 4: Restringir o acesso a um intervalo de IPs em uma VPC
Para restringir o acesso ao bucket a um intervalo de IPs específico dentro de uma VPC específica, crie duas instruções de negação:
Instrução 1 (Negar todas as solicitações de fora da VPC especificada): Esta instrução usa
StringNotEquals: {"acs:SourceVpc": "..."}para negar solicitações de outras VPCs e da rede pública.Instrução 2 (Negar solicitações de fora do intervalo de IPs especificado dentro da VPC): Esta instrução usa
StringEquals: {"acs:SourceVpc": "..."}para corresponder a solicitações da VPC especificada e, em seguida, usaNotIpAddress: {"acs:SourceIp": "..."}para negar solicitações de fora do intervalo de endereços IP especificado. A ação de negação é acionada quando ambas as condições são atendidas.
Uma solicitação é negada se corresponder a qualquer uma das instruções. O exemplo a seguir nega acesso de leitura a example-bucket para todos os usuários, exceto aqueles provenientes do intervalo 192.168.0.0/16 dentro da VPC t4nlw426y44rd3iq4xxxx.
Como o principal na seguinte instrução de negação é um caractere curinga (
*) e uma condição está incluída, a instrução de negação se aplica a todos os usuários, incluindo o proprietário do bucket.A seguinte instrução de negação apenas restringe o acesso e não concede nenhuma permissão. Se o principal não tiver recebido permissões, adicione uma instrução de permissão para conceder as permissões necessárias.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"192.168.0.0/16"
]
}
}
}
]
}
Cenário 5: Restringir o acesso a um IP público ou VPC
Para restringir o acesso ao bucket a um IP público específico ou a uma VPC específica, crie duas instruções de negação:
Instrução 1 (Para solicitações de rede pública, negar IPs não especificados): Esta instrução usa
StringNotLike: {"acs:SourceVpc": "vpc-*"}para identificar solicitações de rede pública e, em seguida, usaNotIpAddress: {"acs:SourceIp": "..."}para negar solicitações de endereços IP públicos não especificados. A ação de negação é acionada quando ambas as condições são atendidas. Solicitações de VPC não correspondem a esta instrução porque seu valoracs:SourceVpccomeça comvpc-.Instrução 2 (Para solicitações de VPC, negar VPCs não especificadas): Esta instrução usa
StringLike: {"acs:SourceVpc": "vpc-*"}para identificar solicitações de VPC e, em seguida, usaStringNotEquals: {"acs:SourceVpc": "..."}para negar solicitações de VPCs não especificadas. A ação de negação é acionada quando ambas as condições são atendidas. Solicitações de rede pública não correspondem a esta instrução porque seu valoracs:SourceVpcnão começa comvpc-.
Uma solicitação é negada se corresponder a qualquer uma das instruções. O exemplo a seguir nega acesso de leitura a example-bucket para todos os usuários, exceto aqueles provenientes do IP público 203.0.113.5 ou da VPC t4nlw426y44rd3iq4xxxx.
Como o principal na seguinte instrução de negação é um caractere curinga (
*) e uma condição está incluída, a instrução de negação se aplica a todos os usuários, incluindo o proprietário do bucket.A seguinte instrução de negação apenas restringe o acesso e não concede nenhuma permissão. Se o principal não tiver recebido permissões, adicione uma instrução de permissão para conceder as permissões necessárias.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
Cenário 6: Definir uma lista de bloqueios de IP
Bloqueie o acesso de endereços IP ou intervalos específicos adicionando uma instrução de negação à bucket policy.
A condição StringLike: {"acs:SourceVpc": "*"} usa um curinga para corresponder a todos os valores e não restringe o escopo da VPC. Ela existe apenas para satisfazer a restrição de que acs:SourceIp requer uma condição acs:SourceVpc correspondente.
Como o principal na seguinte instrução de negação é um caractere curinga (
*) e uma condição está incluída, a instrução de negação se aplica a todos os usuários, incluindo o proprietário do bucket.É possível configurar vários endereços IP e intervalos de endereços IP. Separe-os por vírgulas.
{
"Version": "1",
"Statement": [{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"101.***.***.100"
]
},
"StringLike": {
"acs:SourceVpc": [
"*"
]
}
}
}]
}
Cenário 7: Configurar acesso à rede clássica
A chave de condição oss:ClassicIntranet indica se uma solicitação se origina da rede clássica do OSS. Os valores válidos são true e false. Alguns services de backend do OSS (como entrega de logs e inventário de bucket) acessam buckets pela rede clássica. Use a seguinte condição para corresponder a solicitações da rede clássica.
"Condition": {
"StringEquals": {
"oss:ClassicIntranet": [
"true"
]
}
}
Ao configurar restrições de acesso à rede (políticas Deny), para permitir os services de backend acima, adicione a seguinte condição ao bloco Condition da instrução Deny para excluir solicitações da rede clássica e evitar bloqueios não intencionais.
"StringNotEquals": {
"oss:ClassicIntranet": [
"true"
]
}
Cenários comuns: Controles de segurança
Os cenários a seguir aplicam controles de segurança: restrições de credenciais, prevenção de acesso público e limites de política de retenção.
Cenário 1: Exigir credenciais temporárias para chamadas de API
Exija credenciais de acesso temporárias para chamadas de API. Esta política usa a chave de condição acs:AccessId para bloquear o acesso de credenciais de longo prazo (conta da Alibaba Cloud ou chaves de acesso de usuário do RAM). O exemplo a seguir nega a todos os usuários sem credenciais temporárias (começando com TMP. ou STS.) a visualização de example-bucket e a listagem de seus objetos.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"StringNotLike": {
"acs:AccessId": [
"TMP.*",
"STS.*"
]
}
}
}
]
}
Cenário 2: Proibir ACLs públicas
Impeça que ACLs de bucket e objeto sejam definidas como públicas. Crie duas instruções de negação:
Use a chave de condição
oss:x-oss-aclpara criar uma instrução de negação que impeça que a ACL do bucket seja definida com qualquer permissão diferente deprivate. Qualquer tentativa de definir uma ACL de leitura pública ou leitura/gravação pública aciona a regra de negação.Use a chave de condição
oss:x-oss-object-aclpara criar uma instrução de negação que impeça que uma ACL de objeto seja definida com qualquer permissão diferente deprivateedefault.
Uma solicitação é negada se corresponder a qualquer uma das instruções. O exemplo a seguir nega operações de ACL pública em example-bucket.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutBucketAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-acl": "private"
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:PutObjectAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket/*"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-object-acl": [
"private",
"default"
]
}
}
}
]
}
Cenário 3: Limitar o período de retenção do ObjectWorm
Depois de ativar uma política de retenção no nível do objeto (ObjectWorm) para um bucket, use uma bucket policy para limitar o período máximo de retenção. O exemplo a seguir limita a retenção a 30 dias. Qualquer solicitação PutObjectRetention que exceda 30 dias será negada.
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutObjectRetention"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"NumericGreaterThan": {
"oss:object-remaining-retention-days": "30"
}
}
}
]
}
oss:object-remaining-retention-daysé a chave de condição para uma política ObjectWorm. Ela representa o número de dias restantes de retenção especificados na solicitação.Como o principal nesta política é um caractere curinga (*) e uma condição está incluída, a política se aplica a todos os usuários, incluindo o proprietário do bucket.
Desenvolvimento e integração de ferramentas
Além do console, é possível configurar bucket policies usando ferramentas gráficas, ferramentas CLI e SDKs.
-
Usar a ferramenta gráfica ossbrowser
O ossbrowser oferece uma experiência visual, semelhante ao console, para operações de política no nível do bucket. Instale e faça login no ossbrowser e configure a política.
-
Usar a ferramenta de linha de comando ossutil
Defina a política de autorização usando o comando put-bucket-policy.
NotaPara definir uma política de autorização para um bucket vetorial, execute o comando
ossutil vectors-api put-bucket-policy. -
Usar um SDK
Configure políticas usando SDKs como Java SDK, Python SDK, Go SDK e Node.js SDK. O SDK reference abrange todas as linguagens suportadas.
-
Chamar uma API diretamente
Chame a operação PutBucketPolicy para definir uma política de autorização de bucket.
Cotas e limites
Tamanho da política: Um bucket pode ter várias instruções de Bucket Policy, mas o tamanho total de todas as políticas não pode exceder 16 KB.
Comprimento do campo: O comprimento de cada campo em uma Bucket Policy não pode exceder 4.095 bytes.