Todos os produtos
Search
Central de documentação

Object Storage Service:Control access to OSS resources with RAM policies

Última atualização: Jul 03, 2026

Uma política do RAM é uma política baseada em identidade que define quais identidades do RAM podem executar quais operações em quais recursos do OSS e sob quais condições. Use políticas do RAM para impor controle de acesso granular aos seus recursos do OSS.

Como funciona

As políticas do RAM autorizam identidades do Resource Access Management (RAM) — usuários do RAM, grupos de usuários e funções do RAM. Quando o OSS recebe uma solicitação, ele avalia todas as políticas aplicáveis (políticas do RAM e políticas de bucket) e determina o acesso na seguinte ordem:

  1. Negação explícita primeiro: Se alguma política contiver uma regra "Effect": "Deny" explícita correspondente à solicitação, o sistema negará imediatamente a solicitação.

  2. Busca por permissão explícita: Caso não exista nenhuma regra Deny correspondente, o sistema busca uma regra "Effect": "Allow" explícita correspondente à solicitação. Se houver correspondência, o sistema permitirá a solicitação.

  3. Negação padrão: Se não existir nenhuma regra Deny ou Allow correspondente, o sistema negará a solicitação por padrão.

O OSS oferece suporte a dois tipos de política: políticas do sistema (predefinidas pela Alibaba Cloud, somente leitura) e políticas personalizadas (criadas e gerenciadas por você).

Conceder permissões usando políticas do sistema

Conceda políticas do sistema predefinidas a um usuário do RAM no console do RAM:

  1. Acesse a lista de usuários do RAM. Na coluna Actions do usuário desejado, clique em Add Permissions.

  2. Na caixa de pesquisa, insira o nome da política do sistema e selecione-a. O OSS oferece suporte às duas seguintes políticas do sistema:

  3. Clique em Confirm New Authorization para concluir as configurações de permissão.

Conceder permissões usando políticas personalizadas

Para usar uma política personalizada, crie-a primeiro e depois anexe-a à identidade desejada.

Etapa 1: Criar uma política personalizada

  1. Acesse a lista de Policies. Clique em Create Policy.

  2. Selecione Edit Script. No editor, insira a política de autorização no formato JSON. Use o RAM Policy Editor para gerar rapidamente uma política de autorização.

    A política de exemplo a seguir concede controle total sobre o bucket example-bucket e todos os recursos dentro dele.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:example-bucket",
            "acs:oss:*:*:example-bucket/*"
          ]
        }
      ]
    }

    Uma política de autorização completa inclui uma Version e uma ou mais Statements.

    • Version: A versão da política de acesso. O valor é fixo em 1 e não pode ser alterado.

    • Statement: O corpo principal da política. Contém uma ou mais regras específicas de permissão ou negação. Cada instrução inclui Effect, Action, Resource e Condition.

      Elemento da política

      Descrição

      Effect

      O efeito da política. Os valores válidos são Allow e Deny.

      Action

      A operação específica a ser executada no recurso. O caractere curinga * é suportado.

      Resource

      O escopo de recursos ao qual a política se aplica.

      Condition

      As condições para que a política entre em vigor.

      Se você configurar múltiplas condições, a política só entrará em vigor quando todas as condições forem atendidas (um AND lógico).

      Todos os elementos de política suportados estão documentados em Sintaxe e elementos de autorização do OSS.

  3. Clique em OK. Insira um Policy Name e, em seguida, clique em OK para criar a política personalizada.

Etapa 2: Conceder permissões a uma identidade

Anexe a política personalizada a um usuário do RAM:

  1. Acesse a lista de usuários do RAM. Na coluna Actions do usuário desejado, clique em Add Permissions.

  2. Na caixa de pesquisa, insira o nome da política personalizada e selecione-a.

  3. Clique em Confirm New Authorization para concluir as configurações de permissão.

Cenários comuns de autorização

Os cenários a seguir demonstram configurações comuns de políticas do RAM. Modifique os nomes dos buckets, caminhos e endereços IP para corresponder ao seu ambiente.

Cenário 1: Conceder a um usuário do RAM controle total sobre um bucket

O exemplo a seguir concede a um usuário do RAM controle total sobre um bucket chamado mybucket.

Importante

Para aplicativos móveis, conceder aos usuários controle total sobre um bucket representa um risco de segurança muito alto e deve ser evitado sempre que possível.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

Cenário 2: Negar a um usuário do RAM permissão para excluir arquivos que correspondem a um padrão específico em um bucket

O exemplo a seguir nega a um usuário do RAM a permissão para excluir todos os arquivos com o prefixo abc e o formato .txt em um bucket chamado mybucket.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/abc*.txt"
      ]
    }
  ]
}

Cenário 3: Conceder a um usuário do RAM permissão para listar e ler todos os recursos em um bucket

  • Este exemplo concede a um usuário do RAM permissão para listar e ler todos os recursos em um bucket chamado mybucket usando um SDK do OSS ou a interface de linha de comando (CLI).

    Nota

    A operação ListObjects (Action) deve usar o bucket inteiro como Resource.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:ListObjects",
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": "oss:GetObject",
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }
  • Já este exemplo concede a um usuário do RAM permissão para listar e ler todos os recursos em um bucket chamado mybucket usando o console do OSS.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ],    
          "Resource": "acs:oss:*:*:*"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetBucketAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": "acs:oss:*:*:mybucket/*"
        }
      ]
    }

Cenário 4: Negar a um usuário do RAM permissão para excluir um bucket

O exemplo a seguir nega a um usuário do RAM a permissão para excluir um bucket chamado mybucket.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": [
        "acs:oss:*:*:mybucket",
        "acs:oss:*:*:mybucket/*"
      ]
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteBucket"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket"
      ]
    }
  ]
}

Cenário 5: Conceder a um usuário do RAM permissão para acessar várias pastas em um bucket

Suponha que um bucket chamado mybucket seja usado para armazenar fotos. Esse bucket contém várias pastas que representam locais de fotos. Cada pasta de local contém subdiretórios de ano.

mybucket[Bucket]
  ├── beijing
  │   ├── 2014
  │   └── 2015
  └── hangzhou
      ├── 2014
      └── 2015 

Conceda a um usuário do RAM acesso de somente leitura a mybucket/hangzhou/2014/ e mybucket/hangzhou/2015/. A complexidade da política varia conforme o método de acesso:

  • Conceda a um usuário do RAM permissão para ler apenas o conteúdo dos arquivos nas pastas mybucket/hangzhou/2014/ e mybucket/hangzhou/2015/.

    Use esta política quando o usuário souber os caminhos exatos dos arquivos.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        }
      ]
    }
  • Conceda a um usuário do RAM permissão para usar a CLI do OSS para acessar as pastas mybucket/hangzhou/2014/ e mybucket/hangzhou/2015/ e listar os arquivos nelas contidos.

    Se o usuário precisar navegar pelo conteúdo das pastas, adicione a permissão ListObjects.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket"
          ],
          "Condition":{
            "StringLike":{
              "oss:Prefix": [
                "hangzhou/2014/*",
                "hangzhou/2015/*"
              ]
            }
          }
        }
      ]
    }
  • Conceda a um usuário do RAM permissão para acessar pastas usando o console do OSS.

    O console do OSS exige navegação a partir do diretório raiz para chegar a mybucket/hangzhou/2014/ e mybucket/hangzhou/2015/, portanto, permissões adicionais de listagem são necessárias:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketLifecycle",
            "oss:GetBucketWorm",                      
            "oss:GetBucketVersioning", 
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:GetObject",
            "oss:GetObjectAcl"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket/hangzhou/2014/*",
            "acs:oss:*:*:mybucket/hangzhou/2015/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket"
          ],
          "Condition": {
            "StringLike": {
              "oss:Delimiter": "/",
              "oss:Prefix": [
                "",
                "hangzhou/",
                "hangzhou/2014/*",
                "hangzhou/2015/*"
              ]
            }
          }
        }
      ]
    }

Cenário 6: Negar a um usuário do RAM permissão para excluir qualquer arquivo em um bucket

O exemplo a seguir nega a um usuário do RAM a permissão para excluir qualquer arquivo em um bucket chamado mybucket.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:*:mybucket/*"
      ]
    }
  ]
}

Cenário 7: Negar a um usuário do RAM permissão para acessar objetos com tags específicas

A política Deny a seguir nega a um usuário do RAM a permissão para acessar objetos com as tags status:ok e key1:value1 no bucket examplebucket.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:174649585760xxxx:examplebucket/*"
      ],
      "Condition": {
        "StringEquals": {
          "oss:ExistingObjectTag/status":"ok",
          "oss:ExistingObjectTag/key1":"value1"
        }
      }
    }
  ]
}

Cenário 8: Conceder a um usuário do RAM permissão para acessar o OSS a partir de endereços IP específicos

  • Adicione uma restrição de endereço IP a uma autorização Allow.

    O exemplo a seguir adiciona uma restrição de endereço IP a uma autorização Allow. Ele concede a um usuário do RAM permissão para ler todos os recursos em um bucket chamado mybucket apenas a partir dos intervalos de endereços IP 192.168.0.0/16 e 198.51.100.0/24.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ],
          "Condition":{
            "IpAddress": {
              "acs:SourceIp": ["192.168.0.0/16", "198.51.100.0/24"]
            }
          }
        }
      ]
    }
  • Adicione uma restrição de endereço IP a uma autorização Deny.

    O exemplo a seguir adiciona uma restrição de endereço IP a uma autorização Deny. Ele nega a um usuário do RAM cujo endereço IP de origem não esteja no intervalo 192.168.0.0/16 a execução de qualquer operação no OSS.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListBuckets",
            "oss:GetBucketStat",
            "oss:GetBucketInfo",
            "oss:GetBucketTagging",
            "oss:GetBucketAcl" 
          ], 
          "Resource": [
            "acs:oss:*:*:*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "oss:ListObjects",
            "oss:GetObject"
          ],
          "Resource": [
            "acs:oss:*:*:mybucket",
            "acs:oss:*:*:mybucket/*"
          ]
        },
        {
          "Effect": "Deny",
          "Action": "oss:*",
          "Resource": [
            "acs:oss:*:*:*"
          ],
          "Condition":{
            "NotIpAddress": {
              "acs:SourceIp": ["192.168.0.0/16"]
            }
          }
        }
      ]
    }
    Nota

    Como Deny tem precedência, o acesso a partir de um endereço IP fora do intervalo 192.168.0.0/16 é negado.

Cenário 9: Conceder permissões a outros usuários por meio do RAM ou STS

Conceda a um usuário com o endereço IP 192.168.0.1 permissão para executar as seguintes operações usando um cliente Java SDK por meio do RAM ou Security Token Service (STS).

  • Listar objetos com o prefixo foo no bucket mybucket.

  • Fazer upload, baixe e exclua objetos com o prefixo file no bucket mybucket.

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:GetBucketAcl",
        "oss:ListObjects"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk",
          "oss:Prefix": "foo"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    },
    {
      "Action": [
        "oss:PutObject",
        "oss:GetObject",
        "oss:DeleteObject"
      ],
      "Resource": [
        "acs:oss:*:177530505652xxxx:mybucket/file*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "acs:UserAgent": "java-sdk"
        },
        "IpAddress": {
          "acs:SourceIp": "192.168.0.1"
        }
      }
    }
  ]
}

Cenário 10: Proibir a definição das ACLs de buckets e objetos como acesso público

O exemplo a seguir proíbe definir as listas de controle de acesso (ACLs) de buckets e objetos como públicas para garantir a segurança dos dados do OSS.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutBucket",
        "oss:PutBucketAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-acl": "private"
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": [
        "oss:PutObject",
        "oss:PutObjectAcl"
      ],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "oss:x-oss-object-acl": [
            "private",
            "default"
          ]
        }
      }
    }
  ]
}

Cenário 11: Conceder a um usuário do RAM permissão para usar recursos relacionados ao IMM

A política do RAM a seguir concede a um usuário do RAM permissão para usar o recurso de processamento de documentos do Intelligent Media Management (IMM).

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:PostProcessTask",
        "oss:ProcessImm"
      ],
      "Resource": "*"
    },
    {
      "Action": [
        "imm:CreateOfficeConversionTask",
        "imm:GetWebofficeURL"
      ],
      "Resource": "*",
      "Effect": "Allow"
    },
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram:*:*:role/aliyunimmdefaultrole"
    }
  ]
}

Cenário 12: Conceder a um usuário do RAM permissão para alterar o tipo de redundância de armazenamento

  • Conceda a um usuário do RAM permissão para alterar o tipo de redundância de armazenamento de um bucket específico.

    O exemplo a seguir concede a um usuário do RAM permissão para alterar o tipo de redundância de armazenamento do bucket mybucket.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:mybucket"
        }
      ]
    }
  • Conceda a um usuário do RAM permissão para alterar o tipo de redundância de armazenamento de todos os buckets.

    Importante

    O exemplo a seguir concede a um usuário do RAM permissão para alterar o tipo de redundância de armazenamento de todos os buckets na sua conta Alibaba Cloud. Proceda com cautela.

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "oss:CreateBucketDataRedundancyTransition",
            "oss:GetBucketDataRedundancyTransition",
            "oss:ListBucketDataRedundancyTransition",
            "oss:DeleteBucketDataRedundancyTransition"
          ],
          "Resource": "acs:oss:*:*:*"
        }
      ]
    }

**Cenário 13: Conceder a um usuário do RAM permissão para criar pedidos de planos de recursos do OSS **

A política do RAM a seguir concede a um usuário do RAM permissão para criar pedidos de planos de recursos do OSS .

Importante

Depois que um usuário do RAM cria um pedido para um plano de recursos do OSS , ele pode entrar em contato com o proprietário da conta Alibaba Cloud para concluir o pagamento. Para permitir que o usuário do RAM pague pelo pedido, o proprietário da conta Alibaba Cloud deve conceder ao usuário do RAM a permissão bss:PayOrder. A permissão bss:PayOrder é uma permissão de alto risco que envolve operações financeiras. Não conceda essa permissão a menos que seja necessário.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:CreateOrder",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

Cenário 14: Conceder a um usuário do RAM permissão para ativar o OSS

A política do RAM a seguir concede a um usuário do RAM permissão para ativar o OSS.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ActivateProduct",
      "Resource": "acs:oss:*:*:*"
    }
  ]
}

Cenário 15: Conceder a um usuário do RAM permissão para ler e gravar dados em buckets com tags específicas

A política do RAM a seguir concede a um usuário do RAM permissão para ler e gravar dados em buckets com uma tag específica. A chave da tag é key1 e o valor da tag é value1.

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListBuckets",
        "oss:GetBucketStat",
        "oss:GetBucketInfo",
        "oss:GetBucketAcl",
        "oss:ListObjects",
        "oss:PutObject",
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:*:*"
      ],
      "Effect": "Allow",
      "Condition": {
        "StringEquals": {
          "oss:BucketTag/key1": "value1"
        }
      }
    }
  ]
}
Nota

Após a política entrar em vigor, o usuário do RAM poderá executar as operações especificadas apenas em buckets do OSS com a tag key1=value1. O comportamento varia conforme o método de acesso:

  • Ao usar um SDK do OSS ou ossutil para enviar uma solicitação ListBuckets, adicione parâmetros de filtragem de tags, como tag-key=key1,tag-value=value1. Se a política estiver configurada corretamente, a resposta retornará apenas os buckets correspondentes às condições de tag especificadas.

  • Ao usar o console do OSS para enviar uma solicitação ListBuckets, a solicitação será negada porque o console não consegue anexar parâmetros de tag. A solicitação não atende à condição da política (oss:BucketTag/key1=value1) e o sistema relata um erro de permissão.

  • Outras operações, como PutObject e GetObject, também estão sujeitas à condição de tag. O bucket alvo da operação deve ter a tag key1=value1.

Melhores práticas para ambientes de produção

Siga estas melhores práticas para minimizar riscos de violação de dados e impor controle preciso de permissões:

  • Siga o princípio do menor privilégio: Conceda apenas as permissões mínimas necessárias. Evite permissões amplas como oss:*, a menos que seja absolutamente necessário.

  • Use funções do RAM e credenciais temporárias do STS: Para aplicações em instâncias ECS ou em containers, utilize funções do RAM com credenciais temporárias do STS em vez de pares de AccessKey permanentes. Credenciais temporárias expiram automaticamente, eliminando o risco de segredos codificados rigidamente.

  • Separe usuários humanos e usuários programáticos: Crie usuários do RAM separados para pessoas e aplicações para permitir controle de permissões granular.

    • Usuários humanos: Configure o console access. Use uma conta e senha para acessar o console do produto. Recomendamos que você ative a autenticação multifator (MFA).

    • Usuários programáticos: Configure o programmatic access with a permanent AccessKey pair. Use o par de AccessKey para chamar APIs e acessar recursos da nuvem.

  • Gerenciamento de segurança de pares de AccessKey:

    • Nunca codifique rigidamente pares de AccessKey no código do projeto.

    • Use credenciais temporárias do STS ou variáveis de ambiente para autorização de acesso.

    • Faça o rodízio regular dos seus pares de AccessKey.

  • Recomendações de segurança para funções do RAM:

    • Não altere a entidade confiável de uma função do RAM sem consideração cuidadosa — isso pode criar riscos de superautorização.

    • Defina um período de validade razoável para o token STS. Evite longos períodos de validade para prevenir riscos de segurança.

  • Audite permissões regularmente: Revise e remova usuários e políticas do RAM desnecessários para manter as permissões alinhadas com as necessidades atuais do negócio.

  • Use Condition para aumentar a segurança: Adicione elementos Condition para restringir o acesso por endereço IP de origem, VPC ou outras dimensões.

  • Referências