Ejemplos de políticas de usuario y rol - Amazon Simple Storage Service

Ejemplos de políticas de usuario y rol

En esta sección se muestran varias políticas de usuario y rol de AWS Identity and Access Management (IAM) para controlar el acceso a Amazon S3. Por ejemplo, políticas de bucket, consulte Uso de políticas de bucket. Para obtener información sobre el lenguaje de políticas de IAM, consulte Políticas de bucket y de usuario.

Las siguientes políticas de ejemplo funcionarán si las prueba mediante programación. Sin embargo, debe conceder permisos adicionales que necesita la consola de Amazon S3 para utilizarlas con dicha consola. Para obtener información acerca del uso de estas políticas con la consola de Amazon S3, consulte Controlar el acceso a un bucket con las políticas de usuario.

Permiso para que el usuario de IAM tenga acceso a uno de los buckets

En este ejemplo, desea conceder un usuario de IAM en el acceso de la Cuenta de AWS a uno de los buckets, DOC-EXAMPLE-BUCKET1, y permitirle que agregue, actualice y elimine objetos.

Además de conceder los permisos s3:PutObject, s3:GetObject y s3:DeleteObject al usuario, la política también concede los permisos s3:ListAllMyBuckets, s3:GetBucketLocation y s3:ListBucket. Estos son los permisos adicionales que requiere la consola. Las acciones s3:PutObjectAcl y s3:GetObjectAcl también son necesarias para poder copiar, cortar y pegar objetos en la consola. Para ver un ejemplo de un tutorial en el que se conceden permisos a usuarios y se los prueba con la consola, consulte Controlar el acceso a un bucket con las políticas de usuario.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" } ] }

Permiso para que cada usuario de IAM tenga acceso a una carpeta en un bucket

En este ejemplo, desea conceder el acceso al bucket, DOC-EXAMPLE-BUCKET1, a dos usuarios de IAM, Mary y Carlos, para que puedan agregar, actualizar y eliminar objetos. Sin embargo, desea impedir que cada usuario acceda a un único prefijo (carpeta) en el bucket. Debe crear carpetas con nombres que coincidan con sus nombres de usuarios.

DOC-EXAMPLE-BUCKET1 Mary/ Carlos/

Para conceder a cada usuario el acceso solo a sus carpetas, puede escribir una política para cada usuario y asociarla de forma individual. Por ejemplo, puede asociar la siguiente política al usuario Mary para conceder permisos específicos de Amazon S3 en la carpeta DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Mary/*" } ] }

Puede asociar una política similar al usuario Carlos, especificando la carpeta Carlos en el valor Resource.

En vez de asociar políticas a cada usuario, puede escribir una sola política que utilice una variable de política y, a continuación, asociarla a un grupo. En primer lugar, debe crear un grupo y agregar a Mary y Carlos al grupo. La política del ejemplo siguiente muestra cómo conceder un conjunto de permisos de Amazon S3 en la carpeta DOC-EXAMPLE-BUCKET1/${aws:username}. Cuando se evalúa la política, la variable de la política ${aws:username} se reemplaza por el nombre de usuario del solicitante. Por ejemplo, si Mary envía una solicitud para colocar un objeto, la operación se permitirá solo si Mary carga el objeto en la carpeta DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
nota

Cuando utiliza variables de políticas, debe especificar de forma explícita la versión 2012-10-17 en la política. La versión predeterminada del lenguaje de la política de IAM, 2008-10-17, no admite variables de políticas.

Si desea probar la política anterior en la consola de Amazon S3, esta requiere permiso para permisos adicionales, como se muestra en la siguiente política. Para obtener información acerca de cómo la consola utiliza estos permisos, consulte Controlar el acceso a un bucket con las políticas de usuario.

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
nota

En la versión 2012-10-17 de la política, las variables comienzan con $. Este cambio en la sintaxis puede crear un conflicto potencial si la clave del objeto (nombre de objeto) incluye $.

Para evitar este conflicto, especifique el carácter $ mediante ${$}. Por ejemplo, para incluir la clave de objeto my$file en la política, debe especificarlo como my${$}file.

Aunque los nombres de usuario de IAM son identificadores descriptivos fáciles, no necesariamente deben ser identificadores globales únicos. Por ejemplo, si el usuario Carlos abandona la organización y se une un usuario con el mismo nombre (Carlos), este puede tener acceso a la información del usuario anterior con el mismo nombre.

En vez de usar nombres de usuario, puede crear carpetas en función de los ID de usuario de IAM. Cada ID de usuario de IAM es único. En este caso, debe modificar la política anterior para usar la variable de política ${aws:userid}. Para obtener más información acerca de los identificadores de usuarios, consulte Identificadores de IAM en la guía de usuario de IAM.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/home/${aws:userid}/*" } ] }

Permiso para que los usuarios que no son de IAM (usuarios de aplicaciones móviles) tengan acceso a las carpetas de un bucket

Supongamos que desea desarrollar una aplicación móvil, un juego que almacena los datos de usuario en un bucket de S3. Debe crear una carpeta en el bucket para cada usuario de la aplicación. También debe limitar el acceso de cada usuario a su propia carpeta. Pero no puede crear carpetas antes de que alguien descargue la aplicación y comience a jugar porque no tiene su ID de usuario.

En este caso, puede solicitar a los usuarios que inicien sesión en la aplicación con los proveedores de identidades públicos como Login with Amazon, Facebook o Google. Una vez que los usuarios iniciaron sesión en la aplicación mediante uno de estos proveedores, tendrán un ID de usuario que usted podrá utilizar para crear carpetas específicas de usuarios en tiempo de ejecución.

Luego, puede utilizar la identidad federada de sitio web en AWS Security Token Service para integrar la información del proveedor de identidad con su aplicación y obtener credenciales de seguridad temporales para cada usuario. A continuación, puede crear políticas de IAM para permitir que la aplicación tenga acceso a su bucket y realice operaciones como crear carpetas específicas de usuario y cargar datos. Para obtener más información acerca de la federación de identidades de sitio web, consulte Acerca de federación de identidades de sitio web en la Guía del usuario de IAM.

Permiso para que un grupo tenga una carpeta compartida en Amazon S3

Al asociar la siguiente política a un grupo, todos los miembros del grupo obtienen acceso a la siguiente carpeta en Amazon S3: DOC-EXAMPLE-BUCKET1/share/marketing. Los miembros del grupo solo pueden acceder a los permisos específicos de Amazon S3 que se muestran en la política y solo a los objetos en la carpeta especificada.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/share/marketing/*" } ] }

Permiso para que los usuarios lean objetos en una parte del bucket

En este ejemplo, crea un grupo denominado AllUsers, que contiene todos los usuarios de IAM que pertenecen a la Cuenta de AWS. A continuación asocia una política que concede al grupo el acceso a GetObject y GetObjectVersion, pero solo para objetos en la carpeta DOC-EXAMPLE-BUCKET1/readonly.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/readonly/*" } ] }

Permiso para que un socio coloque archivos en una parte específica de un bucket

En este ejemplo, crea un grupo llamado AnyCompany que representa a una compañía asociada. Crea un usuario de IAM para la persona o aplicación específica en la empresa asociada que necesita acceso y, luego, coloca al usuario en el grupo.

Luego, asocia una política que concede al grupo PutObject acceso a la siguiente carpeta en un bucket:

DOC-EXAMPLE-BUCKET1/uploads/anycompany

Como quiere evitar que el grupo AnyCompany realice cualquier otro tipo de acción con el bucket, agrega una instrucción que deniegue explícitamente el permiso para cualquier acción de Amazon S3, excepto PutObject en todos los recursos de Amazon S3 en la Cuenta de AWS.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" } ] }

Restringir el acceso a los buckets de Amazon S3 en una Cuenta de AWS específica

Si desea asegurarse de que las entidades principales de Amazon S3 accedan solo a los recursos que se encuentran dentro de una Cuenta de AWS de confianza, puede restringir el acceso. Por ejemplo, esta Política de IAM basada en identidades utiliza un efecto Deny para bloquear el acceso a las acciones de Amazon S3, a menos que el recurso de Amazon S3 al que se accede esté en una cuenta 222222222222. Para evitar que una entidad principal de IAM en una Cuenta de AWS acceda a objetos de Amazon S3 fuera de la cuenta, asocie la siguiente política de IAM:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "222222222222" ] } } } ] }
nota

Esta política no sustituye los controles de acceso de IAM existentes porque no otorga acceso alguno. En cambio, esta política actúa como una barrera de protección adicional para los demás permisos de IAM, independientemente de los permisos otorgados a través de otras políticas de IAM.

Asegúrese de sustituir el ID de cuenta 222222222222 en la política por su propia Cuenta de AWS. Para aplicar una política a varias cuentas sin dejar de mantener esta restricción, sustituya el ID de cuenta por la clave de condición aws:PrincipalAccount. Esta condición requiere que la entidad principal y el recurso se encuentren en la misma cuenta.

Restricción del acceso a buckets de Amazon S3 dentro de la unidad organizativa (OU)

Si tiene una Unidad organizativa (OU) configure en AWS Organizations, es posible que desee restringir el acceso al bucket de Amazon S3 a una parte específica de la organización. En este ejemplo, utilizaremos la clave aws:ResourceOrgPaths para restringir el acceso del bucket de Amazon S3 a una unidad organizativa de la organización. En este ejemplo, el ID de la unidad organizativa es ou-acroot-exampleou. Asegúrese de sustituir este valor en su propia política por sus propios ID de unidad organizativa.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3AccessOutsideMyBoundary", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-exampleou/" ] } } } ] }
nota

Esta política no concede ningún acceso. En su lugar, esta política actúa como respaldo para los demás permisos de IAM, lo que impide que las entidades principales accedan a objetos de Amazon S3 fuera de un límite definido por la unidad organizativa.

La política niega el acceso a las acciones de Amazon S3 a menos que el objeto de Amazon S3 al que se accede se encuentre en la unidad organizativa ou-acroot-exampleou de la organización. La condición de política de IAM requiere aws:ResourceOrgPaths, una clave de condición multivalor, para contener cualquiera de las rutas de unidad organizativa mostradas. La política utiliza el operador ForAllValues:StringNotLike para comparar los valores de aws:ResourceOrgPaths con las unidades organizativas mostradas sin la coincidencia que distingue entre mayúsculas y minúsculas.

Restricción del acceso a buckets de Amazon S3 dentro de la organización

Para restringir el acceso a los objetos de Amazon S3 dentro de la organización, asocie una política de IAM a la raíz de la organización, aplicándola a todas las cuentas de la organización. Para requerir a las entidades principales de IAM que sigan esta regla, utilice una política de control de servicio (SCP). Si elige utilizar SCP, asegúrese de probar SCP minuciosamente antes de adjuntar la política a la raíz de la organización.

En la siguiente política de ejemplo, se deniega el acceso a las acciones de Amazon S3 a menos que el objeto de Amazon S3 al que se accede esté en la misma organización que la entidad principal de IAM que accede a él:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::*/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } ] }
nota

Esta política no concede ningún acceso. En su lugar, esta política actúa como respaldo para los demás permisos de IAM, lo que impide que las entidades principales accedan a objetos de Amazon S3 fuera de la organización. Esta política también se aplica a los recursos de Amazon S3 que se crean después de que la política haya entrado en vigor.

La Condición de política de IAM en este ejemplo requiere aws:ResourceOrgID y aws:PrincipalOrgID para ser iguales entre sí. Con este requisito, la entidad principal que realiza la solicitud y el recurso al que se accede deben estar en la misma organización.