Ejemplos de políticas de bucket que utilizan claves de condición
Puede utilizar el lenguaje de la política de acceso para especificar condiciones al conceder permisos. Puede utilizar el elemento opcional Condition
o el bloque de Condition
para especificar condiciones para cuando una política está en vigor.
Para obtener información sobre las políticas que utilizan claves de condición de Amazon S3 para operaciones de objetos y bucket, consulte los siguientes ejemplos. Para obtener más información acerca de las claves de condición, consulte Claves de condición de políticas para Amazon S3. Para obtener una lista completa de las acciones, claves de condición y recursos de Amazon S3 que puede especificar en las políticas, consulte Actions, resources, and condition keys for Amazon S3 en la Referencia de autorización de servicios.
Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte Permisos necesarios para las operaciones de la API de Amazon S3.
Ejemplos: claves de condición de Amazon S3 para operaciones con objetos
Los siguientes ejemplos muestran cómo puede utilizar claves de condición específicas de Amazon S3 para operaciones con objetos. Para obtener una lista completa de las acciones, claves de condición y recursos de Amazon S3 que puede especificar en las políticas, consulte Actions, resources, and condition keys for Amazon S3 en la Referencia de autorización de servicios.
Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte Permisos necesarios para las operaciones de la API de Amazon S3.
Varias de las políticas de ejemplo muestran cómo se pueden utilizar las claves de condiciones con las operaciones PUT Object. La operación PUT Object permite encabezados específicos para la lista de control de acceso (ACL) que puede utilizar para conceder permisos basados en la ACL. Mediante el uso de estas claves de condición, puede configurar una condición para solicitar permisos de acceso específicos cuando el usuario carga un objeto. También puede conceder permisos basados en ACL con la operación PutObjectAcl. Para obtener más información, consulte PutObjectAcl en la referencia de la API de Amazon Simple Storage Service de Amazon S3. Para obtener más información acerca de las ACL, consulte Información general de las Listas de control de acceso (ACL).
Temas
Ejemplo 3: Concesión de acceso a una versión específica de un objeto
Ejemplo 4: Concesión de permisos basados en etiquetas de objeto
Ejemplo 5: Restricción del acceso mediante el ID de Cuenta de AWS del propietario del bucket
Ejemplo 7: Exclusión de determinadas entidades principales de una instrucción Deny
Ejemplo 1: Concesión de permisos s3:PutObject
que requieren que los objetos se almacenen con cifrado del servidor
Supongamos que la cuenta A tiene un bucket. El administrador de la cuenta desea conceder permisos para cargar objetos a Jane, usuario en la cuenta A, con la condición de que Jane siempre solicite el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3). El administrador de la cuenta A puede especificar este requisito mediante la clave de condición s3:x-amz-server-side-encryption
, tal como se muestra. El par clave-valor del siguiente bloque de Condition
especifica la clave de condición s3:x-amz-server-side-encryption
y SSE-S3 (AES256
) como tipo de cifrado:
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Al probar este permiso mediante la AWS CLI, debe agregar el cifrado necesario mediante el parámetro --server-side-encryption
, como se muestra en el siguiente ejemplo. Para utilizar este comando de ejemplo, sustituya
por su propia información. user input
placeholders
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyHappyFace.jpg
--bodyc:\HappyFace.jpg
--server-side-encryption "AES256
" --profileAccountAadmin
Ejemplo 2: Concesión de permisos s3:PutObject
para copiar objetos con una restricción en el origen de la copia
En una solicitud de objetos PUT
, cuando especifica un objeto de origen, la solicitud es una operación de copia (consulte CopyObject). Por lo tanto, el propietario del bucket puede conceder un permiso al usuario para copiar objetos con restricciones en el origen, por ejemplo:
-
Permita copiar objetos solo desde el bucket de origen especificado (por ejemplo,
).amzn-s3-demo-source-bucket
-
Permita copiar objetos del bucket de origen especificado y solo los objetos cuyo prefijo de nombre de clave comienza como prefijo específico, como
(por ejemplo,public/
).amzn-s3-demo-source-bucket
/public/*
-
Permita copiar solo un objeto específico desde el bucket de origen (por ejemplo,
).amzn-s3-demo-source-bucket
/example.jpg
La siguiente política de bucket concede a un usuario (
) el permiso Dave
s3:PutObject
. Esta política le permite copiar solo los objetos con la condición de que la solicitud incluya el encabezado s3:x-amz-copy-source
y el valor del encabezado especifique el prefijo de nombre de clave /
. Para utilizar esta política de ejemplo, sustituya amzn-s3-demo-source-bucket
/public/*
por su propia información.user
input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::
amzn-s3-demo-source-bucket
123456789012
:user/Dave
" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
amzn-s3-demo-source-bucket
/public/*
" } } } ] }
Prueba de la política con la AWS CLI
Puede usar el comando copy-object
de la AWS CLI para probar el permiso. Para especificar el origen, debe añadir el parámetro --copy-source
y el prefijo de nombre de clave debe coincidir con el prefijo permitido en la política. Tiene que proporcionar las credenciales al usuario Dave utilizando el parámetro --profile
. Para obtener más información sobre la configuración de la AWS CLI, consulte Developing with Amazon S3 using the AWS CLI en la Amazon S3 API Reference.
aws s3api copy-object --bucket
--key
amzn-s3-demo-source-bucket
HappyFace.jpg
--copy-source
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
--profileAccountADave
Conceder permiso para copiar solo un objeto específico
La política anterior utiliza la condición StringNotLike
. Para conceder el permiso para copiar solo un objeto específico, debe cambiar la condición de StringNotLike
a StringNotEquals
y, a continuación, especificar la clave exacta del objeto, como se muestra en el ejemplo siguiente. Para utilizar este comando de ejemplo, sustituya
por su propia información.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
amzn-s3-demo-source-bucket
/public/PublicHappyFace1.jpg
" } }
Ejemplo 3: Concesión de acceso a una versión específica de un objeto
Supongamos que la cuenta A tiene un bucket con control de versiones habilitado. El bucket tiene varias versiones del objeto
. El administrador de la cuenta A desea ahora conceder al usuario HappyFace.jpg
permiso para obtener solo una versión específica del objeto. Para ello, el administrador de la cuenta debe conceder al usuario Dave
el permiso Dave
s3:GetObjectVersion
de forma condicional, como se muestra en el siguiente ejemplo. El par clave-valor en el bloque Condition
especifica la clave de condición s3:VersionId
. En este caso, para recuperar el objeto del bucket habilitado para el control de versiones especificado,
tiene que saber el ID de versión exacta del objeto. Para utilizar esta política de ejemplo, sustituya Dave
por su propia información.user input
placeholders
Para obtener más información, consulte GetObject en la Referencia de la API de Amazon Simple Storage Service.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave
" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/HappyFace.jpg
", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e
" } } } ] }
Prueba de la política con la AWS CLI
Puede probar los permisos en esta política con el comando get-object
de la AWS CLI con el parámetro --version-id
para identificar la versión específica del objeto a recuperar. El comando recupera la versión especificada del objeto y lo guarda en el archivo
.OutputFile.jpg
aws s3api get-object --bucket
--key
amzn-s3-demo-bucket
HappyFace.jpg
OutputFile.jpg
--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profileAccountADave
Ejemplo 4: Concesión de permisos basados en etiquetas de objeto
Para obtener ejemplos de cómo utilizar claves de condición de etiquetado de objetos con operaciones de Amazon S3, consulte Etiquetado y políticas de control de acceso.
Ejemplo 5: Restricción del acceso mediante el ID de Cuenta de AWS del propietario del bucket
Puede utilizar la clave de condición aws:ResourceAccount
o s3:ResourceAccount
para escribir políticas de punto de conexión de IAM o nube privada virtual (VPC) que restrinjan el acceso de usuarios, roles o aplicaciones a los buckets de Amazon S3 que pertenecen a un ID de Cuenta de AWS específico. Puede usar estas claves de condición para restringir que los clientes dentro de la VPC accedan a los buckets que no posee.
Sin embargo, debe tener en cuenta que algunos servicios de AWS dependen del acceso a buckets administrados de AWS. Por lo tanto, es posible que el uso de la clave aws:ResourceAccount
o s3:ResourceAccount
de la política de IAM también afecte al acceso a estos recursos. Para obtener más información, consulte los siguientes recursos:
-
Restringir el acceso a los buckets de una Cuenta de AWS específica en la Guía de AWS PrivateLink
-
Restringir el acceso a los buckets que utiliza Amazon ECR en la Guía de Amazon ECR
-
Proporcionar el acceso necesario a Systems Manager para buckets de Amazon S3 administrados por AWS en la Guía de AWS Systems Manager
Para obtener más información sobre las claves de condición aws:ResourceAccount
y s3:ResourceAccount
y los ejemplos que muestran cómo usarlas, consulte Limitar el acceso a los buckets de Amazon S3 propiedad de unas Cuentas de AWS específicas
Ejemplo 6: Necesidad de una versión mínima de TLS
Puede utilizar la clave de condición s3:TlsVersion
para escribir políticas de bucket, de punto de conexión de nube privada virtual (VPCE) o de IAM que restrinjan el acceso de aplicaciones o usuarios a buckets de Amazon S3 en función de la versión de TLS que utilice el cliente. Puede utilizar esta clave de condición para escribir políticas que requieran una versión mínima de TLS.
La política de bucket de ejemplo siguiente deniega las solicitudes de PutObject
de clientes que tienen una versión TLS inferior a 1.2, por ejemplo, 1.1 o 1.0. Para utilizar esta política de ejemplo, sustituya
por su propia información.user input placeholders
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }
amzn-s3-demo-bucket1
La política de bucket de ejemplo siguiente permite las solicitudes de PutObject
de clientes que tienen una versión TLS posterior a 1.1, por ejemplo, 1.2, 1.3 o posteriores:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::
", "arn:aws:s3:::
amzn-s3-demo-bucket1
/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }
amzn-s3-demo-bucket1
Ejemplo 7: Exclusión de determinadas entidades principales de una instrucción Deny
La siguiente política de bucket deniega el acceso s3:GetObject
a
, excepto a las entidades principales con el número de cuenta amzn-s3-demo-bucket
. Para utilizar esta política de ejemplo, sustituya 123456789012
por su propia información.user input
placeholders
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "" ] } } } ] }
123456789012
Ejemplo 8: exigencia a los clientes para cargar objetos de forma condicional en función de los nombres de clave de objeto o ETag
Con las escrituras condicionales, puede agregar un encabezado adicional a las solicitudes WRITE
para especificar condiciones previas a la operación de S3. Este encabezado especifica una condición que, si no se cumple, provocará un error en la operación de S3. Por ejemplo, puede evitar que se sobrescriban datos existentes al validar que no haya ningún objeto con el mismo nombre de clave en el bucket durante la carga de objetos. De forma alternativa, puede comprobar la etiqueta de entidad (ETag) de un objeto en Amazon S3 antes de escribir un objeto.
Para ver ejemplos de políticas de bucket que utilizan condiciones en una política de bucket para aplicar escrituras condicionales, consulte Aplicación de escrituras condicionales en buckets de Amazon S3.
Ejemplos: claves de condición de Amazon S3 para operaciones de buckets
Las políticas de ejemplo siguientes muestran cómo puede utilizar claves de condición específicas de Amazon S3 para operaciones de buckets.
Temas
Ejemplo 1: Concesión de permiso s3:GetObject
con una condición en una dirección IP
Puede conceder permiso a los usuarios autenticados para usar la acción s3:GetObject
si la solicitud se genera a partir de un intervalo específico de direcciones IP (por ejemplo,
), a menos que la dirección IP sea una que desee excluir (por ejemplo, 192.0.2.*
). En el bloque de 192.0.2.188
Condition
, IpAddress
y NotIpAddress
son condiciones y cada una recibe un par clave-valor para evaluación. En este ejemplo, los pares de clave-valor usan la clave general aws:SourceIp
de AWS. Para utilizar esta política de ejemplo, sustituya
por su propia información.user input placeholders
nota
Los valores de clave IPAddress
y NotIpAddress
especificados en el bloque Condition
usan la notación CIDR, como se describe en RFC 4632. Para obtener más información, consulte http://www.rfc-editor.org/rfc/rfc4632.txt
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "
amzn-s3-demo-bucket
192.0.2.0/24
" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32
" } } } ] }
También puede utilizar otras claves de condición generales de AWS en las políticas de Amazon S3. Por ejemplo, puede especificar las claves de condición aws:SourceVpce
y aws:SourceVpc
en las políticas de bucket para los puntos de enlace de la VPC. Para ver ejemplos específicos, consulte Control del acceso desde puntos de enlace de la VPC con políticas de bucket.
nota
Para alguna claves de condición globales de AWS, solo se admiten determinados tipos de recursos. Por lo tanto, compruebe si Amazon S3 admite la clave de condición global y el tipo de recurso que desea usar o si necesitará usar una clave de condición específica de Amazon S3 en su lugar. Para obtener una lista completa de los tipos de recursos y claves de condición admitidos para Amazon S3, consulte Actions, resources, and condition keys for Amazon S3 en la Referencia de autorización de servicios.
Para obtener más información sobre los permisos para las operaciones de la API de S3 por tipos de recursos de S3, consulte Permisos necesarios para las operaciones de la API de Amazon S3.
Ejemplo 2: obtener una lista de objetos en un bucket con un prefijo específico
Puede utilizar la clave de condición s3:prefix
para limitar la respuesta de la operación de la API ListObjectsV2 a nombres de clave con un prefijo específico. Si es el propietario del bucket, puede usar esta clave de condición para restringir que un usuario pueda mostrar el contenido de un prefijo específico en el bucket. Esta clave de condición s3:prefix
resulta útil si los objetos en el bucket están organizados por prefijos de nombre de clave.
La consola de Amazon S3 utiliza prefijos de nombre de clave para mostrar un concepto de carpeta. Solo la consola admite el concepto de carpetas; la API de Amazon S3 solo admite buckets y objetos. Por ejemplo, si tiene dos objetos con nombres de clave
y public/object1.jpg
, la consola muestra los objetos en la carpeta public/object2.jpg
. En la API de Amazon S3, estos son objetos con prefijos, no objetos en carpetas. Para obtener más información sobre el uso de prefijos y delimitadores para filtrar permisos de acceso, consulte Controlar el acceso a un bucket con las políticas de usuario. public
En el siguiente escenario, la cuenta del propietario del bucket y la cuenta principal, a la que pertenece el usuario, son las mismas. Por lo tanto, el propietario del bucket puede usar una política de bucket o una política de usuario para conceder acceso. Para obtener más información sobre otras claves de condición que puede utilizar con la operación de la API ListObjectsV2
, consulte ListObjectsV2.
nota
Si el bucket tiene el control de versiones habilitado, para mostrar los objetos en el bucket, debe conceder el permiso s3:ListBucketVersions
en las siguientes políticas, en lugar del permiso s3:ListBucket
. El permiso s3:ListBucketVersions
también admite la clave de condición s3:prefix
.
Política de usuario
La siguiente política de usuario concede el permiso s3:ListBucket
(consulte ListObjectsV2) con una instrucción Condition
que exige que el usuario especifique un prefijo en la solicitud con un valor de
. Para utilizar esta política de ejemplo, sustituya projects
por su propia información.user input placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
La instrucción Condition
restringe al usuario a mostrar solo las claves de objeto que tengan el prefijo
. La instrucción projects
Deny
explícita agregada impide que el usuario muestre las claves con cualquier otro prefijo, independientemente de los demás permisos que tenga el usuario. Por ejemplo, es posible que el usuario pueda obtener el permiso para crear una lista de claves de objetos sin ninguna restricción mediante actualizaciones de políticas de usuario anteriores o mediante una política de bucket. Como las instrucciones Deny
explícitas siempre invalidan las instrucciones Allow
, si el usuario intenta mostrar claves distintas de las que tienen el prefijo
, se deniega la solicitud. projects
Política de bucket
Si agrega el elemento Principal
a la política de usuario anterior, que identifica al usuario, tendrá una política de bucket, como se muestra en el siguiente ejemplo. Para utilizar esta política de ejemplo, sustituya
por su propia información.user input
placeholders
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::", "Condition" : { "StringNotEquals" : { "s3:prefix": "
amzn-s3-demo-bucket
projects
" } } } ] }
Prueba de la política con la AWS CLI
Puede usar el siguiente comando list-object
de la AWS CLI para probar la política. En el comando, usa el parámetro --profile
para proporcionar las credenciales de usuario. Para obtener más información sobre la configuración y el uso de la AWS CLI, consulte Developing with Amazon S3 using the AWS CLI en la Amazon S3 API Reference.
aws s3api list-objects --bucket
--prefix
amzn-s3-demo-bucket
projects
--profileAccountA
Ejemplo 3: establecer el número máximo de claves
Puede usar la clave de condición s3:max-keys
para establecer el número máximo de claves que un solicitante puede devolver en una solicitud de ListObjectsV2 o ListObjectVersions. De forma predeterminada, estas operaciones de la API devuelven hasta 1000 claves. Para obtener una lista de los operadores de condición numéricos que se pueden utilizar con s3:max-keys
y los ejemplos adjuntos, consulte Operadores de condición numérica en la guía del usuario de IAM.