Ejemplo 3: propietario del bucket que concede a sus usuarios permisos para objetos que no posee
importante
Conceder permisos a roles de IAM es preferible a conceder permisos a usuarios individuales. Para obtener información sobre como hacer esto, consulte Descripción de permisos entre cuentas y uso de roles de IAM.
Temas
El escenario para este ejemplo es que el propietario de un bucket desea conceder permiso para acceder a objetos, pero no todos los objetos del bucket pertenecen al propietario del bucket. Para este ejemplo, el propietario del bucket intenta conceder permiso a usuarios en su propia cuenta.
El propietario del bucket puede habilitar otras Cuentas de AWS para cargar objetos. De forma predeterminada, el propietario del bucket no posee objetos escritos en un bucket por otra Cuenta de AWS. Los objetos pertenecen a las cuentas que los escriben en un bucket de S3. Si el propietario del bucket no posee objetos en el bucket, el propietario del objeto primero debe conceder permiso al propietario del bucket con una lista de control de acceso (ACL) del objeto. A continuación, el propietario del bucket puede conceder permisos a un objeto que no posee. Para obtener más información, consulte Propiedad de los buckets y objetos de Amazon S3.
Si el propietario del bucket aplica la configuración de propietario del bucket obligatorio de S3 Object Ownership para el bucket, el propietario del bucket será el propietario de todos los objetos del bucket, incluidos los objetos escritos por otra Cuenta de AWS. Este enfoque resuelve el problema de que los objetos no pertenecen al propietario del bucket. A continuación, puede delegar permisos a los usuarios de su propia cuenta o a otras Cuentas de AWS.
nota
S3 Object Ownership es una configuración de bucket de Amazon S3 que puede usar para controlar la propiedad de los objetos que se cargan en el bucket y para activar o desactivar las ACL. De forma predeterminada, la propiedad de objetos se establece en la configuración impuesta por el propietario del bucket. Además, todas las ACL están deshabilitadas. Cuando las ACL están deshabilitadas, el propietario del bucket posee todos los objetos del bucket y administra su acceso de forma exclusiva mediante políticas de administración de acceso.
La mayoría de los casos de uso modernos de Amazon S3 ya no requieren el uso de ACL. Le recomendamos desactivar las ACL, excepto en circunstancias inusuales en las que necesite controlar el acceso a cada objeto de manera individual. Si las ACL están desactivadas, puede usar políticas para controlar el acceso a todos los objetos del bucket, independientemente de quién haya subido los objetos al bucket. Para obtener más información, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket.
En este ejemplo, asumimos que el propietario del bucket no ha aplicado la configuración de propietario del bucket obligatorio de Object Ownership. El propietario del bucket delega permiso a usuarios en su propia cuenta. A continuación, se muestra un resumen de los pasos del tutorial:
-
El usuario administrador de la cuenta A adjunta una política de bucket con dos instrucciones.
-
Conceda permiso entre cuentas a la cuenta B para cargar objetos.
-
Permita que un usuario en su propia cuenta pueda acceder a los objetos en el bucket.
-
-
El usuario administrador de la cuenta B carga objetos al bucket que pertenece a la cuenta A.
-
El administrador de la cuenta B actualiza la ACL de objetos y le concede al propietario del bucket permiso de control total sobre el objeto.
-
El usuario de la cuenta A lo verifica al acceder a los objetos en el bucket, independientemente de quién es el propietario.
Para este ejemplo, necesita dos cuentas. La siguiente tabla muestra cómo denominamos a estas cuentas y a los usuarios administradores en estas cuentas. En este tutorial, no utilizará las credenciales de usuario raíz de la cuenta, de acuerdo con las directrices recomendadas de IAM. Para obtener más información, consulte Acerca del uso de un usuario administrador para crear recursos y conceder permisos. En cambio, usted crea un administrador en cada cuenta y usa esas credenciales para crear recursos y conceder permisos.
ID de Cuenta de AWS | Cuenta denominada | Administrador en la cuenta |
---|---|---|
|
Cuenta A |
AccountAadmin |
|
Cuenta B |
AccountBadmin |
Todas las tareas de creación de usuarios y concesión de permisos se realizan en la AWS Management Console. Para verificar los permisos, en la explicación se utilizan herramientas de la línea de comandos, AWS Command Line Interface (AWS CLI) y AWS Tools for Windows PowerShell, por lo que no necesita escribir código.
Paso 0: Prepararse para el tutorial
-
Asegúrese de tener dos Cuentas de AWS y que cada cuenta tenga un administrador, como se muestra en la tabla de la sección anterior.
-
Si lo necesita, regístrese para obtener una Cuenta de AWS.
-
Con las credenciales de la cuenta A, inicie sesión en la consola de IAM
y haga lo siguiente para crear un usuario administrador: -
Cree al usuario
AccountAadmin
y tenga en cuenta las credenciales de seguridad del mismo. Para obtener más información sobre cómo agregar usuarios, consulte Creación de un usuario de IAM en su Cuenta de AWS en la Guía del usuario de IAM. -
Conceda permisos de administrador a AccountAadmin al asociar una política de usuario que conceda acceso completo. Para obtener instrucciones, consulte Administración de políticas de IAM en la Guía del usuario de IAM.
-
En el panel de la consola de IAM
, tenga en cuenta la URL de inicio de sesión de usuario de IAM. Los usuarios de esta cuenta deben usar esta dirección URL para iniciar sesión en la AWS Management Console. Para obtener más información, consulte Cómo los usuarios inician sesión en la cuenta en la Guía del usuario de IAM.
-
-
Repita el paso anterior con las credenciales de la cuenta B y cree el usuario administrador
AccountBadmin
.
-
-
Configure AWS CLI o Tools for Windows PowerShell. Asegúrese de guardar las credenciales de administrador de la siguiente manera:
-
Si está usando la AWS CLI, cree dos perfiles,
AccountAadmin
yAccountBadmin
, en el archivo de configuración. -
Si utiliza Tools for Windows PowerShell, asegúrese de almacenar las credenciales de la sesión como
AccountAadmin
yAccountBadmin
.
Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales.
-
Paso 1: Realizar las tareas de la cuenta A
Realice los siguientes pasos para la cuenta A:
Paso 1.1: Iniciar sesión en la consola
Con la URL de inicio de sesión de usuario de IAM para la cuenta A, inicie sesión en la AWS Management Console como el usuario AccountAadmin
. Este usuario creará un bucket y le asociará una política.
Paso 1.2: Crear un bucket y un usuario y agregar una política de bucket para conceder permisos de usuario
-
En la consola de Amazon S3, cree un bucket. En este ejercicio se supone que el bucket se crea en la Región de AWS Este de EE. UU. (Norte de Virginia) y el nombre es
.amzn-s3-demo-bucket1
Para obtener instrucciones, consulte Crear un bucket.
-
En la Consola de IAM
, cree un usuario, Dave
.Para obtener instrucciones paso a paso, consulte Creación de usuarios de IAM (consola) en la Guía del usuario de IAM.
-
Tenga en cuenta las credenciales del usuario Dave.
-
En la consola de Amazon S3, adjunte la siguiente política de bucket al bucket
. Para obtener instrucciones, consulte Agregar una política de bucket mediante la consola de Amazon S3. Siga los pasos para añadir una política de bucket. Para obtener información acerca de cómo buscar ID de cuenta, consulte Búsqueda de su ID de Cuenta de AWS.amzn-s3-demo-bucket1
La política le concede a la cuenta B permisos para
s3:PutObject
ys3:ListBucket
. La política también le concede al usuarioDave
el permisos3:GetObject
.{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*", "arn:aws:s3:::amzn-s3-demo-bucket1
" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*" ] } ] }
Paso 2: Realizar las tareas de la cuenta B
Ahora que la cuenta B tiene permisos para realizar operaciones en el bucket de la cuenta A, el administrador de la cuenta B hace lo siguiente:
-
Carga un objeto en el bucket de la cuenta A
-
Agrega un permiso en la ACL de objetos para concederle el control total al propietario del bucket de la cuenta A
Uso de la AWS CLI
-
Mediante el uso del comando
put-object
de la AWS CLI, cargue un objeto. El parámetro--body
en el comando identifica el archivo de origen para cargar. Por ejemplo, si el archivo está en la unidadC:
de un equipo Windows, debe especificarc:\HappyFace.jpg
. El parámetro--key
brinda el nombre de clave para el objeto.aws s3api put-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin -
Añada un permiso a la ACL de objetos para concederle al propietario del bucket el control total del objeto. Para obtener información acerca de cómo encontrar un ID de usuario canónico, consulte Buscar el ID de usuario canónico de su Cuenta de AWS en la Guía de referencia de la Administración de cuentas de AWS.
aws s3api put-object-acl --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
Uso de Tools for Windows PowerShell
-
Mediante el uso del comando
Write-S3Object
, cargue un objeto.Write-S3Object -BucketName
amzn-s3-demo-bucket1
-key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin -
Añada un permiso a la ACL de objetos para concederle al propietario del bucket el control total del objeto.
Set-S3ACL -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden
Paso 3: Probar los permisos
Ahora verifique que el usuario Dave en la cuenta A pueda acceder al objeto propiedad de la cuenta B.
Uso de la AWS CLI
-
Agregue las credenciales del usuario Dave al archivo de configuración de la AWS CLI y cree un nuevo perfil,
UserDaveAccountA
. Para obtener más información, consulte Configuración de las herramientas para los tutoriales.[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
Ejecute el comando
get-object
CLI para descargarloHappyFace.jpg
y guardarlo localmente. Para proporcionar las credenciales del usuario Dave, debe añadir el parámetro--profile
.aws s3api get-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpgOutputfile.jpg
--profile UserDaveAccountA
Uso de Tools for Windows PowerShell
-
Almacene las credenciales del usuario Dave de AWS, como
UserDaveAccountA
, en el almacén persistente.Set-AWSCredentials -AccessKey
UserDave-AccessKey
-SecretKeyUserDave-SecretAccessKey
-storeas UserDaveAccountA -
Ejecute el
Read-S3Object
comando para descargar elHappyFace.jpg
objeto y guárdelo localmente. Para proporcionar las credenciales del usuario Dave, debe añadir el parámetro-StoredCredentials
.Read-S3Object -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA
Paso 4: Limpiar
-
Después de que haya terminado de probar, puede realizar lo siguiente para limpiar:
-
Inicie sesión en la AWS Management Console
con las credenciales de la cuenta A y haga lo siguiente: -
En la consola de Amazon S3, elimine la política de bucket asociada a
amzn-s3-demo-bucket1
. En Propiedades del bucket, elimine la política en la sección Permisos. -
Si se creó el bucket para este ejercicio, en la consola de Amazon S3, elimine los objetos y luego elimine el bucket.
-
En la consola de IAM
, quite el usuario AccountAadmin. Para obtener instrucciones paso a paso, consulte Eliminación de un usuario de IAM en la Guía del usuario de IAM.
-
-
-
Inicie sesión en la AWS Management Console
con las credenciales de la cuenta B. En la consola de IAM , elimine el usuario AccountBadmin.