datashare 생성 - Amazon Redshift

datashare 생성

Amazon Redshift가 있으면 데이터 공유를 사용하여 Amazon Redshift 클러스터 또는 AWS 계정 전반에서 실시간 데이터를 공유할 수 있습니다. 데이터 공유는 Amazon Redshift 클러스터의 실시간 데이터를 다른 클러스터 또는 AWS 계정과 공유할 수 있는 소비자-생산자 객체입니다. 데이터 공유를 만들어 액세스에 대한 제어를 유지 관리하고 데이터를 최신 상태로 유지하면서 안전한 데이터 공유가 가능합니다. 다음 섹션에서는 데이터 공유를 만들고 스키마, 테이블 및 뷰와 같은 데이터베이스 객체를 추가하여 실시간 데이터를 안전하게 공유하는 방법에 대한 세부 정보를 제공합니다.

데이터 공유 만들기

데이터 공유는 데이터베이스 객체, 권한 및 소비자가 포함된 논리적 컨테이너입니다. 소비자는 사용자 계정 및 기타 AWS 계정의 Amazon Redshift 프로비저닝된 클러스터 또는 Amazon Redshift Serverless 네임스페이스입니다. 각 데이터 공유는 해당 데이터 공유가 생성된 데이터베이스와 연결되며 해당 데이터베이스의 객체만 추가할 수 있습니다. 생산자 관리자는 아래 절차 중 하나를 수행하여 콘솔과 SQL에서 데이터 공유를 만들 수 있습니다.

Console

콘솔에서 클러스터 또는 네임스페이스 세부 정보 페이지의 데이터 공유 탭에서 데이터 공유를 만들 수 있습니다. 데이터 공유가 만들어진 후 소비자 관리자로서 소비자의 데이터 공유에서 데이터베이스를 만들 수 있습니다.

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/redshiftv2/에서 Amazon Redshift 콘솔을 엽니다.

  2. 탐색 메뉴에서 클러스터(Clusters)를 선택한 다음 클러스터를 선택합니다. 클러스터 세부 정보 페이지가 나타납니다.

  3. 데이터베이스 연결이 없는 경우 클러스터 또는 네임스페이스 세부 정보 페이지에서 데이터 공유 탭의 데이터 공유 섹션에서 데이터베이스에 연결합니다. 내 계정에서 생성된 데이터 공유 섹션에서 데이터 공유 생성을 선택합니다. 데이터 공유 생성 페이지가 나타납니다.

  4. [datashare 생성(Create datashare)]을 선택합니다. 로컬 데이터베이스에서만 datashare를 생성할 수 있습니다. 데이터베이스에 연결하지 않은 경우 데이터베이스에 연결 페이지가 나타납니다. 데이터베이스로 연결의 절차에 따라 데이터베이스에 연결합니다. 최근 연결이 있는 경우 데이터 공유 생성 페이지가 나타납니다.

  5. Datashare 정보(Datashare information) 섹션에서 다음 중 하나를 선택합니다.

    • 데이터 공유를 선택하여 각기 다른 Amazon Redshift 데이터 웨어하우스(프로비저닝된 클러스터 또는 Serverless 엔드포인트)에서 또는 동일한 AWS 계정이나 다른 AWS 계정에서 읽기 또는 쓰기 목적으로 데이터를 공유할 데이터 공유를 만듭니다.

    • AWS Data Exchange datashare를 선택하여 AWS Data Exchange를 통해 데이터에 라이선스를 부여할 datashare를 생성합니다.

  6. Datashare 이름(Datashare name), 데이터베이스 이름(Database name)공개적으로 액세스 가능(Publicly accessible) 값을 지정합니다. 데이터베이스 이름을 변경할 때 새 데이터베이스 연결을 만듭니다.

  7. 범위가 지정된 권한 또는 직접 권한 섹션을 사용하여 데이터 공유에 객체를 추가합니다. 데이터 공유에 객체를 추가하려면 Amazon Redshift에서 데이터 공유 만들기 섹션을 참조하세요.

  8. 데이터 소비자 섹션에서 Amazon Redshift에 게시하거나 Lake Formation과 데이터 공유 프로세스를 시작하는 AWS Glue Data Catalog에 게시하도록 선택할 수 있습니다. 데이터 공유를 Amazon Redshift에 게시한다는 것은 다른 네임스페이스 또는 소비자 역할을 하는 Amazon Redshift 계정과 데이터를 공유한다는 의미입니다.

    참고

    데이터 공유가 생성되면 구성을 편집하여 다른 옵션에 게시할 수 없습니다.

  9. [datashare 생성(Create datashare)]을 선택합니다.

SQL

다음 명령을 실행하여 데이터 공유를 생성합니다.

CREATE DATASHARE salesshare;

데이터 공유를 만들 때 각 데이터 공유는 데이터베이스와 연결됩니다. 해당 데이터베이스의 객체만 해당 datashare에서 공유할 수 있습니다. 동일하거나 다른 세부 수준의 객체를 사용하여 동일한 데이터베이스에 여러 datashare를 생성할 수 있습니다. 클러스터가 생성할 수 있는 datashare 수에는 제한이 없습니다. Amazon Redshift 콘솔을 사용하여 datashare를 생성할 수도 있습니다. 자세한 내용은 CREATE DATASHARE 섹션을 참조하세요.

만드는 중에 데이터 공유에 대한 보안 제한을 제어할 수도 있습니다. 다음 예에서는 퍼블릭 IP 액세스 권한이 있는 소비자가 데이터 공유를 읽을 수 있음을 보여줍니다.

CREATE DATASHARE my_datashare [PUBLICACCESSIBLE = TRUE];

PUBLICACCESSIBLE = TRUE로 설정하면 소비자가 공개적으로 액세스할 수 있는 클러스터 및 프로비저닝된 작업 그룹에서 데이터 공유를 쿼리할 수 있습니다. 허용하지 않으려면 이 옵션을 생략하거나 명시적으로 false로 설정하세요.

데이터 공유를 만든 후 소비자 유형에 대한 속성을 수정할 수 있습니다. 예를 들어 지정된 datashare의 데이터를 소비하려는 클러스터에 공개적으로 액세스할 수 없도록 정의할 수 있습니다. datashare에 지정된 보안 제한을 충족하지 않는 소비자 클러스터의 쿼리는 쿼리 런타임에 거부됩니다. 자세한 내용은 ALTER DATASHARE 섹션을 참조하세요.

데이터 공유에 데이터 공유 객체 추가

다음 절차 중 하나를 수행하여 콘솔 및 SQL에서 다양한 유형의 데이터베이스 객체를 추가할 수 있습니다.

Console

범위가 지정된 권한 또는 직접 권한 섹션을 사용하여 데이터 공유에 객체를 추가할 수 있습니다. 객체를 추가할 범위가 지정된 권한 부여 또는 직접 권한 부여를 선택합니다. 추가 버튼을 선택하여 객체를 추가합니다. 대화 상자가 나타납니다. 다음 단계를 수행합니다.

  1. 범위가 지정된 권한 부여를 선택하면 데이터베이스 또는 스키마 수준에서 범위가 지정된 권한을 부여할 수 있는 범위가 지정된 권한 부여 페이지가 나타납니다. 범위가 지정된 권한이 있는 데이터 공유는 데이터베이스 또는 스키마 내의 모든 현재 및 미래 객체에 대해 지정된 권한을 갖습니다. 자세한 내용은 범위가 지정된 권한 항목을 참조하세요.

    1. 그런 다음 데이터베이스 범위가 지정된 권한을 선택하여 데이터베이스 수준에서 범위가 지정된 권한을 부여합니다. 범위가 지정된 권한을 부여하면 데이터 공유를 만드는 동안 현재 데이터베이스에 적용됩니다. 이러한 권한은 개별 객체에 부여할 수 없으며 기존 객체와 새 객체(스키마, 테이블, 뷰, UDF) 모두에 적용됩니다.

    2. 스키마, 테이블 또는 뷰 또는 사용자 정의 함수에 범위가 지정된 권한을 하나 이상 선택합니다. 이렇게 하면 데이터베이스의 모든 객체가 소비자에게 부여된 선택된 권한을 갖게 됩니다. 데이터베이스 범위가 지정된 권한 부여를 완료하려면 부여를 선택합니다.

    3. 그런 다음 스키마 범위가 지정된 권한을 선택하여 스키마 수준에서 범위가 지정된 권한을 부여합니다. 스키마 범위가 지정된 권한을 부여하면 스키마에 추가된 모든 객체가 지정된 데이터 공유 권한을 갖게 됩니다.

    4. 드롭다운에서 데이터 공유에 추가할 스키마를 선택합니다. 한 번에 하나의 스키마만 선택할 수 있습니다. 그런 다음 선택한 스키마에 부여하려는 직접 권한을 하나 이상 선택합니다.

    5. 테이블, 뷰 및 사용자 정의 함수와 같은 스키마 객체에 범위가 지정된 권한을 하나 이상 선택합니다. 스키마의 매칭되는 모든 객체에 권한이 부여됩니다. 이러한 객체는 기존 객체이거나 향후 추가될 객체일 수 있습니다. 적용되면 범위가 지정된 권한을 취소하지 않고 객체에서 권한을 제거할 수 없습니다.

    6. 스키마 범위가 지정된 권한 부여를 완료하려면 부여를 선택합니다.

  2. 직접 권한 부여를 선택하면 직접 권한 부여 페이지가 나타나 스키마, 테이블, 뷰 또는 사용자 정의 함수와 같은 각 객체 수준에서 직접 권한을 부여할 수 있습니다. 직접 권한을 부여하려면 먼저 데이터 공유에 관련 스키마를 추가해야 합니다.

    1. 그런 다음 스키마에 직접 권한 부여를 선택하여 특정 스키마에 직접 권한을 적용합니다. 그런 다음 테이블, 뷰 및 사용자 정의 함수와 같은 스키마 객체의 스키마 권한을 하나 이상 선택하고 데이터 공유에 추가할 스키마를 선택합니다. 부여를 선택하여 데이터 공유에 스키마 추가를 완료합니다.

    2. 데이터 공유에 스키마를 추가한 후 스키마 객체에 대한 직접 권한 추가를 진행할 수 있습니다. 직접 권한 부여를 다시 선택합니다. 직접 권한 부여 페이지가 나타납니다. 그런 다음 스키마 객체에 대한 직접 권한 탭으로 이동합니다.

    3. 테이블 및 뷰에 직접 권한 부여를 선택하여 이러한 객체에 객체 수준 직접 권한을 부여합니다. 목록에서 필요한 직접 권한 하나 이상과 필요한 객체를 선택합니다. 검색 필드를 사용하여 데이터 공유 객체를 찾습니다. 부여를 선택하여 데이터 공유에 테이블 및 뷰 추가를 완료합니다.

    4. 사용자 정의 함수에 직접 권한 부여를 선택하여 사용자 정의 함수에 객체 수준 직접 권한을 부여합니다. 목록에서 필요한 직접 권한 하나 이상과 필요한 객체를 선택합니다. 검색 필드를 사용하여 데이터 공유 객체를 찾습니다. 부여를 선택하여 데이터 공유에 사용자 정의 함수 추가를 완료합니다.

  3. 미래 객체를 추가할지도 선택할 수 있습니다. 스키마에 추가된 데이터 공유 객체를 포함하도록 선택하면 스키마에 추가된 객체가 데이터 공유에 자동으로 추가됩니다.

  4. 추가를 선택하여 섹션을 완료하고 객체를 추가합니다. 추가된 객체는 데이터 공유 객체에 나열됩니다.

  5. 객체를 추가한 후 개별 객체를 선택하고 권한을 편집할 수 있습니다. 스키마를 선택하면 범위가 지정된 권한을 추가할지 묻는 대화 상자가 나타납니다. 이렇게 하면 스키마의 기존 객체 또는 추가된 각 객체가 객체 유형에 적합한 미리 선택된 권한 세트를 갖게 됩니다. 예를 들어 관리자는 추가된 모든 테이블에 SELECT 및 UPDATE 권한을 갖도록 설정할 수 있습니다.

  6. 모든 데이터 공유 객체는 범위가 지정된 권한 또는 직접 권한 섹션에 나열됩니다.

  7. 데이터 소비자 섹션에서 네임스페이스를 추가하거나 AWS 계정을 데이터 공유의 소비자로 추가할 수 있습니다.

  8. 데이터 공유 생성을 선택하여 변경 사항을 저장합니다.

데이터 공유를 만들면 내 네임스페이스에서 생성된 데이터 공유 아래 목록에 해당 데이터 공유가 나타납니다. 목록에서 데이터 공유를 선택하면 해당 소비자, 객체 및 기타 속성을 볼 수 있습니다.

SQL

SQL을 사용하면 데이터 공유 소유자는 데이터 공유에 추가할 스키마에 대해 USAGE 권한을 부여해야 합니다. GRANT는 스키마에서 CREATE 및 USAGE를 포함하여 다양한 작업을 허용하는 데 사용됩니다. 스키마에는 공유 객체가 들어 있습니다.

CREATE SCHEMA myshared_schema1; CREATE SCHEMA myshared_schema2; GRANT USAGE ON SCHEMA myshared_schema1 TO DATASHARE my_datashare; GRANT CREATE, USAGE ON SCHEMA myshared_schema2 TO DATASHARE my_datashare;

또는 관리자가 ALTER 명령을 계속 실행하여 데이터 공유에 스키마를 추가할 수도 있습니다. 이러한 방식으로 스키마를 추가할 경우 USAGE 권한만 부여됩니다.

ALTER DATASHARE my_datashare ADD SCHEMA myshared_schema1;

관리자는 스키마를 추가한 후 스키마의 객체에 대해 데이터 공유 권한을 부여할 수 있습니다. 이 권한은 읽기 및 쓰기 권한일 수 있습니다. GRANT ALL 샘플은 모든 권한을 부여하는 방법을 보여줍니다.

GRANT SELECT, INSERT ON TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1 TO DATASHARE my_datashare; GRANT ALL ON TABLE myshared_schema1.table4 TO DATASHARE my_datashare;

계속해서 ALTER DATASHARE와 같은 명령을 실행하여 테이블을 추가할 수 있습니다. 이렇게 하면 추가된 객체에 대해 SELECT 권한만 부여됩니다.

ALTER DATASHARE my_datashare ADD TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1;

데이터베이스 또는 스키마 내 특정 유형의 모든 객체에 대해 범위가 지정된 권한을 데이터 공유에 부여할 수 있습니다. 범위가 지정된 권한이 있는 데이터 공유는 데이터베이스 또는 스키마 내의 모든 현재 및 미래 객체에 대해 지정된 권한을 갖습니다.

SVV_DATABASE_PRIVILEGES에서 데이터베이스 수준 범위 지정 권한의 범위를 볼 수 있습니다. SVV_SCHEMA_PRIVILEGES에서 스키마 수준 범위 지정 권한의 범위를 볼 수 있습니다.

다음은 데이터 공유에 범위가 지정된 권한을 부여할 때 사용하는 구문입니다. 범위가 지정된 권한에 대한 자세한 내용은 범위가 지정된 권한 섹션을 참조하세요.

GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }FOR SCHEMAS IN DATABASE db_name TO DATASHARE { datashare_name} GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }FOR TABLES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO DATASHARE { datashare_name} GRANT { EXECUTE | ALL [ PRIVILEGES ] }FOR FUNCTIONS IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO DATASHARE { datashare_name}

데이터 공유에 데이터 소비자 추가

datashare기에 데이터 소비자를 하나 이상 추가할 수 있습니다. 데이터 소비자는 Amazon Redshift 클러스터 또는 AWS 계정을 고유하게 식별한 네임스페이스일 수 있습니다.

퍼블릭 액세스 권한이 있는 클러스터에서 datashare를 해제하거나 설정하도록 명시적으로 선택해야 합니다.

  • 데이터 공유에 네임스페이스 추가를 선택합니다. 네임스페이스는 Amazon Redshift 클러스터에 대한 GUID(전역 고유 식별자)입니다.

  • datashare에 AWS 계정 추가(Add)를 선택합니다. 지정된 AWS 계정에 datashare에 대한 액세스 권한이 있어야 합니다.