Políticas de acceso a bloques y grupos
StorageGRID utiliza el lenguaje de políticas de Amazon Web Services (AWS) para permitir que los inquilinos S3 controlen el acceso a bloques y objetos dentro de esos bloques. El sistema StorageGRID implementa un subconjunto del lenguaje de políticas de la API DE REST de S3. Las políticas de acceso para la API de S3 se escriben en JSON.
Información general sobre las políticas de acceso
Existen dos tipos de políticas de acceso compatibles con StorageGRID.
-
Políticas de bloque, que se configuran mediante las operaciones API Get Bucket, PUT Bucket y DELETE Bucket Policy S3. Las políticas de bloque se asocian a bloques, por lo que se configuran para controlar el acceso de los usuarios de la cuenta de propietario del bloque u otras cuentas al bloque y a los objetos en él. La política de bloques se aplica únicamente a un bloque y, posiblemente, a varios grupos.
-
Políticas de grupo, que se configuran mediante el Administrador de inquilinos o la API de administración de inquilinos. Las directivas de grupo se asocian a un grupo de la cuenta, por lo que se configuran para permitir que dicho grupo tenga acceso a recursos específicos propiedad de dicha cuenta. La política de grupo se aplica únicamente a un grupo y, posiblemente, a varios bloques.
Las políticas de bloque y grupo de StorageGRID siguen una gramática específica definida por Amazon. Dentro de cada política hay una serie de declaraciones de política y cada sentencia contiene los siguientes elementos:
-
ID de sentencia (Sid) (opcional)
-
Efecto
-
Principal/NotPrincipal
-
Recurso/NotResource
-
Acción/NotAction
-
Condición (opcional)
Las sentencias de directiva se crean utilizando esta estructura para especificar permisos: Conceda <Effect> para permitir/denegar que <Principal> ejecute <Action> en <Resource> cuando se aplique <Condition>.
Cada elemento de directiva se utiliza para una función específica:
Elemento | Descripción |
---|---|
SID |
El elemento Sid es opcional. El Sid sólo se ha diseñado como una descripción para el usuario. El sistema StorageGRID lo almacena pero no lo interpreta. |
Efecto |
Utilice el elemento Effect para establecer si se permiten o deniegan las operaciones especificadas. Debe identificar las operaciones que permite (o deniega) en cubos u objetos utilizando las palabras clave del elemento Acción admitido. |
Principal/NotPrincipal |
Puede permitir a los usuarios, grupos y cuentas acceder a recursos específicos y realizar acciones específicas. Si no se incluye ninguna firma S3 en la solicitud, se permite el acceso anónimo especificando el carácter comodín (*) como principal. De forma predeterminada, sólo la raíz de la cuenta tiene acceso a los recursos que pertenecen a la cuenta. Sólo es necesario especificar el elemento Principal en una política de bloque. Para las directivas de grupo, el grupo al que se asocia la directiva es el elemento Principal implícito. |
Recurso/NotResource |
El elemento Resource identifica los bloques y los objetos. Puede permitir o denegar permisos para cubos y objetos utilizando el nombre de recurso de Amazon (ARN) para identificar el recurso. |
Acción/NotAction |
Los elementos Acción y efecto son los dos componentes de los permisos. Cuando un grupo solicita un recurso, se le concede o se le deniega el acceso al recurso. Se deniega el acceso a menos que asigne permisos de forma específica, pero puede utilizar Denegar explícito para anular un permiso otorgado por otra directiva. |
Condición |
El elemento Condition es opcional. Las condiciones permiten crear expresiones para determinar cuándo se debe aplicar una directiva. |
En el elemento Action , puede utilizar el carácter comodín (*) para especificar todas las operaciones o un subconjunto de operaciones. Por ejemplo, esta acción coincide con permisos como s3:GetObject, s3:PutObject y s3:DeleteObject.
s3:*Object
En el elemento Resource , puede utilizar los caracteres comodín (*) y (?). Aunque el asterisco (*) coincide con 0 o más caracteres, el signo de interrogación (?) coincide con cualquier carácter.
En el elemento Principal, los caracteres comodín no se admiten excepto para establecer el acceso anónimo, que concede permiso a todos. Por ejemplo, el comodín (*) se establece como el valor Principal.
"Principal":"*"
En el ejemplo siguiente, la instrucción utiliza los elementos Effect, Principal, Acción y recurso. En este ejemplo se muestra una sentencia de directiva de bloque completa que utiliza el efecto "permitir" para dar a los principales, el grupo admin federated-group/admin
y el grupo financiero federated-group/finance
, Permisos para realizar la acción s3:ListBucket
en el bloque llamado mybucket
Y la Acción s3:GetObject
en todos los objetos dentro de ese cucharón.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::27233906934684427525:federated-group/admin", "arn:aws:iam::27233906934684427525:federated-group/finance" ] }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:iam:s3:::mybucket", "arn:aws:iam:s3:::mybucket/*" ] } ] }
La política de bloque tiene un límite de tamaño de 20,480 bytes y la política de grupo tiene un límite de tamaño de 5,120 bytes.
Configuración de control de coherencia para políticas
De forma predeterminada, cualquier actualización que realice a las directivas de grupo será consistente. Una vez que la política de grupo sea coherente, los cambios pueden tardar 15 minutos más en aplicarse, debido al almacenamiento en caché de políticas. De forma predeterminada, las actualizaciones que realice en las políticas de bloques también serán coherentes.
Según sea necesario, puede cambiar las garantías de coherencia para las actualizaciones de la política de bloques. Por ejemplo, es posible que desee que un cambio en una política de bloque se convierta en una Lo antes posible. efectiva por motivos de seguridad.
En este caso, puede ajustar la Consistency-Control
En la solicitud DE política PUT Bucket, o puede utilizar la solicitud DE consistencia PUT Bucket. Al cambiar el control de coherencia para esta solicitud, debe utilizar el valor all, que ofrece la mayor garantía de coherencia de lectura tras escritura. Si especifica cualquier otro valor de control de consistencia en un encabezado para LA solicitud DE consistencia PUT Bucket, la solicitud será rechazada. Si especifica cualquier otro valor para una solicitud DE política PUT Bucket, el valor se ignorará. Una vez que una política de bloques se vuelve coherente, los cambios pueden tardar 8 segundos más en aplicarse, debido al almacenamiento en caché de la política.
Si establece el nivel de consistencia en all para forzar la aplicación de una nueva política de cucharón antes, asegúrese de volver a establecer el control de nivel de cucharón en su valor original cuando haya terminado. De lo contrario, todas las solicitudes de segmentos futuras utilizarán la configuración all. |
Uso del ARN en las sentencias de directiva
En las declaraciones de política, el ARN se utiliza en los elementos Principal y Recursos.
-
Utilice esta sintaxis para especificar el recurso ARN de S3:
arn:aws:s3:::bucket-name arn:aws:s3:::bucket-name/object_key
-
Utilice esta sintaxis para especificar el recurso de identidad ARN (usuarios y grupos):
arn:aws:iam::account_id:root arn:aws:iam::account_id:user/user_name arn:aws:iam::account_id:group/group_name arn:aws:iam::account_id:federated-user/user_name arn:aws:iam::account_id:federated-group/group_name
Otras consideraciones:
-
Puede utilizar el asterisco (*) como comodín para que coincida con cero o más caracteres dentro de la clave de objeto.
-
Los caracteres internacionales, que se pueden especificar en la clave de objeto, deben codificarse mediante JSON UTF-8 o mediante secuencias de escape JSON \u. No se admite el porcentaje de codificación.
El cuerpo de solicitud HTTP para la operación DE política PUT Bucket debe codificarse con charset=UTF-8.
Especificar recursos en una política
En las sentencias de directiva, puede utilizar el elemento Resource para especificar el bloque o el objeto para el que se permiten o deniegan los permisos.
-
Cada instrucción de directiva requiere un elemento Resource. En una política, el elemento denota los recursos
Resource`o bien, `NotResource
para la exclusión. -
Se especifican recursos con un ARN de recurso S3. Por ejemplo:
"Resource": "arn:aws:s3:::mybucket/*"
-
También puede usar variables de política dentro de la clave de objeto. Por ejemplo:
"Resource": "arn:aws:s3:::mybucket/home/${aws:username}/*"
-
El valor del recurso puede especificar un bucket que todavía no existe cuando se crea una política de grupo.
Especificar los principales de una directiva
Utilice el elemento Principal para identificar al usuario, grupo o cuenta de arrendatario que la sentencia de directiva permite o deniega el acceso al recurso.
-
Cada sentencia de política de una política de bloque debe incluir un elemento Principal. Las declaraciones de política en una política de grupo no necesitan el elemento Principal porque se entiende que el grupo es el principal.
-
En una política, los directores son denotados por el elemento «'Principal,'» o «'NotPrincipal» para la exclusión.
-
Las identidades basadas en cuentas se deben especificar mediante un ID o un ARN:
"Principal": { "AWS": "account_id"} "Principal": { "AWS": "identity_arn" }
-
En este ejemplo se utiliza el ID de cuenta de inquilino 27233906934684427525, que incluye la raíz de la cuenta y todos los usuarios de la cuenta:
"Principal": { "AWS": "27233906934684427525" }
-
Puede especificar sólo la raíz de la cuenta:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:root" }
-
Puede especificar un usuario federado específico ("Alex"):
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/Alex" }
-
Puede especificar un grupo federado específico ("managers"):
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" }
-
Puede especificar un principal anónimo:
"Principal": "*"
-
Para evitar ambigüedades, puede utilizar el UUID de usuario en lugar del nombre de usuario:
arn:aws:iam::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013
Por ejemplo, supongamos que Alex abandona la organización y el nombre de usuario
Alex
se ha eliminado. Si un nuevo Alex se une a la organización y se le asigna la mismaAlex
nombre de usuario, es posible que el nuevo usuario herede sin querer los permisos concedidos al usuario original. -
El valor principal puede especificar un nombre de grupo/usuario que aún no existe cuando se crea una directiva de bloque.
Especificar permisos en una directiva
En una directiva, el elemento Acción se utiliza para permitir/denegar permisos a un recurso. Hay un conjunto de permisos que puede especificar en una directiva, que se indican mediante el elemento "Acción" o, alternativamente, "NotAction" para la exclusión. Cada uno de estos elementos se asigna a operaciones de API de REST de S3 específicas.
En las tablas se enumeran los permisos que se aplican a los bloques y los permisos que se aplican a los objetos.
Amazon S3 utiliza ahora el permiso s3:PutReplicationConfiguration para LAS acciones de replicación PUT y DELETE Bucket. StorageGRID utiliza permisos independientes para cada acción, que coinciden con la especificación original de Amazon S3. |
SE realiza UNA ELIMINACIÓN cuando se utiliza UNA PUESTA para sobrescribir un valor existente. |
Permisos que se aplican a los bloques
Permisos | OPERACIONES DE LA API DE REST DE S3 | Personalizado para StorageGRID |
---|---|---|
s3:CreateBucket |
COLOQUE el cucharón |
|
s3:DeleteBucket |
ELIMINAR bloque |
|
s3:DeleteBucketMetadataNotification |
DELETE bucket metadata notification Configuration |
Sí |
s3:DeleteBucketPolicy |
ELIMINE la política de bloques |
|
s3:DeleteReplicationConfiguration |
DELETE Bucket replicación |
Sí, separe los permisos PARA PUT y DELETE* |
s3:GetBucketAcl |
GET Bucket ACL |
|
s3:GetBucketCompliance |
CUMPLIMIENTO de LA normativa GET Bucket (obsoleto) |
Sí |
s3:GetBucketConsistency |
OBTENGA coherencia de bloques |
Sí |
s3: GetBucketCORS |
OBTENGA los cors del cucharón |
|
s3:GetEncryptionConfiguration |
OBTENGA el cifrado de bloque |
|
s3:GetBucketLastAccessTime |
HORA de último acceso al bloque DE GET |
Sí |
s3:GetBucketLocation |
OBTENER ubicación de bloque |
|
s3:GetBucketMetadataNotification |
OBTENGA la configuración de notificación de metadatos del bloque de datos |
Sí |
s3:GetBucketNotification |
OBTENGA la notificación DE BUCKET |
|
s3:GetBucketObjectLockConfiguration |
OBTENER configuración de bloqueo de objeto |
|
s3:GetBucketPolicy |
OBTENGA la política de bloques |
|
s3:GetBucketTagging |
GET Bucket tagging |
|
s3:GetBucketVersioning |
OBTENGA el control de versiones de Bucket |
|
s3:GetLifecycleConfiguration |
OBTENGA el ciclo de vida de la cuchara |
|
s3:GetReplicationConfiguration |
OBTENGA la replicación de Bucket |
|
s3:ListAllMyBuckets |
|
Sí, PARA OBTENER el uso del almacenamiento |
s3:ListBucket |
|
|
s3:ListBucketMultipartUploads |
|
|
s3:ListBucketVersions |
OBTENGA las versiones DE Bucket |
|
s3:PutBucketCompliance |
CUMPLIMIENTO de PUT Bucket (obsoleto) |
Sí |
s3:PutBucketConsistency |
PONGA la consistencia del cucharón |
Sí |
s3: PutBucketCORS |
|
|
s3:PutEncryptionConfiguration |
|
|
s3:PutBucketLastAccessTime |
PUT Bucket última hora de acceso |
Sí |
s3:PutBucketMetadataNotification |
PUT bucket metadata notification Configuration |
Sí |
s3:PutBucketNotification |
NOTIFICACIÓN DE PUT Bucket |
|
s3:PutBucketObjectLockConfiguration |
COLOQUE el cucharón con el |
|
s3:PutBucketPolicy |
POLÍTICA DE PUT Bucket |
|
s3:PutBucketEtiquetado |
|
|
s3:PutBucketVersioning |
PONER creación de versiones de bloques |
|
s3:PutLipeycleConfiguration |
|
|
s3:PutReplicationConfiguration |
PUT Bucket replication |
Sí, separe los permisos PARA PUT y DELETE* |
Permisos que se aplican a objetos
Permisos | OPERACIONES DE LA API DE REST DE S3 | Personalizado para StorageGRID |
---|---|---|
s3:AbortMultipartUpload |
|
|
s3:DeleteObject |
|
|
s3:DeleteObjectTagging |
ELIMINAR etiquetado de objetos |
|
s3:DeleteObjectVersionTagging |
ELIMINAR etiquetado de objetos (una versión específica del objeto) |
|
s3:DeleteObjectVersion |
ELIMINAR objeto (una versión específica del objeto) |
|
s3:GetObject |
|
|
s3:GetObjectAcl |
OBTENER ACL de objeto |
|
s3:GetObjectLegalHold |
OBTENER retención legal de objetos |
|
s3:GetObjectRetention |
OBTENGA retención de objetos |
|
s3:GetObjectTagging |
OBTENER etiquetado de objetos |
|
s3:GetObjectVersionTagging |
OBTENER etiquetado de objetos (una versión específica del objeto) |
|
s3:GetObjectVersion |
GET Object (una versión específica del objeto) |
|
s3:ListMultipartUploadParts |
Elementos de lista, restauración POSTERIOR al objeto |
|
s3:PutObject |
|
|
s3:PutObjectLegalHold |
PONER objeto legal |
|
s3:PutObjectRetention |
PUT Object retention |
|
s3:PutObjectEtiquetado |
PONER etiquetado de objetos |
|
s3:PutObjectVersionEtiquetado |
PONER etiquetado de objetos (una versión específica del objeto) |
|
s3:PutOverwriteObject |
|
Sí |
s3:RestoreObject |
Restauración DE objetos posterior |
Uso del permiso PutOverwriteObject
el permiso s3:PutOverwriteObject es un permiso StorageGRID personalizado que se aplica a operaciones que crean o actualizan objetos. La configuración de este permiso determina si el cliente puede sobrescribir los datos de un objeto, metadatos definidos por el usuario o el etiquetado de objetos S3.
Entre los posibles ajustes para este permiso se incluyen:
-
Permitir: El cliente puede sobrescribir un objeto. Esta es la configuración predeterminada.
-
Denegar: El cliente no puede sobrescribir un objeto. Cuando se establece en Denegar, el permiso PutOverwriteObject funciona de la siguiente manera:
-
Si se encuentra un objeto existente en la misma ruta:
-
No se pueden sobrescribir los datos, los metadatos definidos por el usuario ni el etiquetado de objetos de S3 del objeto.
-
Se cancela cualquier operación de ingesta en curso y se devuelve un error.
-
Si se habilita el control de versiones de S3, la configuración Denegar evita QUE LAS operaciones PUT Object tagging o DELETE Object tagging modifiquen el conjunto de etiquetas para un objeto y sus versiones no actuales.
-
-
Si no se encuentra un objeto existente, este permiso no tiene efecto.
-
-
Cuando este permiso no está presente, el efecto es el mismo que si se estableció permitir.
Si la política actual de S3 permite sobrescribir y el permiso PutOverwriteObject se establece en Deny, el cliente no puede sobrescribir los datos de un objeto, metadatos definidos por el usuario ni el etiquetado de objetos. Además, si la casilla de verificación evitar modificación de cliente está activada (Configuración > Opciones de cuadrícula), esa configuración anula la configuración del permiso PutOverwriteObject. |
Especificar condiciones en una directiva
Las condiciones definen cuándo estará en vigor una política. Las condiciones consisten en operadores y pares clave-valor.
Condiciones Utilice pares clave-valor para la evaluación. Un elemento Condition puede contener varias condiciones y cada condición puede contener varios pares clave-valor. El bloque Condition utiliza el siguiente formato:
Condition: {
condition_type: {
condition_key: condition_values
En el ejemplo siguiente, la condición ipaddress utiliza la clave de condición SourceIp.
"Condition": { "IpAddress": { "aws:SourceIp": "54.240.143.0/24" ... }, ...
Operadores de condición admitidos
Los operadores de condición se categorizan de la siguiente manera:
-
Cadena
-
Numérico
-
Booleano
-
Dirección IP
-
Comprobación nula
Operadores de condición | Descripción |
---|---|
StringEquals |
Compara una clave con un valor de cadena basado en la coincidencia exacta (distingue entre mayúsculas y minúsculas). |
StringNotEquals |
Compara una clave con un valor de cadena basado en la coincidencia negada (distingue entre mayúsculas y minúsculas). |
StringEqualizsIgnoreCase |
Compara una clave con un valor de cadena basado en la coincidencia exacta (omite Case). |
StringNotEqualizsIgnoreCase |
Compara una clave con un valor de cadena basado en la coincidencia negada (omite Case). |
StringLike |
Compara una clave con un valor de cadena basado en la coincidencia exacta (distingue entre mayúsculas y minúsculas). Puede incluir * y ? caracteres comodín. |
StringNotLike |
Compara una clave con un valor de cadena basado en la coincidencia negada (distingue entre mayúsculas y minúsculas). Puede incluir * y ? caracteres comodín. |
Valores numéricos |
Compara una clave con un valor numérico basado en la coincidencia exacta. |
NumericNotEquals |
Compara una clave con un valor numérico basado en la coincidencia negada. |
NumericGreatertan |
Compara una clave con un valor numérico basado en la coincidencia "'mayor que'". |
NumericGreaterThanEquals |
Compara una clave con un valor numérico basado en la coincidencia "'mayor que o igual'". |
NumericLessThan |
Compara una clave con un valor numérico basado en la coincidencia "'less than'". |
NumericLesThanEquals |
Compara una clave con un valor numérico basado en la coincidencia "'menor que o igual'". |
Bool |
Compara una clave con un valor booleano basado en la coincidencia "'true o false'". |
IPAddress |
Compara una clave con una dirección IP o un rango de direcciones IP. |
NotIpAddress |
Compara una clave con una dirección IP o un intervalo de direcciones IP basándose en la coincidencia negada. |
Nulo |
Comprueba si hay una clave de condición en el contexto actual de la solicitud. |
Teclas de condición compatibles
Categoría | Teclas de condición aplicables | Descripción |
---|---|---|
Operadores IP |
aws:SourceIp |
Comparará con la dirección IP desde la que se envió la solicitud. Se puede utilizar para operaciones de bloques u objetos. Nota: Si la solicitud S3 se envió a través del servicio Load Balancer en nodos Admin y nodos de Gpuertas de enlace, se comparará con la dirección IP anterior al servicio Load Balancer. Nota: Si se utiliza un equilibrador de carga no transparente de terceros, se comparará con la dirección IP de ese equilibrador de carga. Cualquiera |
Recurso/identidad |
aws:nombre de usuario |
Comparará con el nombre de usuario del remitente desde el que se envió la solicitud. Se puede utilizar para operaciones de bloques u objetos. |
S3:ListBucket y. S3:ListBucketVersions permisos |
s3:delimitador |
Comparará con el parámetro delimitador especificado en una solicitud GET Bucket o GET Bucket Object Versions. |
S3:ListBucket y. S3:ListBucketVersions permisos |
s3:max-keys |
Comparará con el parámetro max-keys especificado en una solicitud GET Bucket o GET Bucket Object Versions. |
S3:ListBucket y. S3:ListBucketVersions permisos |
s3:prefijo |
Se comparará con el parámetro prefix especificado en una solicitud GET Bucket o GET Bucket Object Versions. |
Especificar variables en una directiva
Las variables de las directivas se pueden utilizar para rellenar la información de directivas cuando esté disponible. Se pueden usar variables de política en la Resource
comparaciones entre elementos y cadenas en la Condition
elemento.
En este ejemplo, la variable ${aws:username}
Forma parte del elemento Resource:
"Resource": "arn:aws:s3:::_bucket-name/home_/${aws:username}/*"
En este ejemplo, la variable ${aws:username}
forma parte del valor de condición en el bloque de condición:
"Condition": { "StringLike": { "s3:prefix": "${aws:username}/*" ... }, ...
Variable | Descripción |
---|---|
|
Utiliza la clave SourceIp como la variable proporcionada. |
|
Utiliza la clave de nombre de usuario como la variable proporcionada. |
|
Utiliza la clave de prefijo específica del servicio como variable proporcionada. |
|
Utiliza la clave de max-keys específica del servicio como la variable proporcionada. |
|
Carácter especial. Utiliza el carácter como carácter literal *. |
|
Carácter especial. Utiliza el carácter como literal ? carácter. |
|
Carácter especial. Utiliza el carácter como carácter literal $. |
Creación de directivas que requieren un manejo especial
A veces, una directiva puede otorgar permisos peligrosos para la seguridad o para operaciones continuas, como bloquear al usuario raíz de la cuenta. La implementación de la API REST de StorageGRID S3 es menos restrictiva durante la validación de políticas que Amazon, pero igual de estricta durante la evaluación de la política.
Descripción de la política | Tipo de política | Comportamiento de Amazon | Comportamiento de StorageGRID |
---|---|---|---|
Denegar a sí mismo cualquier permiso a la cuenta raíz |
Cucharón |
Válido y reforzado, pero la cuenta de usuario raíz conserva el permiso para todas las operaciones de política de bloques de S3 |
Igual |
Denegar a sí mismo cualquier permiso al usuario o grupo |
Grupo |
Válido y reforzado |
Igual |
Permitir cualquier permiso para un grupo de cuentas externo |
Cucharón |
Principal no válido |
Válidos, pero los permisos para todas las operaciones de política de bloques de S3 devuelven un método 405 no permitido cuando lo permite una política |
Permitir cualquier permiso para una raíz de cuenta externa o para un usuario |
Cucharón |
Válidos, pero los permisos para todas las operaciones de política de bloques de S3 devuelven un método 405 no permitido cuando lo permite una política |
Igual |
Permitir que todos tengan permisos para todas las acciones |
Cucharón |
Válido, pero los permisos para todas las operaciones de política de bloques de S3 devuelven un error de método 405 no permitido para la raíz de cuenta externa y los usuarios |
Igual |
Denegar a todos los permisos a todas las acciones |
Cucharón |
Válido y reforzado, pero la cuenta de usuario raíz conserva el permiso para todas las operaciones de política de bloques de S3 |
Igual |
Principal es un usuario o grupo inexistente |
Cucharón |
Principal no válido |
Válido |
El recurso es un bloque de S3 que no existe |
Grupo |
Válido |
Igual |
El director es un grupo local |
Cucharón |
Principal no válido |
Válido |
La directiva otorga a una cuenta que no es propietaria (incluidas las cuentas anónimas) permisos para COLOCAR objetos |
Cucharón |
Válido. Los objetos son propiedad de la cuenta creadora y la política de bucket no se aplica. La cuenta de creador debe otorgar permisos de acceso al objeto mediante ACL de objeto. |
Válido. Los objetos son propiedad de la cuenta de propietario del bloque. Se aplica la política de bloques. |
Protección WORM (escritura única lectura múltiple)
Se pueden crear bloques DE escritura única y lectura múltiple (WORM) para proteger los datos, los metadatos de objetos definidos por el usuario y el etiquetado de objetos de S3. Puede configurar los bloques WORM para permitir la creación de objetos nuevos y evitar sobrescrituras o eliminaciones del contenido existente. Utilice uno de los enfoques aquí descritos.
Para asegurarse de que las sobrescrituras se deniegan siempre, puede:
-
En Grid Manager, vaya a Configuración > Opciones de cuadrícula y active la casilla de verificación evitar modificación de cliente.
-
Aplique las siguientes reglas y políticas de S3:
-
Agregue una operación PUTOVERWRITEOBJECT DENY a la directiva S3.
-
Agregue una operación DeleteObject DENY a la directiva S3.
-
Añada una operación PUT Object ALLOW a la política de S3.
-
Al establecer DeleteObject en DENEGAR en una directiva S3, no se impide que ILM elimine objetos cuando existe una regla como "'copias cero después de 30 días'". |
Incluso cuando se aplican todas estas reglas y políticas, no se protegen contra las escrituras simultáneas (véase la situación A). Protegen contra sobrescrituras completadas secuenciales (consulte la situación B). |
Situación A: Escrituras simultáneas (no protegidas contra)
/mybucket/important.doc PUT#1 ---> OK PUT#2 -------> OK
Situación B: Sobrescrituras completadas secuenciales (protegidas contra)
/mybucket/important.doc PUT#1 -------> PUT#2 ---X (denied)
Ejemplos de políticas de S3
Utilice los ejemplos de esta sección para crear políticas de acceso de StorageGRID para bloques y grupos.
Ejemplos de políticas de bloques de S3
Las políticas de bloque especifican los permisos de acceso para el bloque al que está asociada la directiva. Las políticas de bloque se configuran mediante la API de S3 PutBucketPolicy.
Se puede configurar una política de bloques mediante la CLI de AWS según el siguiente comando:
> aws s3api put-bucket-policy --bucket examplebucket --policy file://policy.json
Ejemplo: Permitir que todos tengan acceso de solo lectura a un bloque
En este ejemplo, todos, incluido el anónimo, pueden enumerar objetos en el bloque y realizar operaciones Get Object en todos los objetos del bloque. Se denegarán todas las demás operaciones. Tenga en cuenta que esta directiva podría no ser particularmente útil ya que nadie, excepto la raíz de la cuenta, tiene permisos para escribir en el bloque.
{ "Statement": [ { "Sid": "AllowEveryoneReadOnlyAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"] } ] }
Ejemplo: Permitir que todos en una cuenta tengan acceso total y que todas las personas de otra cuenta tengan acceso de solo lectura a un bloque
En este ejemplo, se permite a todos los integrantes de una cuenta especificada el acceso completo a un bloque, mientras que a todos los miembros de otra cuenta especificada sólo se les permite enumerar el bloque y realizar operaciones GetObject en los objetos del bloque empezando por el shared/
prefijo de clave de objeto.
En StorageGRID, los objetos creados por una cuenta que no es propietaria (incluidas las cuentas anónimas) son propiedad de la cuenta de propietario del bloque. La política de bloque se aplica a estos objetos. |
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "95390887230002558202" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Allow", "Principal": { "AWS": "31181711887329436680" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::examplebucket/shared/*" }, { "Effect": "Allow", "Principal": { "AWS": "31181711887329436680" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::examplebucket", "Condition": { "StringLike": { "s3:prefix": "shared/*" } } } ] }
Ejemplo: Permitir que todo el mundo tenga acceso de solo lectura a un bloque y acceso completo por un grupo especificado
En este ejemplo, todos los usuarios, incluido el anónimo, pueden enumerar el bloque y realizar operaciones GET Object en todos los objetos del bloque, mientras que sólo los usuarios que pertenecen al grupo Marketing
en la cuenta especificada se permite el acceso completo.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/Marketing" }, "Action": "s3:*", "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Allow", "Principal": "*", "Action": ["s3:ListBucket","s3:GetObject"], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] } ] }
Ejemplo: Permitir que todo el mundo tenga acceso de lectura y escritura a un bloque si un cliente se encuentra en el rango de IP
En este ejemplo, todos, incluido el anónimo, pueden enumerar el bloque y realizar cualquier operación Object en todos los objetos del bloque, siempre que las solicitudes provengan de un intervalo IP especificado (54.240.143.0 a 54.240.143.255, excepto 54.240.143.188). Se denegarán todas las demás operaciones y se denegarán todas las solicitudes que estén fuera del rango de IP.
{ "Statement": [ { "Sid": "AllowEveryoneReadWriteAccessIfInSourceIpRange", "Effect": "Allow", "Principal": "*", "Action": [ "s3:*Object", "s3:ListBucket" ], "Resource": ["arn:aws:s3:::examplebucket","arn:aws:s3:::examplebucket/*"], "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188"} } } ] }
Ejemplo: Permitir el acceso completo a un bloque exclusivamente por un usuario federado especificado
En este ejemplo, el usuario federado Alex tiene permiso de acceso completo al examplebucket
cucharón y sus objetos. A todos los demás usuarios, incluido ''root'', se les deniega explícitamente todas las operaciones. Tenga en cuenta, sin embargo, que ''root'' nunca se le deniegan los permisos para poner/obtener/DeleteBucketPolicy.
{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] }, { "Effect": "Deny", "NotPrincipal": { "AWS": "arn:aws:iam::95390887230002558202:federated-user/Alex" }, "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::examplebucket", "arn:aws:s3:::examplebucket/*" ] } ] }
Ejemplo: Permiso PutOverwriteObject
En este ejemplo, la Deny
Effect para PutOverwriteObject y DeleteObject garantiza que nadie puede sobrescribir ni eliminar los datos del objeto, los metadatos definidos por el usuario y el etiquetado de objetos S3.
{ "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:PutOverwriteObject", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::wormbucket/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::wormbucket" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::95390887230002558202:federated-group/SomeGroup" }, "Action": "s3:*", "Resource": "arn:aws:s3:::wormbucket/*" } ] }
Ejemplos de políticas de grupo S3
Las directivas de grupo especifican los permisos de acceso para el grupo al que está asociada la directiva. No existe Principal
elemento de la política, ya que está implícito. Las políticas de grupo se configuran con el administrador de inquilinos o la API.
Ejemplo: Establecer la directiva de grupo mediante el Administrador de inquilinos
Cuando utilice el Administrador de inquilinos para agregar o editar un grupo, puede seleccionar cómo desea crear la política de grupo que define qué miembros de permisos de acceso S3 de este grupo tendrán, de la siguiente manera:
-
Sin acceso S3: Opción predeterminada. Los usuarios de este grupo no tienen acceso a los recursos de S3, a menos que se conceda el acceso mediante una política de bloques. Si selecciona esta opción, de forma predeterminada, solo el usuario raíz tendrá acceso a recursos de S3.
-
Acceso de sólo lectura: Los usuarios de este grupo tienen acceso de sólo lectura a los recursos S3. Por ejemplo, los usuarios de este grupo pueden enumerar objetos y leer datos de objetos, metadatos y etiquetas. Cuando selecciona esta opción, la cadena JSON para una política de grupo de solo lectura aparece en el cuadro de texto. No puede editar esta cadena.
-
Acceso completo: Los usuarios de este grupo tienen acceso completo a los recursos S3, incluidos los bloques. Cuando selecciona esta opción, la cadena JSON para una política de grupo de acceso completo aparece en el cuadro de texto. No puede editar esta cadena.
-
Personalizado: A los usuarios del grupo se les conceden los permisos que especifique en el cuadro de texto.
En este ejemplo, sólo se permite a los miembros del grupo que enumeren y tengan acceso a su carpeta específica (prefijo de clave) en el bloque especificado.
Ejemplo: Permite el acceso total de grupos a todos los bloques
En este ejemplo, a todos los miembros del grupo se les permite el acceso completo a todos los segmentos que pertenecen a la cuenta de inquilino, a menos que la política de bloque lo deniegue explícitamente.
{ "Statement": [ { "Action": "s3:*", "Effect": "Allow", "Resource": "arn:aws:s3:::*" } ] }
Ejemplo: Permitir el acceso de solo lectura de grupo a todos los bloques
En este ejemplo, todos los miembros del grupo tienen acceso de solo lectura a recursos S3, a menos que la política de bloque lo deniegue explícitamente. Por ejemplo, los usuarios de este grupo pueden enumerar objetos y leer datos de objetos, metadatos y etiquetas.
{ "Statement": [ { "Sid": "AllowGroupReadOnlyAccess", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketVersions", "s3:GetObject", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::*" } ] }
Ejemplo: Permitir a los miembros del grupo el pleno acceso sólo a su «carpeta» en un cubo
En este ejemplo, sólo se permite a los miembros del grupo que enumeren y tengan acceso a su carpeta específica (prefijo de clave) en el bloque especificado. Tenga en cuenta que los permisos de acceso de otras políticas de grupo y la directiva de bloque deben tenerse en cuenta al determinar la privacidad de estas carpetas.
{ "Statement": [ { "Sid": "AllowListBucketOfASpecificUserPrefix", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::department-bucket", "Condition": { "StringLike": { "s3:prefix": "${aws:username}/*" } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect": "Allow", "Action": "s3:*Object", "Resource": "arn:aws:s3:::department-bucket/${aws:username}/*" } ] }