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.
Temas
- Conceptos básicos de buckets y carpetas
- Resumen del tutorial
- Prepararse para el tutorial
- Paso 1: Crear un bucket
- Paso 2: Crear usuarios y un grupo de IAM
- Paso 3: Comprobar que los usuarios de IAM no tengan permisos
- Paso 4: Conceder permisos en el nivel de grupo
- Paso 5: Conceder permisos específicos al usuario Alice de IAM
- Paso 6: Conceder permisos específicos al usuario Bob de IAM
- Paso 7: Proteger la carpeta privada
- Paso 8: Limpiar
- Recursos relacionados
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 claveDevelopment/
. Tenga en cuenta el delimitador final (/
). -
Al cargar un objeto denominado
Projects1.xls
en la carpetaDevelopment
, la consola carga el objeto y le asigna la claveDevelopment/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 carpetaDevelopment
, la consola muestra los objetos de esa carpeta. En el siguiente ejemplo, la carpetaDevelopment
contiene un objeto.Cuando la consola muestra la carpeta
Development
del bucketcompanybucket
, envía una solicitud a Amazon S3 en la que especifica el prefijoDevelopment
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 bucketcompanybucket
tiene un objeto con la claveDevelopment/Projects1.xls
.
La consola utiliza claves de objeto para inferir una jerarquía lógica. Amazon S3 no tiene una jerarquía física. Amazon S3 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/
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
-
Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/
. -
En el panel de Navigation (Navegación), elija IAM Dashboard (Panel de IAM).
-
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 al bucket y cargue uno o dos documentos de ejemplo en cada carpeta.
Inicie sesión AWS Management Console Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/
. -
Cree un bucket.
Para obtener instrucciones paso a paso, consulte Crear un bucket.
-
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 pors3-dg.pdf
. -
Añada las tres carpetas denominadas
Private
,Finance
yDevelopment
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.
-
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
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 la 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.
-
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.
-
Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3
. Verifique el mensaje de la consola en el que se 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óns3:ListBucket
en el bucketcompanybucket
.
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.
-
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.
-
Cree la política administrada.
-
En el panel de navegación de la izquierda, elija Policies (Políticas) y, a continuación, seleccione Create Policy (Crear política).
-
Seleccione la pestaña JSON.
-
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 elementoAction
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 elementoEffect
determina si se concede o deniega un permiso específico. -
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.
-
-
Asocie la política administrada
AllowGroupToSeeBucketListInTheConsole
que creó para el grupoConsultants
.Para obtener instrucciones paso a paso acerca de cómo asociar una política administrada, consulte Agregació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.
-
Pruebe el permiso.
-
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.
-
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ó.
Para comprender qué solicitud envía la consola a Amazon S3 cuando elige el nombre de un bucket, la respuesta que devuelve Amazon S3 y la forma en que la consola interpreta la respuesta, examine el flujo de forma más detenida.
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 valorDevelopment/
. -
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
-
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.
-
Sustituya la política administrada existente
AllowGroupToSeeBucketListInTheConsole
asociada al grupoConsultants
por la siguiente política, que también permite la accións3:ListBucket
. Recuerde sustituir
en la políticacompanybucket
Resource
por el nombre de su 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":["/"] } } } ] } -
Pruebe los permisos actualizados.
-
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
. -
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 prefix
con 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 sobre las políticas insertadas, consulte Políticas administradas e insertadas en la Guía del usuario de IAM.
-
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.
-
Cree una política insertada para conceder permiso al usuario Alice para mostrar el contenido de la carpeta
Development
.-
En el panel de navegación de la izquierda, elija Users (Usuarios).
-
Elija el nombre de usuario Alice.
-
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).
-
Seleccione la pestaña JSON.
-
Copie la siguiente política 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/*"] } } } ] } -
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).
-
-
Pruebe el cambio en los permisos de Alice:
-
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
. -
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 solicitudListObjects
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 prefijoDevelopment
y el delimitador/
, Amazon S3 devuelve la lista de objetos con el prefijo de claveDevelopment/
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/*"] }
-
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.
-
Edite la política insertada que creó en el paso anterior.
En el panel de navegación de la izquierda, elija Usuarios.
Elija el nombre de usuario Alice.
En la página de detalles del usuario, elija la pestaña Permisos y expanda la sección Políticas insertadas.
Seleccione Editar política junto al nombre de la política que creó en el paso anterior.
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/*"] } ] }
-
Pruebe la política actualizada:
-
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
. -
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ámetroprefix
.El parámetro
prefix
requiere acceso de tipo carpeta. Si envía una solicitud sin el parámetroprefix
, 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ámetroCondition
también se considera válido. Debe permitir una cadena vacía como valor del parámetroprefix
. 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ámetroprefix
y no el parámetroDevelopment/*
.
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 la carpeta Private
? 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 carpetaPrivate
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.
-
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.
-
Sustituya la política administrada existente
AllowGroupToSeeBucketListInTheConsole
que se encuentra asociada al grupoConsultants
por la siguiente política. Recuerde sustituir
en la política por el nombre de su bucket.companybucket
Para obtener instrucciones, consulte Edición de políticas administradas por el cliente 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
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
Administración de políticas de IAM en la guía del usuario de IAM