Una bucket policy es una política de autorización basada en recursos que se adjunta a un bucket. Utilice las bucket policies para otorgar acceso entre cuentas, habilitar el acceso anónimo o restringir el acceso por dirección IP o VPC.
Cómo funciona
Una bucket policy utiliza un modelo basado en recursos: se adjunta a un bucket y define qué principals pueden ejecutar qué acciones sobre qué recursos y bajo qué condiciones.
Cuando llega una solicitud, OSS evalúa todas las políticas relevantes, incluidas las bucket policies y las políticas de RAM. La evaluación sigue el principio de denegación prioritaria: cualquier regla Deny explícita bloquea la solicitud sin importar las reglas Allow. Si no existe ninguna regla coincidente, la solicitud se deniega de forma predeterminada.
Las bucket policies tienen reglas especiales para el propietario del bucket:
Si el principal se establece con un carácter comodín (*) y la política no incluye una condición, esta se aplica únicamente a los usuarios distintos del propietario del bucket.
Si el principal se establece con un carácter comodín (*) y la política incluye una condición, esta se aplica a todos los usuarios, incluido el propietario del bucket y los usuarios anónimos. Una regla Deny puede hacer que todo el bucket quede inaccesible. Una regla Allow puede exponer sus datos a usuarios anónimos.
Si varias instrucciones (statements) aplican al mismo usuario, los permisos efectivos son la unión de todas ellas, siguiendo el principio de denegación prioritaria.
La clave de condición
acs:SourceIpcoincide solo con la dirección IP de origen de una solicitud y no distingue si proviene de la red pública o de una VPC. Esto significa que, si usa únicamenteacs:SourceIppara restringir el acceso, también se permitirán solicitudes desde otra VPC que utilice el mismo rango de direcciones IP, lo cual genera un riesgo de acceso no autorizado. Por lo tanto, cuando configure una Bucket Policy y especifiqueacs:SourceIp, debe especificar tambiénacs:SourceVpcpara identificar de manera explícita el origen de red de la solicitud.Esta restricción aplica solo a las Bucket Policies nuevas. Las Bucket Policies existentes no se ven afectadas. Sin embargo, modificar una Bucket Policy existente se considera un nuevo envío y está sujeta a esta restricción.
Configurar una bucket policy
OSS proporciona dos métodos de configuración: gráfico y de sintaxis.
Método gráfico: interfaz basada en formularios para escenarios de autorización comunes.
Método de sintaxis: editor basado en JSON que admite todas las funciones de las políticas y combinaciones complejas de condiciones.
Método gráfico
Vaya a la lista Buckets y haga clic en el bucket de destino.
En el panel de navegación izquierdo, haga clic en .
-
Seleccione Add in GUI y luego haga clic en Authorize.
Parámetro
Descripción
Applied To
Seleccione si desea otorgar permisos sobre el Whole Bucket o sobre Specific Resources.
Resource Paths
Si establece Applied To en Whole Bucket, Resource Paths se establece en
bucket-name/*.Si establece Applied To en Specific Resources, introduzca el directorio u objeto que desea autorizar. Puede agregar varias entradas.
Authorized User
Especifique el principal al que se le otorgarán los permisos.
All Accounts (*): otorga permisos a cualquier persona, incluidos los usuarios anónimos.
RAM User: seleccione un usuario de RAM que pertenezca a la cuenta actual de Alibaba Cloud.
La cuenta con la que inició sesión debe ser una cuenta de Alibaba Cloud (cuenta raíz) o un usuario de RAM con permisos de administración de buckets y el permiso
ListUsersen RAM. De lo contrario, la lista de usuarios de RAM no será visible.Other Accounts: introduzca el UID de otra cuenta o usuario de RAM que desee autorizar, o bien de un usuario temporal cuyas credenciales comiencen con
arn:sts, comoarn:sts::1798**:assumed-role/role-name/session-name. Puede autorizar a varios usuarios. Introduzca uno por línea.Si otorga permisos a un rol de RAM, dicho rol no podrá acceder a los recursos desde la consola de OSS. En su lugar, use ossutil, un SDK o una API.
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 Operation.
Condition (opcional)
Establezca las condiciones bajo las cuales la política surte efecto.
Access Method: las opciones incluyen HTTPS y HTTP. Después de seleccionar una opción, la política surte efecto solo para las solicitudes de acceso que usen el método seleccionado.
IP =: introduzca una lista de direcciones IP. Si selecciona esta opción, la política surte efecto solo para las solicitudes de acceso provenientes de las direcciones IP especificadas.
IP ≠: introduzca una lista de direcciones IP. Si selecciona esta opción, la política surte efecto solo para las solicitudes de acceso que no provengan de las direcciones IP especificadas.
VPC =: seleccione una VPC que pertenezca a la cuenta actual o introduzca una VPC de otra cuenta. Si selecciona esta opción, la política surte efecto solo para las solicitudes de acceso provenientes de la VPC especificada.
VPC ≠: seleccione una VPC que pertenezca a la cuenta actual o introduzca una VPC de otra cuenta. Si selecciona esta opción, la política surte efecto solo para las solicitudes de acceso que no provengan de la VPC especificada.
Cuando configura varias condiciones, todas deben cumplirse (relación AND).
Después de confirmar que la configuración es correcta, haga clic en OK para aplicar la Bucket Policy.
Método de sintaxis
Vaya a la lista Buckets y haga clic en el bucket de destino.
En el panel de navegación izquierdo, haga clic en .
-
Seleccione Add by Syntax y luego haga clic en Edit. En el editor, introduzca la política de autorización en formato JSON.
Ejemplo de política: denegar al usuario
20214760404935xxxxtodas las operaciones sobreexample-bucketsi la solicitud de acceso no se origina desde la 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" } } } ] }Una política de autorización completa incluye un elemento Version y un elemento Statement.
Version: la versión de la política de acceso. El valor es fijo en
1y no se puede cambiar.-
Statement: el cuerpo principal de la política. Contiene una o más reglas específicas. Cada regla admite un elemento Sid opcional e incluye Effect, Action, Principal, Resource y Condition.
Elemento de la política
Descripción
Significado en el ejemplo
Sid (opcional)
Identificador de la instrucción (Statement ID). Es un identificador único y legible para cada instrucción de la política. Facilita la diferenciación, la gestión y la auditoría, pero no afecta los permisos en sí.
Identifica la instrucción de denegación como
DenyNonVpcAccess.Effect
El efecto de la política. Los valores válidos son
AllowyDeny.Deniega la solicitud.
Action
La acción específica que se ejecutará sobre el recurso. Se admite el carácter comodín
*.Denegar todas las acciones de OSS (
oss:*).Principal
El usuario, la cuenta o el rol al que aplica la política.
Establecer el campo Principal como una lista vacía (
Principal:[]) equivale a establecerlo para todas las cuentas (Principal:["*"]).La política aplica solo al usuario de RAM
20214760404935xxxx.Resource
Los recursos a los que aplica la política.
La política aplica al propio bucket
example-buckety a todos los objetos que contiene.Condition
Las condiciones bajo las cuales la política surte efecto.
Cuando configura varias condiciones, todas deben cumplirse (relación AND).
Esta política de denegación surte efecto solo cuando la VPC de origen de la solicitud no es
vpc-t4nlw426y44rd3iq4xxxx.Referencia completa de los elementos de la política: Authorization syntax and elements.
Después de confirmar que la política de autorización es correcta, haga clic en Save y siga las instrucciones en pantalla.
Configurar una bucket policy para un bucket vectorial
Los buckets vectoriales admiten únicamente el método de sintaxis para configurar la bucket policy.
Vaya a la lista Vector Buckets y haga clic en el bucket vectorial de destino.
En el panel de navegación izquierdo, haga clic en .
-
Haga clic en Edit. En el editor, introduzca la política de autorización en formato JSON.
Ejemplo de política: otorgar al usuario
20816353761158****permisos de lectura y escritura de datos vectoriales para la tabla de índiceindextestenvector-bucket-example.{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:ossvector:*:*:vector-bucket-example/indextest" ] }] }Una política de autorización completa incluye un elemento Version y un elemento Statement.
Version: la versión de la política de acceso. El valor es fijo en
1y no se puede cambiar.-
Statement: el cuerpo principal de la política. Contiene una o más reglas específicas. Cada regla incluye Effect, Action, Principal, Resource y Condition.
Elemento de la política
Descripción
Significado en el ejemplo
Effect
El efecto de la política. Los valores válidos son
AllowyDeny.Permite la solicitud.
Action
La acción específica que se ejecutará sobre el recurso. Se admite el carácter comodín
*.Leer y escribir datos vectoriales.
Principal
El usuario, la cuenta o el rol al que aplica la política.
Establecer el campo Principal como una lista vacía (
Principal:[]) equivale a establecerlo para todas las cuentas (Principal:["*"]).La política aplica solo al usuario de RAM
20816353761158****.Resource
Los recursos a los que aplica la política.
La política aplica a la tabla de índice
indextestdel bucketvector-bucket-example.Condition
Las condiciones bajo las cuales la política surte efecto.
Cuando configura varias condiciones, todas deben cumplirse (relación AND).
Ninguna.
Referencia completa de los elementos de la política: Authorization syntax and elements.
Después de confirmar que la política de autorización es correcta, haga clic en Save y siga las instrucciones en pantalla.
Configurar una política de OSS-HDFS
Para garantizar que los usuarios del servicio OSS-HDFS puedan acceder al directorio .dlsdata/ y a sus objetos, no establezca la operación autorizada en Deny Access cuando configure una Bucket Policy para un bucket con OSS-HDFS habilitado. Prerequisites for using OSS-HDFS.
Para restringir el acceso a direcciones IP de red específicas o a una VPC, agregue a continuación la siguiente condición a todas las instrucciones Deny. Esto garantiza que el servicio de backend de OSS-HDFS pueda leer y escribir en el bucket a través de la red clásica.
"StringNotLike": {
"oss:ClassicIntranet": [
"true"
]
}
Escenarios comunes: otorgar permisos
A continuación se muestran escenarios donde se otorga acceso a usuarios, roles o a todos los usuarios. Cada uno incluye un ejemplo de política que usted puede adaptar.
Escenario 1: otorgar permisos de lectura y escritura
Otorgue a los miembros de su equipo o a sus socios acceso de lectura y escritura a un bucket. Este ejemplo otorga permisos de lectura y escritura sobre example-bucket a los usuarios de RAM 27737962156157xxxx y 20214760404935xxxx.
Esta política no otorga permiso para listar buckets. Los usuarios de RAM no pueden explorar directamente la página Buckets. En su lugar, pueden agregar el bucket de destino en dentro del panel de navegación izquierdo.
{
"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":[
"*"
]
}
}
}
]
}
Escenario 2: otorgar permisos de solo lectura a directorios específicos
Otorgue acceso de solo lectura a directorios específicos. Este ejemplo otorga al usuario de RAM 20214760404935xxxx permisos de solo lectura sobre los directorios con los prefijos hangzhou/2020 y shanghai/2015 en example-bucket.
Esta política no otorga permiso para listar buckets. Los usuarios de RAM no pueden explorar directamente la página Buckets. En su lugar, pueden agregar el bucket de destino en dentro del panel de navegación izquierdo.
{
"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"
]
}
]
}
Escenario 3: otorgar permisos de visualización y listado
Permita que un usuario consulte la información del bucket y liste los objetos. Este ejemplo otorga a un usuario de RAM permisos de visualización y listado sobre example-bucket.
Esta política no otorga permiso para listar buckets. Los usuarios de RAM no pueden explorar directamente la página Buckets. En su lugar, pueden agregar el bucket de destino en dentro del panel de navegación izquierdo.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Escenario 4: otorgar permisos de lectura a un rol de RAM
Otorgue acceso temporal a los objetos del bucket mediante un rol de RAM. Un usuario de RAM o una aplicación asume el rol para obtener credenciales temporales. Este ejemplo otorga permisos de lectura sobre todos los objetos de example-bucket a todas las sesiones de un rol de RAM y a una sesión específica de otro rol.
Cuando otorgue permisos a un rol de RAM, el elemento Principal debe seguir este formato: arn:sts::<uid>:assumed-role/<role-name>/<session-name>. Los valores de <role-name> y <session-name> deben estar completamente en 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/*"
]
}
]
}
Escenario 5: otorgar permisos de listado a todos los usuarios
Permita que todos los usuarios listen los objetos sin acceder a su contenido. Este ejemplo otorga a todos los usuarios (*) permisos de listado sobre example-bucket.
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}
Escenarios comunes: restringir el acceso de red
A continuación se presentan escenarios donde se restringe el acceso al bucket según el origen de red (IP pública o VPC) mediante las claves de condición acs:SourceIp y acs:SourceVpc. La siguiente tabla resume los enfoques más comunes.
|
Origen de acceso |
Enfoque de la política |
Escenario |
|
Cualquier VPC |
Denegar las solicitudes donde acs:SourceVpc no comience con |
|
|
VPC específica |
Denegar las solicitudes donde acs:SourceVpc no sea igual al ID de la VPC especificada. |
|
|
IP pública específica |
La instrucción 1 deniega las solicitudes de red pública provenientes de direcciones IP no especificadas; la instrucción 2 deniega todas las solicitudes de VPC. |
|
|
Rango de IP específico dentro de una VPC específica |
La instrucción 1 deniega las solicitudes provenientes de VPC no especificadas; la instrucción 2 deniega las solicitudes de rangos de IP no especificados dentro de la VPC indicada. |
|
|
IP pública específica o VPC específica |
La instrucción 1 deniega las solicitudes de red pública provenientes de direcciones IP no especificadas; la instrucción 2 deniega las solicitudes de VPC provenientes de redes no especificadas. |
|
|
Todo excepto una IP específica (lista negra) |
Denegar las solicitudes provenientes de la IP especificada y usar el comodín |
|
|
Red clásica |
Permitir el acceso desde la red clásica. |
Escenario 1: restringir el acceso a la red pública
Bloquee todo el acceso desde la red pública a un bucket mediante una instrucción de denegación con la clave de condición acs:SourceVpc. Esta instrucción deniega las solicitudes que no se originan desde una VPC. El siguiente ejemplo deniega todo el acceso que no provenga de una VPC hacia 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-*"
]
}
}
}
]
}
Escenario 2: restringir el acceso a una VPC específica
Restrinja el acceso al bucket a una VPC específica mediante la clave de condición acs:SourceVpc. Esta instrucción bloquea las solicitudes provenientes de otras VPC o de la red pública. El siguiente ejemplo impide que todos los usuarios fuera de la VPC t4nlw426y44rd3iq4xxxx lean los objetos de example-bucket.
Dado que el principal de a continuación la instrucción de denegación es un carácter comodín (
*) y se incluye una condición, la instrucción aplica a todos los usuarios, incluido el propietario del bucket.La siguiente instrucción de denegación solo restringe el acceso y no otorga ningún permiso. Si el principal aún no tiene permisos asignados, agregue una instrucción de permiso (allow) para otorgarle los accesos necesarios.
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}
Escenario 3: restringir el acceso a una dirección IP pública específica
Para restringir el acceso al bucket a una dirección IP pública específica, cree dos instrucciones de denegación:
Instrucción 1 (denegar solicitudes de red pública desde direcciones IP no especificadas): esta instrucción usa
StringNotLike: {"acs:SourceVpc": "vpc-*"}para identificar las solicitudes de red pública (el valor deacs:SourceVpcen una solicitud de red pública no comienza convpc-). Luego empleaNotIpAddress: {"acs:SourceIp": "..."}para denegar las solicitudes que no provengan de la dirección IP especificada. La acción de denegación se activa cuando se cumplen ambas condiciones.Instrucción 2 (denegar todas las solicitudes de VPC): esta instrucción usa
StringLike: {"acs:SourceVpc": "vpc-*"}para coincidir con todas las solicitudes de cualquier VPC y denegarlas, ya que el objetivo es permitir el acceso únicamente desde la dirección IP pública especificada.
Una solicitud se deniega si coincide con cualquiera de las dos instrucciones. El siguiente ejemplo deniega el acceso de lectura a example-bucket para todos los usuarios, excepto aquellos que provengan de la IP pública 203.0.113.5.
Dado que el principal de a continuación la instrucción de denegación es un carácter comodín (
*) y se incluye una condición, la instrucción aplica a todos los usuarios, incluido el propietario del bucket.La siguiente instrucción de denegación solo restringe el acceso y no otorga ningún permiso. Si el principal aún no tiene permisos asignados, agregue una instrucción de permiso (allow) para otorgarle los accesos necesarios.
{
"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-*"
]
}
}
}
]
}
Escenario 4: restringir el acceso a un rango de IP en una VPC
Para restringir el acceso al bucket a un rango de IP específico dentro de una VPC determinada, cree dos instrucciones de denegación:
Instrucción 1 (denegar todas las solicitudes externas a la VPC especificada): esta instrucción usa
StringNotEquals: {"acs:SourceVpc": "..."}para denegar las solicitudes provenientes de otras VPC y de la red pública.Instrucción 2 (denegar solicitudes externas al rango de IP especificado dentro de la VPC): esta instrucción usa
StringEquals: {"acs:SourceVpc": "..."}para coincidir con las solicitudes de la VPC especificada y luego empleaNotIpAddress: {"acs:SourceIp": "..."}para denegar las solicitudes que no provengan del rango de direcciones IP indicado. La acción de denegación se activa cuando se cumplen ambas condiciones.
Una solicitud se deniega si coincide con cualquiera de las dos instrucciones. El siguiente ejemplo deniega el acceso de lectura a example-bucket para todos los usuarios, excepto aquellos que provengan del rango 192.168.0.0/16 dentro de la VPC t4nlw426y44rd3iq4xxxx.
Dado que el principal de a continuación la instrucción de denegación es un carácter comodín (
*) y se incluye una condición, la instrucción aplica a todos los usuarios, incluido el propietario del bucket.La siguiente instrucción de denegación solo restringe el acceso y no otorga ningún permiso. Si el principal aún no tiene permisos asignados, agregue una instrucción de permiso (allow) para otorgarle los accesos necesarios.
{
"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"
]
}
}
}
]
}
Escenario 5: restringir el acceso a una IP pública o una VPC
Para restringir el acceso al bucket a una IP pública o una VPC específica, cree dos instrucciones de denegación:
Instrucción 1 (para solicitudes de red pública, denegar IP no especificadas): esta instrucción usa
StringNotLike: {"acs:SourceVpc": "vpc-*"}para identificar las solicitudes de red pública y luego empleaNotIpAddress: {"acs:SourceIp": "..."}para denegar las solicitudes provenientes de direcciones IP públicas no especificadas. La acción de denegación se activa cuando se cumplen ambas condiciones. Las solicitudes de VPC no coinciden con esta instrucción porque su valor deacs:SourceVpccomienza convpc-.Instrucción 2 (para solicitudes de VPC, denegar VPC no especificadas): esta instrucción usa
StringLike: {"acs:SourceVpc": "vpc-*"}para identificar las solicitudes de VPC y luego empleaStringNotEquals: {"acs:SourceVpc": "..."}para denegar las solicitudes provenientes de VPC no especificadas. La acción de denegación se activa cuando se cumplen ambas condiciones. Las solicitudes de red pública no coinciden con esta instrucción porque su valor deacs:SourceVpcno comienza convpc-.
Una solicitud se deniega si coincide con cualquiera de las dos instrucciones. El siguiente ejemplo deniega el acceso de lectura a example-bucket para todos los usuarios, excepto aquellos que provengan de la IP pública 203.0.113.5 o de la VPC t4nlw426y44rd3iq4xxxx.
Dado que el principal de a continuación la instrucción de denegación es un carácter comodín (
*) y se incluye una condición, la instrucción aplica a todos los usuarios, incluido el propietario del bucket.La siguiente instrucción de denegación solo restringe el acceso y no otorga ningún permiso. Si el principal aún no tiene permisos asignados, agregue una instrucción de permiso (allow) para otorgarle los accesos necesarios.
{
"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"
]
}
}
}
]
}
Escenario 6: configurar una lista negra de IP
Bloquee el acceso desde direcciones IP o rangos específicos mediante una instrucción de denegación en la bucket policy.
La condición StringLike: {"acs:SourceVpc": "*"} usa un comodín para coincidir con todos los valores y no restringe el alcance de la VPC. Existe únicamente para cumplir con la restricción que exige que acs:SourceIp tenga una condición acs:SourceVpc correspondiente.
Dado que el principal de a continuación la instrucción de denegación es un carácter comodín (
*) y se incluye una condición, la instrucción aplica a todos los usuarios, incluido el propietario del bucket.Puede configurar varias direcciones IP y rangos de direcciones IP. Sepárelos con comas.
{
"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": [
"*"
]
}
}
}]
}
Escenario 7: Configurar el acceso a la red clásica
La clave de condición oss:ClassicIntranet indica si una solicitud se origina en la red clásica de OSS. Los valores válidos son true y false. Algunos servicios de backend de OSS (como la entrega de registros y el inventario de buckets) acceden a los buckets mediante la red clásica. Utilice la siguiente condición para identificar las solicitudes provenientes de dicha red.
"Condition": {
"StringEquals": {
"oss:ClassicIntranet": [
"true"
]
}
}
Cuando configure restricciones de acceso a la red (políticas Deny), agregue la siguiente condición al bloque Condition de la instrucción Deny. De esta manera, se excluyen las solicitudes de la red clásica y se evita que los servicios de backend mencionados queden bloqueados por error.
"StringNotEquals": {
"oss:ClassicIntranet": [
"true"
]
}
Escenarios comunes: controles de seguridad
A continuación se presentan escenarios que aplican controles de seguridad: restricciones de credenciales, prevención de acceso público y límites en las políticas de retención.
Escenario 1: Exigir credenciales temporales para las llamadas a la API
Exija credenciales de acceso temporales para las llamadas a la API. Esta política utiliza la clave de condición acs:AccessId para bloquear el acceso con credenciales de larga duración (claves de acceso de la cuenta de Alibaba Cloud o de usuarios de RAM). En el siguiente ejemplo se deniega a todos los usuarios sin credenciales temporales (que comiencen con TMP. o STS.) la visualización de example-bucket y la enumeración de sus 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.*"
]
}
}
}
]
}
Escenario 2: Prohibir ACL públicas
Evite que las ACL de buckets y objetos se configuren como públicas. Cree dos instrucciones de denegación:
Utilice la clave de condición
oss:x-oss-aclpara crear una instrucción de denegación. Esta impide que la ACL del bucket se establezca con cualquier permiso distinto deprivate. Cualquier intento de configurar una ACL public-read o public-read-write activa la regla de denegación.Emplee la clave de condición
oss:x-oss-object-aclpara generar otra instrucción de denegación. Con ella se evita que la ACL de un objeto tenga un permiso diferente deprivateydefault.
Si una solicitud coincide con alguna de estas instrucciones, se deniega. El siguiente ejemplo bloquea las operaciones de ACL públicas en 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"
]
}
}
}
]
}
Escenario 3: Limitar el periodo de retención de ObjectWorm
Después de habilitar una política de retención a nivel de objeto (ObjectWorm) para un bucket, utilice una bucket policy para limitar el periodo máximo de retención. En el siguiente ejemplo se restringe la retención a 30 días. Se deniega cualquier solicitud PutObjectRetention que supere este plazo.
{
"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-dayses la clave de condición de una política de ObjectWorm. Representa la cantidad de días de retención restantes especificada en la solicitud.Dado que el principal de esta política es un carácter comodín (*) e incluye una condición, se aplica a todos los usuarios, incluido el propietario del bucket.
Desarrollo e integración de herramientas
Además de la consola, puede configurar bucket policies mediante herramientas gráficas, herramientas de CLI y SDK.
-
Usar la herramienta gráfica ossbrowser
ossbrowser ofrece una experiencia visual similar a la consola para gestionar políticas a nivel de bucket. Instale ossbrowser, inicie sesión y luego configure la política.
-
Usar la herramienta de línea de comandos ossutil
Establezca la política de autorización con el comando put-bucket-policy.
NotaPara establecer una política de autorización en un bucket vectorial, ejecute el comando
ossutil vectors-api put-bucket-policy. -
Usar un SDK
Configure las políticas con SDK como Java SDK, Python SDK, Go SDK y Node.js SDK. La sección SDK reference abarca todos los lenguajes compatibles.
-
Llamar directamente a una API
Llame a la operación PutBucketPolicy para establecer una política de autorización de bucket.
Cuotas y límites
Tamaño de la política: un bucket admite varias instrucciones de Bucket Policy, pero el tamaño total de todas las políticas no debe superar los 16 KB.
Longitud de los campos: cada campo de una Bucket Policy tiene una longitud máxima de 4,095 bytes.