Ejemplos de política de bucket - Amazon Simple Storage Service

Ejemplos de política de bucket

Con las políticas de bucket de Amazon S3, puede proteger el acceso a los objetos de los buckets, de modo que solo los usuarios con los permisos adecuados puedan acceder a ellos. Incluso puede impedir que los usuarios autenticados sin los permisos adecuados accedan a los recursos de Amazon S3.

En esta sección se presentan ejemplos de casos de uso típicos para políticas de bucket. Estas políticas de ejemplo usan DOC-EXAMPLE-BUCKET como valor de recurso. Para probar estas políticas, sustituya user input placeholders por su propia información (como el nombre del bucket).

Para conceder o denegar permisos a un conjunto de objetos, puede usar caracteres comodín (*) en nombres de recurso de Amazon (ARN) y otros valores. Por ejemplo, puede controlar el acceso a grupos de objetos que empiezan por un prefijo o terminar con una extensión dada, como.html.

Para obtener más información sobre el lenguaje de la política de AWS Identity and Access Management (IAM), consulte Políticas y permisos en Amazon S3.

nota

Si utiliza la consola de Amazon S3 para probar los permisos, debe conceder permisos adicionales requeridos por la consola: s3:ListAllMyBuckets, s3:GetBucketLocation y s3:ListBucket. Para ver un ejemplo de un tutorial en el que se conceden permisos a usuarios y se prueban esos permisos utilizando la consola, consulte Controlar el acceso a un bucket con las políticas de usuario.

Recursos adicionales para crear políticas de bucket

Concesión de permisos de solo lectura a un usuario anónimo

Puede usar la configuración de su política para conceder acceso a usuarios públicos anónimos, lo que resulta útil si está configurando su bucket como un sitio web estático. Esto requiere que deshabilite el bloqueo del acceso público de su bucket. Para obtener más información acerca de cómo hacerlo y la política necesaria, consulte Configurar permisos para el acceso a sitios web. Para obtener información sobre cómo configurar políticas más restrictivas con el mismo propósito, consulte ¿Cómo puedo conceder acceso de lectura público a algunos de los objetos de mi bucket de Simple Storage Service (Amazon S3)?

De forma predeterminada, Amazon S3 bloquea el acceso público a su cuenta y sus buckets. Si desea utilizar un bucket para alojar un sitio web estático, puede utilizar estos pasos para editar la configuración de bloqueo de acceso público.

aviso

Antes de completar este paso, consulte Bloquear el acceso público a su almacenamiento de Amazon S3 para asegurarse de que comprende y acepta los riesgos que implica otorgar el acceso público. Cuando desactiva la configuración de acceso público de bloqueo para que el bucket sea público, cualquier usuario de Internet puede acceder al bucket. Le recomendamos que bloquee todo el acceso público a sus buckets.

  1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

  2. Elija el nombre del bucket que ha configurado como sitio web estático.

  3. Elija Permissions (Permisos).

  4. En Block public access (bucket settings) (Bloquear acceso público [configuración de bucket]), elija Edit (Editar).

  5. Desactive Block all public access (Bloquear todo el acceso público) y elija Save changes (Guardar cambios).

    aviso

    Antes de completar este paso, consulte Bloquear el acceso público a su almacenamiento de Amazon S3 para asegurarse de que comprende y acepta los riesgos que implica otorgar el acceso público. Cuando desactiva la configuración de acceso público de bloqueo para que el bucket sea público, cualquier usuario de Internet puede acceder al bucket. Le recomendamos que bloquee todo el acceso público a sus buckets.

    Amazon S3 desactiva la configuración del bloqueo de acceso público para su bucket. Para crear un sitio web público y estático, es posible que también tenga que editar la configuración del bloqueo de acceso público para su cuenta antes de agregar una política de bucket. Si la configuración de cuenta para el bloqueo de acceso público está activada actualmente, verá una nota en Block public access (bucket settings) [Bloqueo de acceso público (configuración de bucket)].

Requerir cifrado

Requerir SSE-KMS para todos los objetos escritos en un bucket

La política de ejemplo siguiente requiere que todos los objetos que se escriben en el bucket se cifren con el cifrado del lado del servidor mediante claves de AWS Key Management Service (AWS KMS) (SSE-KMS). Si el objeto no está cifrado con SSE-KMS, se denegará la solicitud.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMS", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "true" } } }] }

Requerir SSE-KMS con una AWS KMS key específica para todos los objetos escritos en un bucket

La siguiente política de ejemplo impide que se escriban objetos en el bucket si no están cifrados con SSE-KMS mediante un ID de clave KMS específico. Aunque los objetos se cifran con SSE-KMS mediante un cifrado predeterminado de encabezado por solicitud o de bucket, los objetos no se pueden escribir en el bucket si no se han cifrado con la clave KMS especificada. Asegúrese de sustituir el ARN de clave KMS que se usa en este ejemplo por su propio ARN de clave KMS.

{ "Version": "2012-10-17", "Id": "PutObjPolicy", "Statement": [{ "Sid": "DenyObjectsThatAreNotSSEKMSWithSpecificKey", "Principal": "*", "Effect": "Deny", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "ArnNotEqualsIfExists": { "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-2:111122223333:key/01234567-89ab-cdef-0123-456789abcdef" } } }] }

Administración de buckets mediante ACL predefinidas

Concesión de permisos a varias cuentas para cargar objetos o establecer ACL de objetos para el acceso público

En la siguiente política de ejemplo, se conceden los permisos s3:PutObject y s3:PutObjectAcl a varias Cuentas de AWS y se requiere que cualquier solicitud de estas operaciones debe incluir la lista de control de acceso (ACL) predefinida public-read. Para obtener más información, consulte Acciones de políticas de Amazon S3 y Ejemplos de claves de condición de Amazon S3.

aviso

La public-read ACL predefinida permite que cualquier persona del mundo vea los objetos del bucket. Tenga cuidado al conceder acceso anónimo a su bucket de Amazon S3 o al deshabilitar la configuración del bloqueo de acceso público. Al otorgar acceso anónimo, cualquier persona puede acceder a su bucket. Le recomendamos que no conceda nunca acceso anónimo a su bucket de Amazon S3 a menos que lo necesite específicamente, por ejemplo con alojamiento de sitios web estáticos. Si desea habilitar la configuración del acceso público de bloques para el alojamiento de sitios web estáticos, consulte el Tutorial: Configuración de un sitio web estático en Amazon S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPublicReadCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root" ] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }

Conceder permisos entre cuentas para cargar objetos al mismo tiempo que se garantiza que el propietario del bucket tenga el control total

En el siguiente ejemplo, se muestra cómo permitir que otra Cuenta de AWS cargue objetos en el bucket al tiempo que se asegura de que tiene el control total de los objetos cargados. Esta política otorga una Cuenta de AWS específica (111122223333) la capacidad de cargar objetos solo si esa cuenta incluye la ACL predefinida bucket-owner-full-control en la carga. La condición StringEquals en la política especifica la clave de condición s3:x-amz-acl para expresar el requisito de ACL predefinido. Para obtener más información, consulte Ejemplos de claves de condición de Amazon S3.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"111122223333"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Administración del acceso a objetos con etiquetado de objetos

Permitir a un usuario leer solo los objetos que tienen una clave y valor de etiqueta específicos

La siguiente política de permisos limita al usuario a leer solo los objetos que tengan la clave y el valor de la etiqueta environment: production. Esta política usa la clave de condición s3:ExistingObjectTag para especificar la clave y el valor de etiqueta.

{ "Version":"2012-10-17", "Statement":[ { "Principal":{ "AWS":"arn:aws:iam::111122223333:role/JohnDoe" }, "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringEquals":{ "s3:ExistingObjectTag/environment":"production" } } } ] }

Restringir las claves de etiqueta de objetos que los usuarios pueden agregar

La política de ejemplo siguiente concede un permiso de usuario para realizar la acción s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La condición usa la clave de condición s3:RequestObjectTagKeys para especificar las claves de etiqueta permitidas, como Owner o CreationDate. Para obtener más información, consulte Creación de una condición que pruebe valores de varias claves en la Guía para usuarios de IAM.

La política garantiza que cada clave de etiqueta especificada en la solicitud sea una clave de etiqueta autorizada. El calificador ForAnyValue de la condición garantiza que al menos una de las claves especificadas estará presente en la solicitud.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:role/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [ "Owner", "CreationDate" ] } } } ] }

Requerir una clave y un valor de etiqueta específica al permitir a los usuarios agregar etiquetas de objetos

La política de ejemplo siguiente concede un permiso de usuario para realizar la acción s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La condición requiere que el usuario incluya una clave de etiqueta específica (como Project) con el valor establecido en X.

{ "Version": "2012-10-17", "Statement": [ {"Principal":{"AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObjectTagging" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X" } } } ] }

Permitir a un usuario agregar objetos solo con una clave y valor de etiqueta de objetos específicos

La política de ejemplo siguiente concede un permiso de usuario para realizar la acción s3:PutObject, de modo que pueda agregar objetos a un bucket. Sin embargo, la instrucción Condition restringe las claves de etiqueta y los valores permitidos en los objetos cargados. En este ejemplo, el usuario solo puede agregar al bucket objetos que tengan la clave de etiqueta específica (Department) con el valor establecido en Finance.

{ "Version": "2012-10-17", "Statement": [{ "Principal":{ "AWS":[ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringEquals": { "s3:RequestObjectTag/Department": "Finance" } } }] }

Administración del acceso a objetos mediante claves de condición globales

Las claves de condición globales son claves de contexto de condición con un prefijo aws. Servicios de AWS pueden admitir claves de condición globales o proporcionar claves específicas del servicio que incluyan el prefijo de servicio. Puede utilizar el elemento Condition de una política JSON para comparar las claves de una solicitud con los valores de claves que especifique en la política.

Restringir el acceso solo a entregas de registros de acceso al servidor de Amazon S3

En la política de bucket de ejemplo siguiente, la clave de condición global aws:SourceArn se utiliza para comparar el Nombre de recurso de Amazon (ARN) del recurso, que realiza una solicitud de servicio a servicio con el ARN especificado en la política. La clave de condición global aws:SourceArn se usa para evitar que el servicio de Amazon S3 se utilice como un sustituto confuso durante las transacciones entre servicios. Solo el servicio de Amazon S3 tiene permiso para agregar objetos al bucket de Amazon S3.

Esta política de bucket de ejemplo concede permisos s3:PutObject solo a la entidad principal del servicio de registro (logging.s3.amazonaws.com).

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjectS3ServerAccessLogsPolicy", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "StringEquals": { "aws:SourceAccount": "111111111111" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::EXAMPLE-SOURCE-BUCKET" } } }, { "Sid": "RestrictToS3ServerAccessLogs", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET-logs/*", "Condition": { "ForAllValues:StringNotEquals": { "aws:PrincipalServiceNamesList": "logging.s3.amazonaws.com" } } } ] }

Permitir el acceso solo a la organización

Si desea exigir que todas las entidades principales de IAM que accedan a un recurso provengan de una Cuenta de AWS en la organización (incluida la cuenta de administración de AWS Organizations), puede utilizar la clave de condición global aws:PrincipalOrgID.

Para conceder o restringir este tipo de acceso, defina la condición aws:PrincipalOrgID y establezca el valor del ID de la organización en la política de bucket. El ID de la organización se usa para controlar el acceso al bucket. Al usar la condición aws:PrincipalOrgID, los permisos de la política de bucket también se aplican a todas las cuentas nuevas que se agreguen a la organización.

Este es un ejemplo de política de bucket basada en recursos que puede utilizar para conceder a determinadas entidades principales de IAM de la organización acceso directo al bucket. Al agregar la clave de condición global aws:PrincipalOrgID a la política de bucket, ahora es necesario que la cuenta de la entidad principal esté en la organización para poder acceder al recurso. Aunque especifique accidentalmente una cuenta incorrecta al conceder el acceso, la clave de condición global aws:PrincipalOrgID actúa como una protección adicional. Cuando esta clave global se utiliza en una política, evita que todas las entidades principales de fuera de la organización especificada accedan al bucket de S3. Solo las entidades principales de las cuentas de la organización mostradas pueden obtener acceso al recurso.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowGetObject", "Principal": { "AWS": "*" }, "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": ["o-aa111bb222"] } } }] }

Administración del acceso en función de direcciones IP específicas

Restringir el acceso a direcciones IP específicas

En el siguiente ejemplo, se deniega a todos los usuarios que realicen operaciones de Amazon S3 en objetos en los buckets especificados, a menos que la solicitud se origine en el rango de direcciones IP especificado.

nota

Al restringir el acceso a una dirección IP concreta, asegúrese de especificar también qué puntos de conexión de VPC, direcciones IP de origen de VPC o direcciones IP externas pueden acceder al bucket de S3. De lo contrario, podría perder el acceso al bucket si su política deniega a todos los usuarios realizar cualquier operación de S3 en los objetos del bucket sin contar con los permisos adecuados.

Esta instrucción Condition de política identifica a 192.0.2.0/24 como el rango de direcciones IP permitidas del protocolo de Internet versión 4 (IPv4).

El bloque Condition utiliza la condición NotIpAddress y la clave de condición aws:SourceIp, que es una clave de condición general de AWS. La clave de condición aws:SourceIp solo puede utilizarse para rangos de direcciones IP públicas. Para obtener más información acerca de las claves de condición, consulte Ejemplos de claves de condición de Amazon S3. Los valores de IPv4 aws:SourceIp utilizan la notación CIDR estándar. Para obtener más información, consulte Referencia de los elementos de las políticas de JSON de IAM en la guía del usuario de IAM.

aviso

Antes de utilizar esta política, reemplace el rango de direcciones IP 192.0.2.0/24 en este ejemplo con un valor adecuado para su caso de uso. De lo contrario, perderá la capacidad de acceder a su bucket.

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "192.0.2.0/24" } } } ] }

Permitir direcciones IPv4 e IPv6

Cuando empiece a usar direcciones IPv6, le recomendamos que actualice todas las políticas de la organización con los rangos de direcciones IPv6 además de los rangos de direcciones IPv4 existentes. Esto ayudará a garantizar que las políticas sigan funcionando a medida que realice la transición a IPv6.

En el siguiente ejemplo de política de bucket se muestra cómo combinar los rangos de dirección IPv4 e IPv6 para incluir todas las direcciones IP válidas de la organización. La política de ejemplo permite el acceso a las direcciones IP de ejemplo 192.0.2.1 y 2001:DB8:1234:5678::1, y deniega el acceso a las direcciones 203.0.113.1 y 2001:DB8:1234:5678:ABCD::1.

La clave de condición aws:SourceIp solo puede utilizarse para rangos de direcciones IP públicas. Los valores de IPv6 para aws:SourceIp deben estar en formato CIDR estándar. Para IPv6, aceptamos el uso de :: para representar un rango de 0, (por ejemplo, 2001:DB8:1234:5678::/64). Para obtener más información, consulte Operadores de condición de dirección IP en la guía del usuario de IAM.

aviso

Sustituya los intervalos de direcciones IP del ejemplo con valores adecuados para su caso de uso antes de utilizar esta política. De lo contrario, puede perder la capacidad de acceder a su bucket.

{ "Id": "PolicyId2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPmix", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "192.0.2.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

Administración del acceso en función de solicitudes HTTP o HTTPS

Restringir el acceso solo a las solicitudes HTTPS

Si quiere evitar que los posibles atacantes manipulen el tráfico de la red, puede usar HTTPS (TLS) para permitir solo conexiones cifradas y, al mismo tiempo, restringir el acceso de las solicitudes HTTP al bucket. Para determinar si la solicitud es HTTP o HTTPS, utilice la clave de condición global aws:SecureTransport en la política de bucket de S3. La clave de condición aws:SecureTransport comprueba si una solicitud se envió mediante HTTP.

Si una solicitud devuelve true, significa que la solicitud se envió a través de HTTPS. Si la solicitud devuelve false, significa que la solicitud se envió a través de HTTP. A continuación, puede permitir o denegar el acceso al bucket en función del esquema de solicitud deseado.

En el ejemplo siguiente, la política de bucket deniega explícitamente las solicitudes HTTP.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "RestrictToTLSRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" }] }

Restringir el acceso a un HTTP referer específico

Suponga que tiene un sitio web con el nombre de dominio www.example.com o example.com con enlaces a fotografías y vídeos almacenados en el bucket denominado DOC-EXAMPLE-BUCKET. De forma predeterminada, todos los recursos de Amazon S3 son privados; por lo tanto, solo la Cuenta de AWS que creó los recursos puede acceder a ellos.

Para permitir el acceso de lectura a estos objetos desde el sitio web, puede agregar una política de bucket que conceda el permiso s3:GetObject con una condición de la solicitud GET que debe proceder de páginas web específicas. La política siguiente restringe las solicitudes mediante la condición StringLike con la clave de condición aws:Referer.

{ "Version":"2012-10-17", "Id":"HTTP referer policy example", "Statement":[ { "Sid":"Allow only GET requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

Asegúrese de que los navegadores que utiliza incluyan el encabezado HTTP referer en la solicitud.

aviso

Le recomendamos que actúe con precaución cuando utilice la clave de condición de aws:Referer. Es peligroso incluir un valor de encabezado de referencia HTTP conocido públicamente. Las partes no autorizadas podrían utilizar navegadores personalizados o modificados para proporcionar cualquier valor aws:Referer que eligieran. Por lo tanto, no utilice aws:Referer para evitar que las partes no autorizadas realicen solicitudes de AWS de forma directa.

La clave de condición de aws:Referer se ofrece solo para que los clientes puedan proteger su contenido digital, como el contenido almacenado en Amazon S3, para evitar las referencias en sitios de terceros no autorizados. Para obtener más información, consulte aws:Referer en la Guía del usuario de IAM.

Administración del acceso de los usuarios a carpetas específicas

Conceder acceso a los usuarios a carpetas específicas

Suponga que está intentando conceder a los usuarios acceso a una carpeta específica. Si el usuario de IAM y el bucket de S3 pertenecen a la misma Cuenta de AWS, puede utilizar una política de IAM para conceder al usuario acceso a una carpeta de bucket específica. Con este enfoque, no es necesario actualizar la política de bucket para conceder el acceso. Puede agregar la política de IAM a un rol de IAM al que puedan cambiarse varios usuarios.

Si la identidad de IAM y el bucket de S3 pertenecen a Cuentas de AWS diferentes, debe conceder acceso entre cuentas tanto en la política de IAM como en la política de bucket. Para obtener más información sobre cómo conceder acceso entre cuentas, consulte Propietario del bucket que concede permisos de bucket entre cuentas.

La política de bucket de ejemplo siguiente concede a JohnDoe acceso completo a la consola solo a su carpeta (home/JohnDoe/). Al crear una carpeta home y conceder los permisos adecuados a los usuarios, puede hacer que varios usuarios compartan un solo bucket. Esta política consta de tres instrucciones Allow:

  • AllowRootAndHomeListingOfCompanyBucket: permite al usuario (JohnDoe) mostrar los objetos en el nivel raíz del bucket DOC-EXAMPLE-BUCKET y en la carpeta home. Esta instrucción también permite al usuario buscar el prefijo home/ mediante la consola.

  • AllowListingOfUserFolder: permite al usuario (JohnDoe) mostrar todos los objetos de la carpeta home/JohnDoe/ y cualquier subcarpeta.

  • AllowAllS3ActionsInUserFolder: permite al usuario realizar todas las acciones de Amazon S3 mediante la concesión de los permisos Read, Write y Delete. Los permisos están limitados a la carpeta principal del propietario del bucket.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringEquals": { "s3:prefix": ["", "home/", "home/JohnDoe"], "s3:delimiter": ["/"] } } }, { "Sid": "AllowListingOfUserFolder", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"], "Condition": { "StringLike": { "s3:prefix": ["home/JohnDoe/*"] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/JohnDoe" ] }, "Action": ["s3:*"], "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/JohnDoe/*"] } ] }

Administración del acceso para los registros de acceso

Conceder acceso al equilibrador de carga de aplicación para habilitar los registros de acceso

Al habilitar los registros de acceso del equilibrador de carga de aplicación, debe especificar el nombre del bucket de S3 donde el equilibrador de carga almacenará los registros. El bucket debe tener una política asociada que conceda permiso a Elastic Load Balancing para escribir en el bucket.

En el siguiente ejemplo, la política de bucket concede permiso a Elastic Load Balancing (ELB) para escribir los registros de acceso en el bucket:

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "AWS": "arn:aws:iam::elb-account-id:root" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/AWSLogs/111122223333/*" } ] }
nota

Asegúrese de sustituir elb-account-id por el ID de Cuenta de AWS para Elastic Load Balancing para la Región de AWS. Para ver la lista de regiones de Elastic Load Balancing, consulte Adjuntar una política al bucket de Amazon S3 en la Guía del usuario de Elastic Load Balancing.

Si la Región de AWS no aparece en la lista de regiones de Elastic Load Balancing compatibles, utilice la siguiente política, que concede permisos al servicio de entrega de registros especificado.

{ "Version": "2012-10-17", "Statement": [ { "Principal": { "Service": "logdelivery.elasticloadbalancing.amazonaws.com" }, "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/prefix/AWSLogs/111122223333/*" } ] }

A continuación, asegúrese de configurar los registros de acceso de Elastic Load Balancing habilitándolos. Puede verificar los permisos del bucket creando un archivo de prueba.

Administración del acceso a una OAI de Amazon CloudFront

Conceder permiso a una OAI de Amazon CloudFront

En el siguiente ejemplo de política de buckets, se concede un permiso de identidad de acceso de origen (OAI) de CloudFront para obtener (leer) todos los objetos del bucket de S3. Puede utilizar un OAI de CloudFront para permitir a los usuarios acceder a objetos del bucket a través de CloudFront, pero no directamente a través de Amazon S3. Para obtener más información, consulte Restricción del acceso a contenido de Amazon S3 utilizando una identidad de acceso de origen en la guía para desarrolladores de Amazon CloudFront.

La política siguiente utiliza el ID de la OAI como Principal de la política. Para obtener más información sobre el uso de políticas de bucket de S3 para conceder acceso a una OAI de CloudFront, consulte Migración de la identidad de acceso de origen (OAI) al control de acceso de origen (OAC) en la Guía para desarrolladores de Amazon CloudFront.

Para usar este ejemplo:

  • Reemplace EH1HDMB1FH2TC por el ID de la OAI. Para buscar el ID de la OAI, consulte la Origin Access Identity page (Página de identidad de acceso de origen) en la consola de CloudFront o utilice ListCloudFrontOriginAccessIdentities en la API de CloudFront.

  • Reemplace DOC-EXAMPLE-BUCKET con el nombre de su bucket.

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Administración del acceso para la Lente de almacenamiento de Amazon S3

Conceder permisos para Lente de almacenamiento de Amazon S3

Lente de almacenamiento de S3 agrega las métricas y muestra la información en la sección Account snapshot (Instantánea de la cuenta) en la página Buckets de la consola de Amazon S3. S3 Storage Lens también proporciona un panel interactivo que puede utilizar para visualizar información y tendencias, marcar valores atípicos y recibir recomendaciones para optimizar los costes de almacenamiento y aplicar las prácticas recomendadas de protección de datos. El panel tiene opciones de desglose para generar y visualizar información en el nivel de la organización, la cuenta, la Región de AWS, la clase de almacenamiento, el bucket, el prefijo o el grupo de Lente de almacenamiento. También puede enviar una exportación de métricas diaria en formato CSV o Parquet a un bucket de S3.

Lente de almacenamiento de S3 puede exportar las métricas de uso de almacenamiento agregado a un bucket de Amazon S3 para un análisis posterior. El bucket en el que S3 Storage Lens coloca sus exportaciones de métricas se conoce como el bucket de destino. Al configurar la exportación de métricas de S3 Storage Lens, debe tener una política de buckets para el bucket de destino. Para obtener más información, consulte Evaluación de la actividad y el uso de almacenamiento con Amazon S3 Storage Lens.

En el siguiente ejemplo de política de bucket, se concede a Amazon S3 permiso para escribir objetos (solicitudes PUT) en un bucket de destino. Usted utiliza una política de bucket como esta en el bucket de destino cuando configura una exportación de métricas de S3 Storage Lens.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": "storage-lens.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3:region-code:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

Cuando configure una exportación de métricas a nivel de organización de Lente de almacenamiento de S3, utilice la siguiente modificación de la instrucción Resource de la política de buckets anterior.

"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",

Administración de permisos para inventario de S3, análisis de S3 e informes de inventario de S3

Concesión de permisos para el inventario de S3 y el análisis de S3

El inventario de S3 crea listas de los objetos en un bucket y la exportación de análisis de clase de almacenamiento de análisis de S3 crea archivos de salida de los datos utilizados en los análisis. El bucket para el que el inventario enumera los objetos se denomina bucket de origen. El bucket donde se escribe el archivo de inventario y el bucket donde se escribe se denomina bucket de destino. Al configurar un inventario o una exportación de análisis, debe crear una política de buckets para el bucket de destino. Para obtener más información, consulte Inventario de Amazon S3 y Análisis de Amazon S3: análisis de clases de almacenamiento.

En el siguiente ejemplo de política de bucket, se concede a Amazon S3 permiso para escribir objetos (solicitudes PUT) de la cuenta para el bucket de origen en el bucket de destino. Usted utiliza una política de bucket como esta en el bucket de destino cuando configura el inventario de S3 y la exportación de análisis de S3.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET" }, "StringEquals": { "aws:SourceAccount": "111122223333", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Control de la creación de la configuración del informe de inventario de S3

Inventario de Amazon S3 crea listas de los objetos de un bucket de S3 y los metadatos para cada objeto. El permiso s3:PutInventoryConfiguration permite a un usuario crear una configuración de inventario que incluya todos los campos de metadatos de objeto disponibles de manera predeterminada y especificar el bucket de destino para almacenar el inventario. Un usuario con acceso de lectura a los objetos del bucket de destino puede acceder a todos los campos de metadatos de objetos que están disponibles en el informe de inventario. Para obtener más información acerca de los campos de metadatos disponibles en el inventario de S3, consulte Lista de Amazon S3 Inventory.

Para impedir que un usuario configure un informe de Inventario de S3, retire el permiso s3:PutInventoryConfiguration al usuario.

Algunos campos de metadatos de objetos en las configuraciones de los informes de Inventario de S3 son opcionales, lo que significa que están disponibles de manera predeterminada pero pueden restringirse cuando se concede el permiso s3:PutInventoryConfiguration a un usuario. Puede controlar si los usuarios pueden incluir estos campos de metadatos opcionales en sus informes mediante la clave de condición s3:InventoryAccessibleOptionalFields. Para obtener una lista de los campos de metadatos opcionales disponibles en Inventario de S3, consulte OptionalFields en la Referencia de la API de Amazon Simple Storage Service.

Para conceder a un usuario permiso para crear una configuración de inventario con campos de metadatos opcionales específicos, utilice la clave de condición s3:InventoryAccessibleOptionalFields para delimitar las condiciones de su política de buckets.

En el siguiente ejemplo de política, se otorga a un usuario (Ana) permiso para crear una configuración de inventario de forma condicional. En la condición ForAllValues:StringEquals de la política, se usa la clave de condición s3:InventoryAccessibleOptionalFields para especificar los dos campos de metadatos opcionales permitidos, es decir, Size y StorageClass. Por lo tanto, cuando Ana crea una configuración de inventario, los únicos campos de metadatos opcionales que puede incluir son Size y StorageClass.

{ "Id": "InventoryConfigPolicy", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreationConditionally", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAllValues:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "Size", "StorageClass" ] } } } ] }

Para evitar que un usuario configure un informe de Inventario de S3 que incluya campos de metadatos opcionales específicos, añada una instrucción Deny explícita a la política de buckets para el bucket de origen. En el siguiente ejemplo de política de buckets, se impide al usuario Ana crear una configuración de inventario en el bucket de origen DOC-EXAMPLE-SOURCE-BUCKET que incluya los campos de metadatos opcionales ObjectAccessControlList o ObjectOwner. El usuario Ana aún puede crear una configuración de inventario con otros campos de metadatos opcionales.

{ "Id": "InventoryConfigSomeFields", "Version": "2012-10-17", "Statement": [{ "Sid": "AllowInventoryCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", }, { "Sid": "DenyCertainInventoryFieldCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Ana" }, "Action": "s3:PutInventoryConfiguration", "Resource": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET", "Condition": { "ForAnyValue:StringEquals": { "s3:InventoryAccessibleOptionalFields": [ "ObjectOwner", "ObjectAccessControlList" ] } } } ] }
nota

El uso de la clave de condición s3:InventoryAccessibleOptionalFields en las políticas de buckets no afecta a la entrega de informes de inventario basados en las configuraciones de inventario existentes.

importante

Se recomienda usar ForAllValues con un efecto Allow o ForAnyValue con un efecto Deny, tal y como se muestra en los ejemplos anteriores.

No utilice ForAllValues con un efecto Deny ni ForAnyValue con un efecto Allow, ya que estas combinaciones pueden ser demasiado restrictivas y bloquear la eliminación de la configuración del inventario.

Para obtener más información sobre los operadores de conjuntos de condiciones ForAllValues y ForAnyValue, consulte Claves de contexto multivalor en la Guía del usuario de IAM.

Exigir MFA

Amazon S3 admite el acceso de API protegido por MFA, una característica que puede exigir aplicar Multi-Factor Authentication (MFA) para acceder a sus recursos de Amazon S3. La autenticación multifactor proporciona un nivel de seguridad adicional que puede aplicar a su entorno de AWS. MFA es una característica de seguridad que requiere que los usuarios demuestren una posesión física de un dispositivo de MFA facilitando un código MFA válido. Para obtener más información, consulte autenticación multifactor de AWS. Puede solicitar MFA para cualquier solicitud de acceso a sus recursos de Amazon S3.

Para implementar el requisito de MFA, utilice la clave de condición aws:MultiFactorAuthAge en una política de bucket. Los usuarios de IAM pueden acceder a los recursos de Amazon S3 con credenciales temporales emitidas por AWS Security Token Service (AWS STS). Usted facilita el código de MFA al realizar la solicitud al AWS STS.

Cuando Amazon S3 recibe una solicitud con autenticación multifactor, la clave de condición aws:MultiFactorAuthAge proporciona un valor numérico que indica el tiempo que transcurrió (en segundos) desde que se creó la credencial temporal. Si la credencial temporal provista en la solicitud no se creó utilizando un dispositivo de MFA, este valor de clave es nulo (no está presente). En una política de bucket, puede añadir una condición para revisar este valor, como se muestra en el siguiente ejemplo.

Esta política de ejemplo deniega cualquier operación de Amazon S3 en la carpeta /taxdocuments del bucket DOC-EXAMPLE-BUCKET si la solicitud no se autentica utilizando MFA. Para obtener más información sobre MFA, consulte Uso de autenticación multifactor (MFA) en AWS en la Guía del usuario de IAM.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

La condición Null en el bloque Condition se evalúa como true si el valor de clave de condición aws:MultiFactorAuthAge es nulo, lo que indica que las credenciales de seguridad temporales en la solicitud se crearon sin un dispositivo de MFA.

La siguiente política de bucket es una extensión de la política de bucket anterior. Incluye dos instrucciones de política. Una instrucción permite el permiso s3:GetObject en un bucket (DOC-EXAMPLE-BUCKET) para todo el mundo. Otra instrucción limita el acceso a la carpeta DOC-EXAMPLE-BUCKET/taxdocuments en el bucket mediante la solicitud de la MFA.

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

Puede utilizar de forma opcional una condición numérica para limitar la duración de la validez de la clave aws:MultiFactorAuthAge. La duración que especifique con la clave aws:MultiFactorAuthAge es independiente de la duración de la credencial de seguridad temporal que se utiliza en la autenticación de la solicitud.

Por ejemplo, la siguiente política de bucket, además de exigir la autenticación MFA, también verifica el tiempo que transcurrió desde que se creó la sesión temporal. La política deniega cualquier operación si el valor de clave aws:MultiFactorAuthAge indica que la sesión temporal se creó hace más de una hora (3600 segundos).

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }