Compartir los recursos compartidos de datos - Amazon Redshift

Compartir los recursos compartidos de datos

Solo necesita los recursos compartidos de datos al compartir datos entre distintos clústeres aprovisionados o grupos de trabajo sin servidor de Amazon Redshift. Dentro del mismo clúster, puede consultar otra base de datos mediante una notación simple de tres partes database.schema.table, siempre que disponga de los permisos necesarios en los objetos de la otra base de datos.

Administración de permisos para recursos compartidos de datos en Amazon Redshift

Como administrador del clúster productor, conserva el control de los conjuntos de datos que comparte. Puede agregar objetos nuevos al datashare o quitárselos. También puede otorgar o revocar el acceso a los recursos compartidos de datos en su conjunto para los clústeres consumidores, las cuentas de AWS y las regiones de AWS. Cuando se revocan los permisos, los clústeres consumidores pierden inmediatamente el acceso a los objetos compartidos y dejan de verlos en la lista de recursos compartidos de datos INBOUND en SVV_DATASHARES.

En el siguiente ejemplo, se crea el recurso compartido de datos salesshare, se agrega el esquema public y se agrega la tabla public.tickit_sales_redshift a salesshare. También se otorgan permisos de uso en salesshare al espacio de nombres de clúster especificado.

CREATE DATASHARE salesshare; ALTER DATASHARE salesshare ADD SCHEMA public; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

Para CREATE DATASHARE, los superusuarios y los propietarios de bases de datos pueden crear datashares. Para obtener más información, consulte CREATE DATASHARE. En el caso de ALTER DATASHARE, el propietario del datashare que cuenta con los permisos necesarios sobre los objetos del datashare que se van a agregar o quitar, puede modificar el datashare. Para obtener más información, consulte ALTER DATASHARE.

Como el administrador de un productor, cuando elimina un datashare, este deja de aparecer en las listas de los clústeres consumidores. Las referencias a bases de datos y esquema creadas en el clúster consumidor a partir de los datashares eliminados siguen existiendo, aunque no hay ningún objeto en ellas. El administrador del clúster consumidor debe eliminar estas bases de datos de forma manual.

En el lado del consumidor, un administrador de un clúster del consumidor puede determinar qué usuarios y roles deben tener acceso a los datos compartidos al crear una base de datos a partir del recurso compartido de datos. Según las opciones que elija al crear la base de datos, puede controlar el acceso a la misma de la siguiente manera. Para obtener más información acerca de la creación de una base de datos a partir de un recurso compartido de datos, consulte CREATE DATABASE.

Para obtener más información sobre cómo configurar un recurso compartido de datos y leer los datos de un consumidor, consulte Uso compartido del acceso de lectura a los datos en una cuenta de AWS.

Crear la base de datos sin la cláusula WITH PERMISSIONS

El administrador puede controlar el acceso en el nivel de la base de datos o del esquema. Para controlar el acceso en el nivel de esquema, el administrador debe crear un esquema externo a partir de la base de datos de Amazon Redshift creada desde el recurso compartido de datos.

En el siguiente ejemplo, se otorgan permisos para acceder a una tabla compartida en el nivel de la base de datos y del esquema.

GRANT USAGE ON DATABASE sales_db TO Bob; CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public'; GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

Para restringir aún más el acceso, puede crear vistas encima de los objetos compartidos para así exponer solo los datos necesarios. Luego, puede utilizar estas vistas para brindar acceso a los usuarios y los roles.

Una vez que a los usuarios se les conceda acceso a la base de datos o al esquema, tendrán acceso a todos los objetos compartidos de esa base de datos o esquema.

Crear la base de datos con la cláusula WITH PERMISSIONS

Tras conceder los derechos de uso en la base de datos o el esquema, un administrador puede controlar aún más el acceso mediante el mismo proceso de concesión de permisos que utilizaría en una base de datos o esquema local. Sin permisos de objetos individuales, los usuarios no pueden acceder a ningún objeto de la base de datos o el esquema de datos compartidos, incluso después de que les conceda el permiso USAGE.

En el siguiente ejemplo, se otorgan permisos para acceder a una tabla compartida en el nivel de la base de datos.

GRANT USAGE ON DATABASE sales_db TO Bob; GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob; GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;

Una vez que se les haya concedido el acceso a la base de datos o al esquema, los usuarios seguirán necesitando los permisos correspondientes para cualquier objeto de la base de datos o el esquema al que desee que accedan.

Uso compartido detallado mediante WITH PERMISSIONS (versión preliminar)

Permitir que los clústeres o grupos de trabajo sin servidor consulten el recurso compartido de datos

En este paso se supone que el recurso compartido de datos proviene de otro clúster o espacio de nombres de Amazon Redshift sin servidor de su cuenta, o bien proviene de otra cuenta y se ha asociado al espacio de nombres que está utilizando.

  1. El administrador de la base de datos del consumidor puede crear una base de datos a partir del recurso compartido de datos.

    CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';

    Si crea una base de datos WITH PERMISSIONS, puede conceder permisos detallados sobre los objetos del recurso compartido de datos a diferentes usuarios y roles. Sin esto, a todos los usuarios y roles a los que se les conceda el permiso USAGE en la base de datos de recurso compartido de datos se les conceden todos los permisos en todos los objetos de la base de datos de recurso compartido de datos.

  2. A continuación, se muestra cómo conceder permisos a un usuario o rol de base de datos de Redshift. Debe estar conectado a una base de datos local para ejecutar estas instrucciones. No puede ejecutar estas instrucciones si ejecuta un comando USE en la base de datos de recurso compartido de datos antes de ejecutar las instrucciones de concesión.

    GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng; GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT USAGE ON DATABASE my_ds_db TO bi_user; GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user; GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;

Uso compartido de datos con vistas en Amazon Redshift

El clúster productor puede compartir vistas normales, de enlace de tiempo de ejecución y materializadas. Cuando comparte vistas normales o de enlace de tiempo de ejecución, no tiene que compartir las tablas base. En la siguiente tabla, se muestra cómo se admiten las vistas en el uso compartido de datos.

Nombre de la vista ¿Se puede agregar esta vista a un datashare? ¿Un consumidor puede crear esta vista en los objetos de los datashares en distintos clústeres?
Vista normal No
Vista de enlace en tiempo de ejecución
Vista materializada Sí, pero solo con una actualización completa

La siguiente consulta muestra el resultado de una vista normal que es compatible con el uso compartido de datos. Para obtener información acerca de la definición de la vista normal, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.myevent_regular_vw ORDER BY eventid LIMIT 5; eventid | eventname ----------+------------- 3835 | LeAnn Rimes 3967 | LeAnn Rimes 4856 | LeAnn Rimes 4948 | LeAnn Rimes 5131 | LeAnn Rimes

La siguiente consulta muestra el resultado de una vista de enlace en tiempo de ejecución que es compatible con el uso compartido de datos. Para obtener información sobre la definición de la vista de enlace en tiempo de ejecución, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.event_lbv ORDER BY eventid LIMIT 5; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+------------------------------+--------------------- 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00

La siguiente consulta muestra el resultado de una vista materializada que es compatible con el uso compartido de datos. Para obtener información acerca de la definición de la vista materializada, consulte CREATE MATERIALIZED VIEW.

SELECT * FROM tickit_db.public.tickets_mv; catgroup | qtysold ----------+--------- Concerts | 195444 Shows | 149905

Puede mantener tablas comunes para todos los usuarios de un clúster productor. También puede compartir subconjuntos de datos filtrados por las columnas de dimensión, como tenant_id (account_id o namespace_id), con los clústeres consumidores. Para ello, puede definir una vista en la tabla base con un filtro en estas columnas de ID; por ejemplo, current_aws_account = tenant_id. En el lado del consumidor, cuando consulta la vista, solo ve las filas que califican para su cuenta. Para ello, puede utilizar las funciones de contexto current_aws_account y current_namespace de Amazon Redshift.

La siguiente consulta devuelve el ID de la cuenta en la que se encuentra el clúster actual de Amazon Redshift. Puede ejecutar esta consulta si está conectado a Amazon Redshift.

select current_user, current_aws_account; current_user | current_aws_account -------------+-------------------- dwuser | 111111111111 (1row)

La siguiente consulta devuelve el espacio de nombres del clúster actual de Amazon Redshift. Puede ejecutar esta consulta si está conectado a la base de datos.

select current_user, current_namespace; current_user | current_namespace -------------+-------------------------------------- dwuser | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8 (1 row)

Actualización incremental para obtener vistas materializadas en un recurso compartido de datos

Amazon Redshift admite la actualización incremental de las vistas materializadas en un recurso compartido de datos de consumidores cuando se comparten las tablas base. La actualización incremental es una operación en la que Amazon Redshift identifica los cambios en la tabla o tablas base que se produjeron después de la actualización anterior y actualiza solo los registros correspondientes de la vista materializada. Para obtener más información sobre este comportamiento, consulte CREATE MATERIALIZED VIEW.

Administración del acceso a las operaciones de la API de uso compartido de datos con las políticas de IAM

Para controlar el acceso a las operaciones de la API de uso compartido de datos, utilice políticas basadas en acciones de IAM. Para obtener información sobre cómo administrar las políticas de IAM, consulte Administración de las políticas de IAM en la Guía del usuario de IAM.

Para obtener información sobre los permisos necesarios para utilizar las operaciones de la API de uso compartido de datos, consulte Permisos necesarios para utilizar las operaciones de la API de uso compartido de datos en la Guía de administración de Amazon Redshift.

Para que el uso compartido de datos entre cuentas sea más seguro, puede utilizar una clave condicional ConsumerIdentifier para las operaciones de la API AuthorizeDataShare y DeauthorizeDataShare. De este modo, puede controlar de manera explícita qué Cuentas de AWS pueden realizar llamadas a las dos operaciones de la API.

Puede denegar la autorización del uso compartido de datos, o desautorizarlo, para cualquier consumidor que no sea su propia cuenta. Para ello, especifique el número de Cuenta de AWS en la política de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringNotEquals": { "redshift:ConsumerIdentifier": "555555555555" } } } ] }

Puede permitir que un productor con un DatasHareARarn testshare2 comparta de forma explícita con un consumidor con una Cuenta de AWS de 111122223333 en la política de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "arn:aws:redshift:us-east-1:666666666666:datashare:af06285e-8a45-4ee9-b598-648c218c8ff1/testshare2", "Condition": { "StringEquals": { "redshift:ConsumerIdentifier": "111122223333" } } } ] }