Ejemplos de políticas de bucket que utilizan claves de condición - Amazon Simple Storage Service

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).

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-source examplebucket/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-id AaaHbAQitwiL_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:

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:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

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:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

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.

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.