Controlar el acceso a un bucket con las políticas de usuario - Amazon Simple Storage Service

Controlar el acceso a un bucket con las políticas de usuario

En este tutorial se explica cómo funcionan los permisos del usuario con Amazon S3. En este ejemplo, puede crear un bucket con carpetas. A continuación, cree usuarios de IAM AWS Identity and Access Management en la Cuenta de AWS y conceda a estos usuarios permisos progresivos en el bucket de Amazon S3 y sus carpetas.

Conceptos básicos de buckets y carpetas

El modelo de datos de Amazon S3 es una estructura plana: usted crea un bucket y el bucket almacena objetos. No existe una jerarquía entre los subbuckets o las subcarpetas, pero puede emular una jerarquía de carpetas. Las herramientas, como, por ejemplo, la consola de Amazon S3, pueden mostrar una vista de estas carpetas y subcarpetas lógicas del bucket.

La consola muestra que un bucket denominado companybucket tiene tres carpetas: Private, Development y Finance, y un objeto, s3-dg.pdf. La consola utiliza los nombres de objeto (claves) para crear una jerarquía lógica con carpetas y subcarpetas. Considere los siguientes ejemplos:

  • Al crear la carpeta Development, la consola crea un objeto con la clave Development/. Tenga en cuenta el delimitador final (/).

  • Al cargar un objeto denominado Projects1.xls en la carpeta Development, la consola carga el objeto y le asigna la clave Development/Projects1.xls.

    En la clave, Development es el prefijo y / es el delimitador. La API de Amazon S3 admite prefijos y delimitadores en sus operaciones. Por ejemplo, puede obtener una lista de todos los objetos de un bucket con un prefijo y delimitador específicos. En la consola, al abrir la carpeta Development, la consola muestra los objetos de esa carpeta. En el siguiente ejemplo, la carpeta Development contiene un objeto.

     

     

    Cuando la consola muestra la carpeta Development del bucket companybucket, envía una solicitud a Amazon S3 en la que especifica el prefijo Development y el delimitador /. La respuesta de la consola se parece a una lista de carpetas del sistema de archivos de su equipo. En el ejemplo anterior se muestra que el bucket companybucket tiene un objeto con la clave Development/Projects1.xls.

La consola utiliza claves de objeto para inferir una jerarquía lógica. Amazon S3 no tiene una jerarquía física; solo tiene buckets que contienen objetos en una estructura de archivos plana. Cuando crea objetos con la API de Amazon S3, puede utilizar las claves del objeto que implican una jerarquía lógica. Al crear una jerarquía lógica de objetos, puede administrar el acceso a carpetas individuales, tal y como se explica en este tutorial.

Antes de comenzar, asegúrese de estar familiarizado con el concepto del contenido del bucket en el nivel raíz. Supongamos que el bucket companybucket tiene los siguientes objetos:

  • Private/privDoc1.txt

  • Private/privDoc2.zip

  • Development/project1.xls

  • Development/project2.xls

  • Finance/Tax2011/document1.pdf

  • Finance/Tax2011/document2.pdf

  • s3-dg.pdf

Estas claves de objeto crean una jerarquía lógica con Private, Development y Finance como carpetas en el nivel raíz y s3-dg.pdf como un objeto en el nivel raíz. Cuando elige el nombre del bucket en la consola de Amazon S3, los elementos en el nivel raíz aparecen. La consola muestra los prefijos de nivel principal (Private/, Development/ y Finance/) como carpetas en el nivel raíz. La clave del objeto s3-dg.pdf no tiene prefijo y, por lo tanto, aparece como un elemento en el nivel raíz.

Resumen del tutorial

En este tutorial, creará un bucket con tres carpetas: (Private, Development y Finance).

Tiene dos usuarios, Alice y Bob. Quiere que Alice solo tenga acceso a la carpeta Development y que Bob solo tenga acceso a la carpeta Finance. Desea mantener privado el contenido de la carpeta Private. En el tutorial, para administrar el acceso, cree los usuarios de IAM (el ejemplo utiliza los nombres de usuario Alice y Bob) y conceda los permisos necesarios.

IAM también permite crear grupos de usuarios y conceder permisos a nivel grupal para que se apliquen a todos los usuarios del grupo. Esto lo ayuda a administrar mejor los permisos. Para este ejercicio, Alice y Bob deben tener algunos permisos en común. Por lo tanto, también debe crear un grupo denominado Consultants y, a continuación, añadir a Alice y Bob al grupo. En primer lugar, para conceder los permisos, asocie una política de grupo al grupo. A continuación, para añadir los permisos específicos del usuario, asocie políticas a usuarios específicos.

nota

En el tutorial, se utiliza companybucket como el nombre del bucket, Alice y Bob como los usuarios de IAM y Consultants como el nombre del grupo. Dado que Amazon S3 requiere que los nombres de los buckets sean exclusivos a nivel global, debe crear un nombre de bucket para reemplazar el existente.

Prepararse para el tutorial

En este ejemplo, utilizará las credenciales de su Cuenta de AWS para crear usuarios de IAM. Al principio, estos usuarios no tienen permisos. Conceda permisos a estos usuarios de forma gradual para realizar acciones específicas de Amazon S3. Para probar estos permisos, inicie sesión en la consola con las credenciales de cada usuario. A medida que concede los permisos de forma progresiva como propietario de la Cuenta de AWS y prueba los permisos como usuario de IAM, tendrá que iniciar y cerrar sesión con diferentes credenciales en cada ocasión. Puede realizar estas pruebas con un navegador, pero el proceso se agilizará si utiliza dos navegadores distintos. Utilice un navegador para conectarse a la AWS Management Console con las credenciales de la Cuenta de AWS y otro navegador para conectarse con las credenciales del usuario de IAM.

Para iniciar sesión en la AWS Management Console con las credenciales de la Cuenta de AWS, vaya a https://console.aws.amazon.com/. Un usuario de IAM no puede iniciar sesión con el mismo enlace. Un usuario de IAM debe utilizar una página de inicio de sesión activada para IAM. Como propietario de la cuenta, puede proporcionar este enlace a los usuarios.

Para obtener más información acerca de IAM, consulte Inicio de sesión en la AWS Management Console en la Guía del usuario de IAM.

Para proporcionar un enlace de inicio de sesión para usuarios de IAM

  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. En el panel de Navigation (Navegación), elija IAM Dashboard (Panel de IAM).

  3. Anote la URL en IAM users sign in link: (Enlace de inicio de sesión de usuarios de IAM:). Proporcionará este enlace a los usuarios de IAM para que inicien sesión en la consola con el nombre de usuario y contraseña de IAM.

Paso 1: Crear un bucket

En este paso, inicie sesión en la consola de Amazon S3 con las credenciales de la Cuenta de AWS, cree un bucket, agregue las carpetas (Development, Finance y Private) al bucket y cargue uno o dos documentos de muestra en cada carpeta.

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. Cree un bucket.

    Para obtener instrucciones paso a paso, consulte Crear un bucket.

  3. Cargue un documento en el bucket.

    Para este ejercicio, supongamos que tiene el documento s3-dg.pdf en el nivel raíz de este bucket. Si carga un documento diferente, sustituya el nombre de archivo por s3-dg.pdf.

  4. Añada las tres carpetas denominadas Private, Finance y Development al bucket.

    Para obtener instrucciones paso a paso para crear una carpeta, consulte Organización de objetos en la consola de Amazon S3 con carpetas> en la Guía del usuario de la consola de Amazon Simple Storage Service.

  5. Cargue uno o dos documentos en cada carpeta.

    Para este ejercicio, supongamos que tiene cargado un par de documentos en cada carpeta, lo que hace que el bucket tenga objetos con las siguientes claves:

    • Private/privDoc1.txt

    • Private/privDoc2.zip

    • Development/project1.xls

    • Development/project2.xls

    • Finance/Tax2011/document1.pdf

    • Finance/Tax2011/document2.pdf

    • s3-dg.pdf

    Para obtener instrucciones paso a paso, consulte Carga de objetos.

Paso 2: Crear usuarios y un grupo de IAM

Ahora, utilice la consola de IAM para agregar dos usuarios de IAM, Alice y Bob, a su Cuenta de AWS. Para obtener instrucciones paso a paso, consulte Creación de un usuario de IAM en su Cuenta de AWS en la Guía del usuario de IAM.

Cree también un grupo administrativo denominado Consultants. A continuación, agregue los usuarios al grupo. Para obtener instrucciones paso a paso, consulte Creación de un grupo de usuarios de IAM.

aviso

Cuando añade los usuarios y un grupo, no debe asociar ninguna política que conceda permisos a estos usuarios. Al principio, estos usuarios no tienen ningún permiso. En las siguientes secciones se explica cómo conceder los permisos de forma gradual. Primero debe asegurarse de haber asignado contraseñas a estos usuarios de IAM. Utilice estas credenciales de usuario para probar las acciones de Amazon S3 y comprobar que los permisos funcionen de la forma esperada.

Para obtener instrucciones paso a paso sobre cómo crear un nuevo usuario de IAM, consulte Creación de un usuario de IAM en su Cuenta de AWS en la Guía del usuario de IAM. Cuando cree los usuarios para esta explicación, seleccione Acceso a la AWS Management Console y desmarque Acceso programático.

Para obtener instrucciones paso a paso acerca de cómo crear un grupo administrativo, consulte Creación del primer grupo y usuario administrador de IAM en la guía del usuario de IAM.

Paso 3: Comprobar que los usuarios de IAM no tengan permisos

Si utiliza dos navegadores, ahora puede utilizar el segundo navegador para iniciar sesión en la consola con una de las credenciales de usuario de IAM.

  1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio de sesión para usuarios de IAM), inicie sesión en la AWS Management Console con cualquiera de las credenciales de usuario de IAM.

  2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

    Revise el siguiente mensaje de la consola que indica que el acceso está denegado.

Ahora, puede comenzar a conceder permisos de forma gradual a los usuarios. En primer lugar, asocie una política de grupo que conceda los permisos que ambos usuarios deben tener.

Paso 4: Conceder permisos en el nivel de grupo

Quiere que los usuarios puedan realizar las siguientes acciones:

  • Mostrar todos los buckets que pertenecen a la cuenta principal. Para ello, Bob y Alice deben tener permiso para ejecutar la acción s3:ListAllMyBuckets.

  • Mostrar los elementos, las carpetas y los objetos del bucket companybucket en el nivel raíz. Para ello, Bob y Alice deben tener permiso para ejecutar la acción s3:ListBucket en el bucket companybucket.

En primer lugar, cree una política que conceda estos permisos y, a continuación, asóciela al grupo Consultants.

Paso 4.1: Conceder permiso para mostrar todos los buckets

En este paso, creará una política administrada que conceda a los usuarios los permisos mínimos para que puedan mostrar todos los buckets que pertenecen a la cuenta principal. A continuación, asociará la política al grupo Consultants. Cuando adjunta la política administrada a un usuario o grupo, permite al usuario o grupo obtener una lista de buckets que pertenecen a la Cuenta de AWS principal.

  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

    nota

    Dado que concederá permisos al usuario, inicie sesión con las credenciales de su Cuenta de AWS, no como usuario de IAM.

  2. Cree la política administrada.

    1. En el panel de navegación de la izquierda, elija Policies (Políticas) y, a continuación, seleccione Create Policy (Crear política).

    2. Seleccione la pestaña JSON.

    3. Copie la siguiente política de acceso y péguela en el campo de texto de la política.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": ["s3:ListAllMyBuckets"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] } ] }

      Una política es un documento JSON. En el documento, Statement es una matriz de objetos, cada uno describe un permiso con una recopilación de pares nombre-valor. La política anterior describe un permiso específico. El elemento Action especifica el tipo de acceso. En la política, s3:ListAllMyBuckets es una acción predeterminada de Amazon S3. Esta acción abarca la operación GET Service de Amazon S3, que devuelve una lista de todos los buckets que pertenecen al remitente autenticado. El valor del elemento Effect determina si se concede o deniega un permiso específico.

    4. Elija Review Policy (Revisar la política). En la página siguiente, introduzca AllowGroupToSeeBucketListInTheConsole en el campo Name (Nombre) y, a continuación, seleccione Create policy (Crear política).

      nota

      La entrada Summary (Resumen) muestra un mensaje que indica que la política no concede ningún permiso. Para este tutorial, puede hacer caso omiso de este mensaje.

  3. Asocie la política administrada AllowGroupToSeeBucketListInTheConsole que creó para el grupo Consultants.

    Para obtener instrucciones paso a paso acerca de cómo asociar una política administrada, consulte Adición y eliminación de permisos de identidad de IAM en la guía del usuario de IAM.

    Asocie los documentos de la política a los usuarios y grupos de IAM en la consola de IAM. Asocie la política al grupo porque quiere que ambos usuarios puedan mostrar los buckets.

  4. Pruebe el permiso.

    1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio de sesión para usuarios de IAM), inicie sesión en la consola con cualquiera de las credenciales del usuario de IAM.

    2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

      Ahora, la consola debería mostrar todos los buckets pero no los objetos que ellos contienen.

Paso 4.2: Permitir que los usuarios puedan mostrar el contenido en el nivel raíz de un bucket

A continuación, permita a todos los usuarios del grupo Consultants mostrar los elementos del bucket companybucket en el nivel raíz. Cuando un usuario elija el bucket de la empresa en la consola de Amazon S3, podrá ver los elementos del bucket en el nivel raíz.

nota

En este ejemplo se utiliza companybucket a título ilustrativo. Debe utilizar el nombre del bucket que creó.

Es necesario realizar un análisis de forma más detenida para comprender qué solicitud envía la consola a Amazon S3 cuando selecciona el nombre de un bucket, la respuesta que devuelve Amazon S3 y la forma en que la consola interpreta la respuesta.

Al elegir el nombre de un bucket, la consola envía la solicitud GET Bucket (List Objects) a Amazon S3. Esta solicitud incluye los siguientes parámetros:

  • El parámetro prefix con una cadena vacía como valor.

  • El parámetro delimiter con / como valor.

A continuación, se muestra un ejemplo de solicitud.

GET ?prefix=&delimiter=/ HTTP/1.1 Host: companybucket.s3.amazonaws.com Date: Wed, 01 Aug 2012 12:00:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=

Amazon S3 devuelve una respuesta que incluye el siguiente elemento <ListBucketResult/>:

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix></Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>s3-dg.pdf</Key> ... </Contents> <CommonPrefixes> <Prefix>Development/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Finance/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Private/</Prefix> </CommonPrefixes> </ListBucketResult>

La clave del objeto s3-dg.pdf no contiene el delimitador / y Amazon S3 devuelve la clave en el elemento <Contents>. Sin embargo, todas las demás claves de nuestro bucket de ejemplo contienen el delimitador /. Amazon S3 agrupa estas claves y devuelve un elemento <CommonPrefixes> para cada uno de los valores de prefijo diferentes Development/, Finance/ y Private/, que es una subcadena desde el comienzo de estas claves hasta la primera instancia del delimitador / especificado.

La consola interpreta este resultado y muestra los elementos en el nivel raíz como tres carpetas y una clave de objeto.

Si Bob o Alice abren la carpeta Development (Desarrollo), la consola envía la solicitud GET Bucket (List Objects) a Amazon S3 con los parámetros prefix y delimiter establecidos en los siguientes valores:

  • El parámetro prefix con el valor Development/.

  • El parámetro delimiter con el valor “/”.

Como respuesta, Amazon S3 devuelve las claves de objeto que comienzan con el prefijo especificado.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix>Development</Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>Project1.xls</Key> ... </Contents> <Contents> <Key>Project2.xls</Key> ... </Contents> </ListBucketResult>

La consola muestra las claves de objeto.

Ahora, vuelva a conceder permiso a los usuarios para mostrar los elementos del bucket en el nivel raíz. Para mostrar el contenido del bucket, los usuarios necesitan permiso para ejecutar la acción s3:ListBucket, tal como se muestra en la siguiente instrucción de política. Para asegurarse de que vean solo el contenido en el nivel raíz, añada una condición en la que los usuarios deben especificar un parámetro prefix vacío en la solicitud; es decir, no pueden hacer doble clic en ninguna de las carpetas en el nivel raíz. Por último, añada una condición para solicitar acceso de tipo carpeta al pedir que las solicitudes de usuario incluyan el parámetro delimiter con el valor “/”.

{ "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }

Al elegir un bucket de la consola de Amazon S3, la consola envía primero la solicitud GET Bucket location para buscar la Región de AWS donde se encuentra el bucket. A continuación, la consola utiliza el punto de conexión específico de la región del bucket para enviar la solicitud GET Bucket (List Objects). Como resultado, si los usuarios utilizan la consola, debe concederles permiso para ejecutar la acción s3:GetBucketLocation, tal como se muestra en la siguiente instrucción de política.

{ "Sid": "RequiredByS3Console", "Action": ["s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }
Para permitir a los usuarios mostrar el contenido del bucket en el nivel raíz
  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

    Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

  2. Sustituya la política administrada existente AllowGroupToSeeBucketListInTheConsole asociada al grupo Consultants por la siguiente política, que también permite la acción s3:ListBucket. Recuerde sustituir companybucket en la política Resource por el nombre del bucket.

    Para obtener instrucciones paso a paso, consulte Edición de políticas de IAM en la guía de usuario de IAM. Al seguir las instrucciones paso a paso, asegúrese de seguir las indicaciones para aplicar los cambios a todas las entidades principales a las que la política está asociada.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } } ] }
  3. Pruebe los permisos actualizados.

    1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio de sesión para usuarios de IAM), inicie sesión en la AWS Management Console.

      Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

    2. Elija el bucket que creó y la consola mostrará los elementos del bucket en el nivel raíz. Si elige cualquiera de las carpetas del bucket, no podrá ver el contenido de la carpeta, ya que aún no ha concedido esos permisos.

Esta prueba se realiza correctamente cuando los usuarios utilizan la consola de Amazon S3. Cuando elija un bucket en la consola, la implementación de la consola envía una solicitud que incluye el parámetro prefixcon una cadena vacía como valor y el parámetro delimiter con “/” como valor.

Paso 4.3: Resumen de la política de grupo

El resultado final de la política de grupo que añadió es conceder a los usuarios de IAM, Alice y Bob, los siguientes permisos mínimos:

  • Mostrar todos los buckets que pertenecen a la cuenta principal.

  • Ver los elementos del bucket companybucket en el nivel raíz.

Sin embargo, los usuarios aún no pueden hacer demasiado. A continuación, conceda permisos específicos del usuario de la siguiente manera:

  • Permita a Alice obtener y colocar objetos en la carpeta Development.

  • Permita a Bob obtener y colocar objetos en la carpeta Finance.

Para permisos específicos del usuario, asocie una política al usuario específico, no al grupo. En la siguiente sección, conceda permiso a Alice para trabajar en la carpeta Development. Puede repetir los pasos para conceder un permiso similar a Bob para trabajar en la carpeta Finance.

Paso 5: Conceder permisos específicos al usuario Alice de IAM

Ahora debe conceder permisos adicionales a Alice para que pueda ver el contenido de la carpeta Development y obtener y colocar objetos en esa carpeta.

Paso 5.1: Conceder permiso al usuario Alice de IAM para mostrar el contenido de la carpeta Development (Desarrollo)

Para que Alice pueda mostrar el contenido de la carpeta Development, debe aplicar una política al usuario Alice que le conceda permiso para ejecutar la acción s3:ListBucket en el bucket companybucket, siempre que la solicitud incluya el prefijo Development/. Utilice una política insertada, ya que quiere que esta política se aplique únicamente al usuario Alice. Para obtener más información acerca de las políticas insertadas, consulte Políticas administradas y políticas insertadas en la guía del usuario de IAM.

  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

    Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

  2. Cree una política insertada para conceder permiso al usuario Alice para mostrar el contenido de la carpeta Development.

    1. En el panel de navegación de la izquierda, elija Users (Usuarios).

    2. Elija el nombre de usuario Alice.

    3. En la página de detalles del usuario, elija la pestaña Permissions (Permisos) y, a continuación, seleccione Add inline policy (Añadir política insertada).

    4. Seleccione la pestaña JSON.

    5. Copie la siguiente política de acceso y péguela en el campo de texto de la política.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } } ] }
    6. Elija Review Policy (Revisar la política). En la página siguiente, introduzca un nombre en el campo Name (Nombre) y, a continuación, elija Create policy (Crear política).

  3. Pruebe el cambio en los permisos de Alice:

    1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio de sesión para usuarios de IAM), inicie sesión en la AWS Management Console.

    2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

    3. En la consola de Amazon S3, compruebe que Alice pueda ver la lista de objetos en la carpeta Development/ del bucket.

      Cuando el usuario selecciona la carpeta /Development para ver la lista de objetos que contiene, la consola de Amazon S3 envía la solicitud ListObjects a Amazon S3 con el prefijo /Development. Debido a que se le ha concedido permiso al usuario para ver la lista de objetos con el prefijo Development y el delimitador /, Amazon S3 devuelve la lista de objetos con el prefijo de clave Development/ y la consola muestra la lista.

Paso 5.2: Conceder permisos al usuario Alice de IAM para obtener y colocar objetos en la carpeta Development (Desarrollo)

Para que Alice pueda obtener y colocar objetos en la carpeta Development, necesitará permiso para ejecutar las acciones s3:GetObject y s3:PutObject. Las siguientes instrucciones de política conceden estos permisos, siempre que la solicitud incluya el parámetro prefix con un valor de Development/.

{ "Sid":"AllowUserToReadWriteObjectData", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

    Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

  2. Edite la política insertada que creó en el paso anterior.

    1. En el panel de navegación de la izquierda, elija Usuarios.

    2. Elija el nombre de usuario Alice.

    3. En la página de detalles del usuario, elija la pestaña Permisos y expanda la sección Políticas insertadas.

    4. Seleccione Editar política junto al nombre de la política que creó en el paso anterior.

    5. Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política existente.

      { "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] } ] }
  3. Pruebe la política actualizada:

    1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio de sesión para usuarios de IAM), inicie sesión en la AWS Management Console.

    2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3.

    3. En la consola de Amazon S3, compruebe que Alice pueda añadir y descargar un objeto en la carpeta Development.

Paso 5.3: Denegar permisos de forma explícita al usuario Alice de IAM para que no obtenga acceso a ninguna otra carpeta del bucket

El usuario Alice ahora puede mostrar el contenido del bucket companybucket en el nivel raíz. También puede obtener y colocar objetos en la carpeta Development. Si realmente desea ajustar los permisos de acceso, puede denegar de forma explícita el acceso a Alice a cualquier otra carpeta del bucket. Si existe alguna otra política (política de bucket o ACL) que conceda acceso a Alice a otra carpeta del bucket, esta denegación explícita anula estos permisos.

Puede añadir la siguiente instrucción a la política del usuario Alice que requiere que todas las solicitudes que Alice envía a Amazon S3 incluyan el parámetro prefix, cuyo valor puede ser Development/* o una cadena vacía.

{ "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } }

Existen dos expresiones condicionales en el bloque Condition. El resultado de estas expresiones condicionales se combina con el uso de la operación lógica AND. Si ambas condiciones son válidas, el resultado de la condición combinada se considera válido. Dado que el Effect en esta política es Deny, cuando la Condition se considera válida, los usuarios no pueden realizar la Action especificada.

  • La expresión condicional Null asegura que las solicitudes de Alice incluyan el parámetro prefix.

    El parámetro prefix requiere acceso de tipo carpeta. Si envía una solicitud sin el parámetro prefix, Amazon S3 devuelve todas las claves de objeto.

    Si la solicitud incluye el parámetro prefix con un valor nulo, la expresión se considera válida y, por lo tanto, el parámetro Condition también se considera válido. Debe permitir una cadena vacía como valor del parámetro prefix. Recuerde que permitir una cadena nula permite a Alice recuperar los elementos del bucket en el nivel raíz como lo hizo la consola en la explicación anterior. Para obtener más información, consulte Paso 4.2: Permitir que los usuarios puedan mostrar el contenido en el nivel raíz de un bucket.

  • La expresión condicional StringNotLike asegura que la solicitud falle, si se especifica el valor del parámetro prefix y no el parámetro Development/*.

Siga los pasos de la sección anterior y vuelva a actualizar la política insertada que creó para el usuario Alice.

Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política existente.

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }, { "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } } ] }

Paso 6: Conceder permisos específicos al usuario Bob de IAM

Ahora desea conceder permiso a Bob para trabajar en la carpeta Finance. Siga los pasos realizados anteriormente para conceder permisos a Alice, pero sustituya la carpeta Development por la carpeta Finance. Para obtener instrucciones paso a paso, consulte Paso 5: Conceder permisos específicos al usuario Alice de IAM.

Paso 7: Proteger la carpeta privada

En este ejemplo, tiene solo dos usuarios. Concedió todos los permisos mínimos requeridos en el nivel de grupo y los permisos en el nivel de usuario solo cuando realmente se requerían permisos en el nivel de usuario individual. Este enfoque ayuda a reducir el esfuerzo para administrar los permisos. A medida que el número de usuarios aumenta, administrar los permisos puede ser complicado. Por ejemplo, no quiere que ninguno de los usuarios de este ejemplo obtenga acceso al contenido de la carpeta Private. ¿Cómo asegurarse de no conceder permisos accidentalmente al usuario? Añada una política que deniegue explícitamente el acceso a la carpeta. Una denegación explícita anula cualquier otro permiso.

Para asegurarse de que la carpeta Private sea privada, puede añadir estas dos instrucciones de denegación a la política de grupo:

  • Añada la siguiente instrucción para denegar explícitamente cualquier acción sobre los recursos de la carpeta Private (companybucket/Private/*).

    { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }
  • Además, deniegue el permiso para mostrar la acción de los objetos cuando la solicitud especifica el prefijo Private/. Si Bob o Alice abren la carpeta Private en la consola, esta política hace que Amazon S3 devuelva una respuesta de error.

    { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } }

Sustituya la política del grupo Consultants por una política actualizada que incluya las instrucciones de denegación anteriores. Después de aplicar la política actualizada, ninguno de los usuarios del grupo puede obtener acceso a la carpeta Private de su bucket.

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

    Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

  2. Sustituya la política administrada existente AllowGroupToSeeBucketListInTheConsole que se encuentra asociada al grupo Consultants por la siguiente política. Recuerde sustituir companybucket en la política por el nombre de su bucket.

    Para obtener instrucciones, consulte Edición de políticas de IAM en la guía del usuario de IAM. Al seguir las instrucciones, asegúrese de seguir las indicaciones para aplicar los cambios a todas las entidades principales a las que la política está asociada.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{"s3:prefix":[""]} } }, { "Sid": "RequireFolderStyleList", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringNotEquals":{"s3:delimiter":"/"} } }, { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }, { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } } ] }

Paso 8: Limpiar

Para realizar una limpieza, abra la consola de IAM y elimine los usuarios Alice y Bob. Para obtener instrucciones paso a paso, consulte Eliminación de un usuario de IAM en la guía del usuario de IAM.

Para asegurarse de que no le apliquen cargos adicionales por almacenamiento, debe eliminar los objetos y el bucket que creó para este ejercicio.

Recursos relacionados