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 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.
Ejemplos: claves de condición de Amazon S3 para operaciones con objetos
Esta sección incluye ejemplos que 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.
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. Con estas claves, el propietario del bucket 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 1: Concesión de permisos s3:PutObject con una condición que requiere que los objetos almacenados tengan cifrado del servidor
- Ejemplo 2: Concesión de permisos s3:PutObject para copiar objetos con una restricción en el origen de la copia
- 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 6: Necesidad de una versión mínima de TLS
Ejemplo 1: Concesión de permisos s3:PutObject con una condición que requiere que los objetos almacenados tengan 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 lado del servidor para que Amazon S3 guarde los objetos cifrados. Para ello, el administrador de la cuenta A puede usar la clave de condición s3:x-amz-server-side-encryption
, tal como se muestra. El par clave-valor en el bloque Condition
especifica la clave s3:x-amz-server-side-encryption
.
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Al probar el permiso con la AWS CLI, debe usar el parámetro requerido utilizando el parámetro --server-side-encryption
.
aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountBadmin
Ejemplo 2: Concesión de permisos s3:PutObject para copiar objetos con una restricción en el origen de la copia
Se produce una operación de copia cuando usted especifica un objeto de origen en la solicitud PUT Object (consulte PUT Object - Copy). Por lo tanto, el propietario del bucket puede conceder un permiso al usuario para copiar objetos con restricciones en el origen, por ejemplo:
-
Permitir copiar objetos solo del bucket
sourcebucket
. -
Permitir copiar objetos del bucket de origen y solo los objetos cuyo prefijo de nombre de clave comience por public/ f (por ejemplo: sourcebucket/public/*).
-
Permitir copiar solo un objeto específico del bucket de origen (por ejemplo: sourcebucket/example.jpg).
La siguiente política de bucket concede al usuario Dave el permiso s3:PutObject
. 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 /awsexamplebucket1/public/*
.
{ "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:::awsexamplebucket1
/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/folder", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1
/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "awsexamplebucket1
/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 acerca de la configuración de la AWS CLI, consulte Desarrollo con Amazon S3 mediante la AWS CLI.
aws s3api copy-object --bucket
awsexamplebucket1
--key HappyFace.jpg --copy-sourceexamplebucket
/public/PublicHappyFace1.jpg --profile AccountADave
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, tal como se muestra.
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "
awsexamplebucket1
/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 HappyFace.jpg
. Ahora, el administrador de la cuenta desea conceder al usuario (Dave) permiso para obtener solo una versión específica del objeto. Para ello, el administrador de la cuenta debe conceder a Dave el permiso s3:GetObjectVersion
de forma condicional, tal como se muestra. El par clave-valor en el bloque Condition
especifica la clave de condición s3:VersionId
. En este caso, Dave tiene que saber el ID de versión exacta del objeto para recuperar el objeto.
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:::examplebucketversionenabled
/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::examplebucketversionenabled
/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e
" } } } ] }
Prueba de la política con la AWS CLI
Puede usar el comando get-object
de la AWS CLI para probar estos permisos y el parámetro --version-id
para identificar la versión específica del objeto. El comando recupera el objeto y lo guarda en el archivo OutputFile.jpg
.
aws s3api get-object --bucket
examplebucketversionenabled
--key HappyFace.jpg OutputFile.jpg --version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e
--profile AccountADave
Ejemplo 4: Concesión de permisos basados en etiquetas de objeto
Para obtener ejemplos sobre 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 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 esta clave de condición para restringir que los clientes dentro de su 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 y ejemplos, 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
-
Limitar el acceso a los buckets de Amazon S3 propiedad de Cuentas de AWS
específicas en el Blog de almacenamiento de AWS
Ejemplo 6: Necesidad de una versión mínima de TLS
Si utiliza la nueva clave de condición de IAM s3:TLSVersion para escribir IAM, Virtual Private Cloud Endpoint (VPCE) o políticas de bucket 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.
Esta política de bucket de ejemplo deniega las solicitudes de PutObject de clientes que tienen una versión TLS inferior a 1.2, por ejemplo, 1.1 o 1.0.
{ "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
Esta política de bucket de ejemplo permite solicitudes de PutObject de clientes que tienen una versión TLS superior a 1.1, por ejemplo, 1.2, 1.3 o superior.
{ "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
Ejemplos: claves de condición de Amazon S3 para operaciones con buckets
Esta sección incluye políticas de ejemplo que muestran cómo puede utilizar claves de condición específicas de Amazon S3 para operaciones con buckets.
Temas
Ejemplo 1: Concesión de permisos 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 (192.0.2.*), a menos que la dirección IP sea 192.0.2.188. En el bloque de condición, 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 de AWS aws:SourceIp
.
nota
Los valores de clave IPAddress
y NotIpAddress
especificados en la condición utilizan 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:::
awsexamplebucket1
/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "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.
Ejemplo 2: obtener una lista de objetos en un bucket con un prefijo específico
Puede utilizar la clave de condición de s3:prefix
para limitar la respuesta de la API GET Bucket (ListObjects) a nombres de clave con un prefijo específico. Si es el propietario del bucket, puede restringir el permiso para que un usuario pueda enumerar el contenido de un prefijo específico en el bucket. Esta clave de condición 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. 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.
Por ejemplo, tiene dos objetos con nombres de clave public/object1.jpg
y public/object2.jpg
, la consola muestra los objetos en la carpeta public
. En la API de Amazon S3, estos son objetos con prefijos, no objetos en carpetas. Sin embargo, en la API de Amazon S3, si organiza las claves de objetos, puede conceder el permiso s3:ListBucket
con la condición s3:prefix
que permitirá al usuario obtener una lista de nombres de clave con esos prefijos específicos.
En este ejemplo, 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 de usuario. Para obtener más información acerca de otras claves de condición que puede utilizar con la API GET Bucket (ListObjects), consulte ListObjects.
Política de usuario
La siguiente política de usuario concede el permiso s3:ListBucket
(consulte GET Bucket (List Objects)) con una condición que requiere que el usuario especifique prefix
en la solicitud con el valor projects
.
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::
awsexamplebucket1
", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1
", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
La condición impide que el usuario cree una lista de claves de objetos con el prefijo projects
. Esta denegación explícita añadida impide que el usuario realice una lista de claves con cualquier otro prefijo, independientemente de los demás permisos que tenga el usuario. Por ejemplo, es posible que el usuario obtenga 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. Sin embargo, como la denegación explícita siempre sustituye a cualquier otro permiso, la solicitud del usuario para crear listas de claves que no tengan el prefijo projects
se deniega.
Política de bucket
Si añade el elemento Principal
a la política de usuario anterior, que identifica al usuario, tendrá una política de bucket, tal como se muestra.
{ "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:::awsexamplebucket1
", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012
:user/bucket-owner
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::awsexamplebucket1
", "Condition" : { "StringNotEquals" : { "s3:prefix": "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 acerca de la configuración y el uso de la AWS CLI, consulte Desarrollo con Amazon S3 mediante la AWS CLI.
aws s3api list-objects --bucket
awsexamplebucket1
--prefix examplefolder --profile AccountADave
Si el bucket tiene el control de versiones habilitado, para crear una lista de los objetos en el bucket, en vez del permiso s3:ListBucketVersions
, debe conceder el permiso s3:ListBucket
en la política anterior. Este permiso también admite la clave de condición s3:prefix
.
Ejemplo 3: establecer el número máximo de claves
Puede utilizar la clave de condición s3:max-keys
para establecer el número máximo de claves que el solicitante puede devolver en una solicitud GET Bucket (ListObjects) o ListObjectVersions. De forma predeterminada, la API devuelve 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.