데이터 공유 공유 - Amazon Redshift

데이터 공유 공유

서로 다른 Amazon Redshift 프로비저닝 클러스터 또는 서버리스 작업 그룹 간에 데이터를 공유할 때만 데이터 공유가 필요합니다. 다른 데이터베이스의 객체에 대해 필요한 권한이 있는 한, 동일한 클러스터 내에서 간단한 세 부분으로 구성된 표기법 database.schema.table을 사용하여 다른 데이터베이스를 쿼리할 수 있습니다.

Amazon Redshift에서 datashare에 대한 권한 관리

생산자 클러스터 관리자는 공유 중인 데이터 집합에 대한 제어 권한을 보유합니다. 따라서 datashare에서 새 객체를 추가하거나 제거할 수 있습니다. 소비자 클러스터 및 AWS 계정 또는 AWS 리전에 대해 전체적으로 datashare에 대한 액세스 권한을 부여하거나 취소할 수도 있습니다. 권한이 취소되면 소비자 클러스터는 즉시 공유 객체에 대한 액세스 권한을 상실하고 SVV_DATASHARES의 INBOUND datashare 목록에서 해당 객체를 볼 수 없습니다.

다음 예제에서는 salesshare 데이터 공유를 만들고, public 스키마를 추가하고, public.tickit_sales_redshift 테이블을 salesshare에 추가합니다. 또한 특정 클러스터 네임스페이스에 salesshare에 대한 사용 권한을 부여합니다.

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';

CREATE DATASHARE의 경우 슈퍼 사용자와 데이터베이스 소유자는 datashare를 생성할 수 있습니다. 자세한 내용은 CREATE DATASHARE 단원을 참조하십시오. ALTER DATASHARE의 경우 추가하거나 제거할 datashare 객체에 대한 필수 권한이 있는 datashare 소유자는 datashare를 변경할 수 있습니다. 자세한 내용은 ALTER DATASHARE을 참조하세요.

생산자 관리자가 삭제한 datashare는 소비자 클러스터에 더 이상 나열되지 않습니다. 삭제된 datashare에서 소비자 클러스터에 생성된 데이터베이스 및 스키마 참조는 객체 없이 계속 존재합니다. 소비자 클러스터 관리자는 수동으로 이러한 데이터베이스를 삭제해야 합니다.

소비자 측에서 소비자 클러스터 관리자는 데이터 공유에서 데이터베이스를 생성하여 공유 데이터에 액세스해야 하는 사용자와 역할을 결정할 수 있습니다. 데이터베이스를 생성할 때 선택한 옵션에 따라 다음과 같이 데이터베이스 액세스를 제어할 수 있습니다. 데이터 공유에서 데이터베이스 생성에 대한 자세한 내용은 데이터베이스 생성 섹션을 참조하세요.

WITH PERMISSIONS 절을 사용하지 않고 데이터베이스 생성

관리자는 데이터베이스 또는 스키마 수준에서 액세스를 제어할 수 있습니다. 스키마 수준에서 액세스를 제어하려면 관리자는 데이터 공유에서 생성된 Amazon Redshift 데이터베이스에서 외부 스키마를 생성해야 합니다.

다음 예에서는 데이터베이스 수준 및 스키마 수준에서 공유 테이블에 액세스할 수 있는 권한을 부여합니다.

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;

액세스를 추가로 제한하려면 공유 객체 위에 뷰를 생성하여 필요한 데이터만 표시할 수 있습니다. 그런 다음 이러한 뷰를 사용하여 사용자와 역할에 대한 액세스 권한을 부여할 수 있습니다.

사용자에게 데이터베이스 또는 스키마에 대한 액세스 권한이 부여되면 해당 데이터베이스 또는 스키마의 모든 공유 객체에 액세스할 수 있습니다.

WITH PERMISSIONS 절을 사용하여 데이터베이스 생성

데이터베이스 또는 스키마에 대한 사용 권한을 부여한 후 관리자는 로컬 데이터베이스 또는 스키마에서와 동일한 권한 부여 프로세스를 사용하여 액세스를 추가로 제어할 수 있습니다. 개별 객체 권한이 없으면 사용자는 USAGE 권한을 부여받은 후에도 데이터 공유 데이터베이스 또는 스키마의 객체에 액세스할 수 없습니다.

다음 예에서는 데이터베이스 수준에서 공유 테이블에 액세스할 수 있는 권한을 부여합니다.

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;

데이터베이스 또는 스키마에 대한 액세스 권한을 부여받은 후에도 사용자는 액세스하려는 데이터베이스 또는 스키마의 모든 객체에 대한 관련 권한을 부여받아야 합니다.

WITH PERMISSIONS를 사용한 세분화된 공유(미리 보기)

클러스터 또는 Serverless 작업 그룹이 데이터 공유를 쿼리할 수 있도록 지원

이 단계에서는 데이터 공유가 사용자 계정의 다른 클러스터 또는 Amazon Redshift Serverless 네임스페이스에서 시작되거나 다른 계정에서 가져왔고 사용 중인 네임스페이스와 연결되어 있다고 가정합니다.

  1. 소비자 데이터베이스 관리자는 데이터 공유에서 데이터베이스를 생성할 수 있습니다.

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

    WITH PERMISSIONS를 사용하여 데이터베이스를 생성하는 경우 데이터 공유 객체에 대한 세분화된 권한을 다양한 사용자 및 역할에 부여할 수 있습니다. 이렇게 하지 않으면 데이터 공유 데이터베이스에 대한 USAGE 권한이 부여된 모든 사용자 및 역할에 데이터 공유 데이터베이스 내의 모든 객체에 대한 모든 권한이 부여됩니다.

  2. 다음은 Redshift 데이터베이스 사용자 또는 역할에 권한을 부여하는 방법을 보여줍니다. 이 문을 실행하려면 로컬 데이터베이스에 연결되어 있어야 합니다. 권한 부여 문을 실행하기 전에 데이터 공유 데이터베이스에서 USE 명령을 실행하면 이러한 문을 실행할 수 없습니다.

    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;

Amazon Redshift 데이터 공유에서 보기 작업

생산자 클러스터는 일반, 후기 바인딩 및 구체화된 뷰를 공유할 수 있습니다. 일반 뷰 또는 후기 바인딩 뷰를 공유할 때 기본 테이블을 공유할 필요가 없습니다. 다음 표에서는 datashare에서 뷰가 지원되는 방식을 보여줍니다.

뷰 이름 datashare에 이 뷰를 추가할 수 있습니까? 소비자가 클러스터 전체의 datashare 객체에 대해 이 뷰를 생성할 수 있습니까?
일반 뷰 아니요
후기 바인딩 보기
구체화된 뷰 예, 그러나 전체 새로 고침을 수행하는 경우에만 가능합니다.

다음 쿼리는 datashare와 함께 지원되는 일반 뷰의 출력을 보여줍니다. 일반 뷰 정의에 대한 자세한 내용은 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

다음 쿼리는 데이터 공유와 함께 지원되는 후기 바인딩 보기의 출력을 보여줍니다. 후기 바인딩 보기 정의에 대한 자세한 내용은 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

다음 쿼리는 datashare와 함께 지원되는 구체화된 뷰의 출력을 보여줍니다. 구체화된 뷰 정의에 대한 자세한 내용은 CREATE MATERIALIZED VIEW 섹션을 참조하세요.

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

생산자 클러스터의 모든 테넌트에서 공통 테이블을 유지 관리할 수 있습니다. 또한 tenant_id(account_id 또는 namespace_id)와 같은 차원 열로 필터링된 데이터의 하위 집합을 소비자 클러스터와 공유할 수 있습니다. 이를 위해 이러한 ID 열(예: current_aws_account = tenant_id)에 대한 필터를 사용하여 기본 테이블에 대한 뷰를 정의할 수 있습니다. 소비자 측에서 뷰를 쿼리하면 계정에 적합한 행만 표시됩니다. 이를 위해 Amazon Redshift 컨텍스트 함수 current_aws_accountcurrent_namespace를 사용할 수 있습니다.

다음 쿼리는 현재 Amazon Redshift 클러스터가 있는 계정 ID를 반환합니다. Amazon Redshift에 연결된 경우 이 쿼리를 실행할 수 있습니다.

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

다음 쿼리는 현재 Amazon Redshift 클러스터의 네임스페이스를 반환합니다. 데이터베이스에 연결되어 있으면 이 쿼리를 실행할 수 있습니다.

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

데이터 공유의 구체화된 뷰에 대한 증분 새로 고침

Amazon Redshift는 기본 테이블이 공유될 때 소비자 데이터 공유의 구체화된 뷰에 대한 증분 새로 고침을 지원합니다. 증분 새로 고침은 Amazon Redshift가 이전 새로 고침 이후에 발생한 기본 테이블의 변경 사항을 식별하고 구체화된 뷰의 해당 레코드만 업데이트하는 작업입니다. 이 동작에 대한 자세한 내용은 구체화된 뷰 생성을 참조하세요.

IAM 정책으로 데이터 공유 API 작업에 대한 액세스 관리

데이터 공유 API 작업에 대한 액세스를 제어하려면 IAM 작업 기반 정책을 사용합니다. IAM 정책을 관리하는 방법에 대한 자세한 내용은 IAM User GuideManaging IAM policies 섹션을 참조하세요.

데이터 공유 API 작업을 사용하는 데 필요한 권한에 대한 자세한 내용은 Amazon Redshift 관리 가이드데이터 공유 API 작업을 사용하는 데 필요한 권한 섹션을 참조하세요.

계정 간 데이터 공유를 보다 안전하게 하기 위해 AuthorizeDataShareDeauthorizeDataShare API 작업에 조건부 키 ConsumerIdentifier를 사용할 수 있습니다. 이렇게 하면 두 API 작업을 호출할 수 있는 AWS 계정를 명시적으로 제어할 수 있습니다.

자신의 계정이 아닌 소비자에 대한 데이터 공유 권한 부여 또는 권한 부여 취소를 거부할 수 있습니다. 이렇게 하려면 IAM 정책에서 AWS 계정 번호를 지정합니다.

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

IAM 정책에서 DataShareArn testshare2가 있는 생산자가 AWS 계정이 111122223333인 소비자와 명시적으로 공유하도록 허용할 수 있습니다.

{ "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" } } } ] }