Control de acceso de S3: políticas de bucket y ACL
Escriba políticas de bucket, compárelas con las ACL y configure los ajustes de bloqueo del acceso público para un alojamiento seguro.
Control de acceso de S3: políticas de bucket y ACL es una lección gratuita de Cloud & IT Cert Prep en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cloud & IT Cert Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.
Descripción general del control de acceso de S3
S3 ofrece varios mecanismos de control de acceso que se solapan: políticas de IAM (basadas en identidades, controlan lo que pueden hacer los principales), políticas de buckets (políticas JSON basadas en recursos aplicadas al bucket), listas de control de acceso (ACL) (concesiones heredadas por objeto o bucket) y S3 Block Public Access (anulación a nivel de cuenta o bucket que bloquea cualquier acceso público independientemente de las demás políticas). Actualmente, para la mayoría de los casos de uso, el enfoque recomendado consiste en combinar políticas de buckets con Block Public Access; las ACL se consideran heredadas.
Políticas de bucket: JSON basado en recursos
Una política de bucket es un documento JSON asociado directamente al bucket de S3. Especifica qué principals (usuarios y roles de IAM, cuentas de AWS, servicios o el público) pueden realizar qué acciones en qué recursos (el bucket o prefijos de claves específicos). Las políticas de bucket permiten el acceso entre cuentas sin necesidad de roles de IAM: puede conceder directamente en la política del bucket a un rol de IAM de otra cuenta de AWS acceso de lectura a objetos específicos. Cada bucket puede tener una política y el tamaño máximo es de 20 KB.
# Allow a specific IAM role from another account to read objects
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::999999999999:role/PartnerReadRole'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/partner-data/*'
}]
}Hacer que los objetos sean legibles públicamente
Para servir contenido público (por ejemplo, recursos de un sitio web estático o conjuntos de datos públicos), puede hacer que los objetos sean legibles públicamente mediante una política de bucket. Primero, deshabilite Block Public Access en el nivel del bucket y, después, añada una instrucción de política de bucket con Principal: '*' y Action: s3:GetObject. Es necesario combinar la desactivación de la configuración Block Public Access con el permiso Allow de la política del bucket; habilitar solo uno de los dos no funcionará. Defina siempre el alcance de Resource para un prefijo específico en lugar de para todo el bucket, salvo que desee intencionadamente hacer públicos todos los objetos.
# Public read policy for static website assets
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': '*',
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-website-bucket/public/*'
}]
}Configuración de S3 Block Public Access
S3 Block Public Access es una protección con cuatro configuraciones que prevalecen sobre las políticas de bucket y las ACL: BlockPublicAcls (rechaza las solicitudes para establecer ACL públicas), IgnorePublicAcls (ignora las ACL públicas existentes), BlockPublicPolicy (rechaza las políticas de bucket que conceden acceso público) y RestrictPublicBuckets (restringe el acceso en función de una política pública). Las cuatro configuraciones están habilitadas de forma predeterminada. También puede habilitar Block Public Access en el nivel de la cuenta, lo que lo bloquea para todos los buckets independientemente de la configuración individual de cada uno; es ideal para evitar la exposición pública accidental.
# Enable all Block Public Access settings on a bucket
aws s3api put-public-access-block \
--bucket my-private-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=trueListas de control de acceso (ACL): legado
Las ACL de S3 son el mecanismo de control de acceso original y son anteriores a IAM. Una ACL concede permisos predefinidos (READ, WRITE, FULL_CONTROL) a cuentas de AWS o grupos predefinidos (todos los usuarios, usuarios de AWS autenticados y entrega de registros). Las ACL se pueden aplicar en el nivel del bucket o de cada objeto. Actualmente, AWS recomienda deshabilitar las ACL (la configuración de S3 «Bucket Owner Enforced» hace que el propietario del bucket sea el propietario de todos los objetos y deshabilita las ACL) y utilizar políticas de bucket e IAM. Las ACL todavía se evalúan en el examen SAA-C03 como concepto heredado.
# Disable ACLs by setting ownership to BucketOwnerEnforced
aws s3api put-bucket-ownership-controls \
--bucket my-bucket \
--ownership-controls '{"Rules":[{"ObjectOwnership":"BucketOwnerEnforced"}]}'Control de acceso al origen para CloudFront
Al servir contenido de S3 mediante CloudFront, desea que el bucket sea privado, pero que CloudFront pueda obtener los objetos. Use Origin Access Control (OAC), el reemplazo moderno de Origin Access Identity (OAI). OAC crea una identidad de CloudFront a la que concede el permiso s3:GetObject en la política del bucket, mientras mantiene habilitado Block Public Access. De este modo, los usuarios deben pasar por CloudFront (para el almacenamiento en caché, WAF y HTTPS) y no pueden acceder directamente al bucket; este es un patrón habitual de arquitectura segura en el examen SAA-C03.
# Bucket policy granting CloudFront OAC access
{
'Version': '2012-10-17',
'Statement': [{
'Effect': 'Allow',
'Principal': {
'Service': 'cloudfront.amazonaws.com'
},
'Action': 's3:GetObject',
'Resource': 'arn:aws:s3:::my-bucket/*',
'Condition': {
'StringEquals': {
'AWS:SourceArn': 'arn:aws:cloudfront::123456789012:distribution/EDFDVBD6EXAMPLE'
}
}
}]
}Acceso entre cuentas a S3
Hay dos formas de conceder a otra cuenta de AWS acceso a su bucket de S3. Opción 1 — Política de bucket: añada una instrucción con el ARN de la cuenta externa como Principal y las acciones de S3 deseadas. Los usuarios y roles de IAM de la cuenta externa siguen necesitando permisos de IAM para llamar a S3, y la política del bucket también debe concederles el permiso Allow. Opción 2 — Rol de IAM con política de confianza: cree un rol en su cuenta en el que confíe la cuenta externa; las identidades de la cuenta externa asumen el rol y obtienen los permisos del bucket. La política de bucket es más sencilla para escenarios de solo lectura; los roles son mejores para el acceso operativo.
Configuración de CORS para aplicaciones web
Cross-Origin Resource Sharing (CORS) permite que una aplicación web alojada en un dominio realice solicitudes fetch de JavaScript a un bucket de S3 situado en otro dominio. Sin una configuración de CORS, los navegadores bloquean estas solicitudes por motivos de seguridad. Debe añadir al bucket una configuración de CORS que especifique los orígenes, métodos HTTP y encabezados permitidos. CORS suele ser necesario cuando una SPA de React alojada en example.com obtiene imágenes o archivos directamente de la URL de un bucket de S3.
# Apply a CORS configuration
aws s3api put-bucket-cors \
--bucket my-website-bucket \
--cors-configuration '{"CORSRules":[{"AllowedOrigins":["https://example.com"],"AllowedMethods":["GET"],"AllowedHeaders":["*"],"MaxAgeSeconds":3600}]}'URL prefirmadas para acceso temporal
Una URL prefirmada concede acceso durante un tiempo limitado a un objeto privado de S3 (para GET o PUT) sin cambiar ningún permiso del bucket ni del objeto. La URL incluye sus credenciales y un tiempo de expiración; cualquiera que tenga la URL puede acceder al objeto hasta que caduque. Use URL prefirmadas para permitir que los usuarios autenticados de su aplicación descarguen archivos privados, permitir que los clientes carguen archivos directamente en S3 sin pasar por su backend o compartir informes temporalmente. La expiración puede variar entre 1 segundo y 7 días (al usar credenciales temporales de STS, el máximo es de 12 horas).
# Generate a pre-signed GET URL valid for 24 hours
aws s3 presign s3://my-private-bucket/reports/invoice.pdf \
--expires-in 86400
# Generate a pre-signed PUT URL (for client uploads)
aws s3 presign s3://my-private-bucket/uploads/new-file.pdf \
--expires-in 3600 \
--method PUTCondiciones de la política del bucket para la seguridad
Use condiciones en la política del bucket para añadir seguridad basada en el contexto. Patrones habituales: aws:SourceIp restringe el acceso a rangos de IP específicos (por ejemplo, puntos de enlace de VPC o redes corporativas); aws:SecureTransport: true obliga a usar HTTPS al denegar las solicitudes mediante HTTP (una práctica recomendada para todos los buckets que almacenan datos confidenciales); s3:x-amz-server-side-encryption garantiza que los objetos se carguen con cifrado del lado del servidor; y aws:PrincipalOrgID restringe el acceso a principals de su organización de AWS, lo que evita la extracción de datos hacia cuentas externas.
# Deny non-HTTPS access to the bucket
{
'Effect': 'Deny',
'Principal': '*',
'Action': 's3:*',
'Resource': [
'arn:aws:s3:::my-secure-bucket',
'arn:aws:s3:::my-secure-bucket/*'
],
'Condition': {
'Bool': {'aws:SecureTransport': 'false'}
}
}Puntos de enlace de VPC de S3 para acceso privado
De forma predeterminada, las instancias de EC2 en una subred privada acceden a S3 a través de Internet (mediante una puerta de enlace NAT), lo que genera costes de NAT y expone el tráfico a la Internet pública. Los S3 Gateway Endpoints proporcionan conectividad privada a S3 desde una VPC sin una puerta de enlace NAT y sin costes adicionales. Debe añadir el Gateway Endpoint a la tabla de enrutamiento; el tráfico hacia S3 se enruta automáticamente a través de la red privada de AWS. También puede añadir condiciones a la política del bucket mediante aws:SourceVpce para restringir el acceso únicamente a las solicitudes que pasen por el punto de enlace.
# Create an S3 gateway endpoint and associate with route tables
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--service-name com.amazonaws.us-east-1.s3 \
--route-table-ids rtb-12345678Comprobación rápida
Compruebe su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.
Resumen de la lección
En esta lección ha aprendido que las políticas de bucket son documentos JSON basados en recursos que controlan el acceso entre cuentas y de los servicios a S3, que S3 Block Public Access es una protección que evita la exposición pública accidental y que las URL prefirmadas, los puntos de enlace de VPC y las configuraciones de CORS permiten abordar de forma segura patrones de acceso específicos. A continuación, veremos el versionado de S3, MFA Delete y la replicación.
Preguntas frecuentes
¿La lección «Control de acceso de S3: políticas de bucket y ACL» es gratis?
Sí — el texto completo de «Control de acceso de S3: políticas de bucket y ACL» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cloud & IT Cert Prep, actualiza a CoddyKit PRO. El curso de Cloud & IT Cert Prep incluye 4 lecciones en total.
¿Qué aprenderé en «Control de acceso de S3: políticas de bucket y ACL»?
Escriba políticas de bucket, compárelas con las ACL y configure los ajustes de bloqueo del acceso público para un alojamiento seguro. Practicas Cloud & IT Cert Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Cloud & IT Cert Prep?
No se requiere experiencia previa. Cloud & IT Cert Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Control de acceso de S3: políticas de bucket y ACL»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Cloud & IT Cert Prep?
Sí. Cada lección de Cloud & IT Cert Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Buckets, objetos y regiones
- Control de acceso de S3: políticas de bucket y ACL
- Versionado, MFA Delete y replicación
- Clases de almacenamiento y políticas de ciclo de vida