

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# SQL 인터페이스를 사용한 읽기 전용 데이터 공유 시작하기
<a name="getting-started-datashare-sql"></a>

Amazon Redshift를 사용하면 Amazon Redshift 클러스터 전반에서 데이터를 안전하게 공유할 수 있으므로 데이터 소비자가 데이터를 복사하거나 복제하지 않고도 실시간 데이터를 쿼리하고 액세스할 수 있습니다. 데이터 공유를 통해 공유하려는 데이터베이스 객체를 참조하는 생산자 측 객체인 데이터 공유를 생성 및 구성합니다.

AWS 계정 또는 AWS 리전 내 또는 계정 간에 여러 Amazon Redshift 클러스터에서 읽기용으로 데이터를 공유할 수 있습니다.

**Topics**
+ [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md)
+ [Amazon Redshift 데이터 공유에서 보기 작업](datashare-views.md)
+ [데이터 공유에 데이터 레이크 테이블 추가](create-datashare-external-views.md)
+ [AWS 계정에서 데이터 공유](across-account.md)
+ [AWS 리전에서 데이터 공유](across-region.md)
+ [AWS Data Exchange에서 라이선스가 부여된 Amazon Redshift 데이터 공유](adx-getting-started.md)
+ [AWS Lake Formation 관리형 데이터 공유 시작하기](lf-getting-started.md)

# AWS 계정 내 데이터에 대한 읽기 액세스 공유
<a name="within-account"></a>

Amazon Redshift를 사용하면 동일한 AWS 계정 내의 여러 데이터베이스 사용자 또는 그룹 전반에서 데이터에 대한 읽기 액세스를 공유할 수 있습니다. 이 기능을 사용하면 세분화된 수준에서 데이터 액세스 권한을 제어할 수 있으므로 권한이 부여된 사용자 또는 그룹만 특정 데이터세트를 읽게 됩니다.

## 생산자 관리자 또는 데이터베이스 소유자로서 읽기 목적으로 데이터 공유
<a name="share-producer"></a>

1. 클러스터에서 datashare를 생성합니다. 자세한 내용은 [CREATE DATASHARE](r_CREATE_DATASHARE.md) 섹션을 참조하세요.

   ```
   CREATE DATASHARE salesshare;
   ```

   클러스터 슈퍼 사용자와 데이터베이스 소유자는 datashare를 생성할 수 있습니다. 각 datashare는 생성하는 동안 데이터베이스와 연결됩니다. 해당 데이터베이스의 객체만 해당 datashare에서 공유할 수 있습니다. 동일하거나 다른 세부 수준의 객체를 사용하여 동일한 데이터베이스에 여러 datashare를 생성할 수 있습니다. 클러스터가 생성할 수 있는 datashare 수에는 제한이 없습니다.

   Amazon Redshift 콘솔을 사용하여 datashare를 생성할 수도 있습니다. 자세한 내용은 [데이터 공유 만들기](datashare-creation.md#create-datashare-console) 섹션을 참조하세요.

1. datashare에 대한 작업 권한을 위임합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   다음 예에서는 `salesshare`의 `dbuser`에 권한을 부여합니다.

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

   클러스터 슈퍼 사용자와 datashare 소유자는 datashare에 대한 수정 권한을 추가 사용자에게 부여하거나 취소할 수 있습니다.

1. datashare에 객체를 추가하거나 제거합니다. datashare에 객체를 추가하려면 객체를 추가하기 전에 스키마를 추가합니다. 스키마를 추가할 때 Amazon Redshift는 스키마 아래에 모든 객체를 추가하지 않습니다. 이러한 항목을 명시적으로 추가해야 합니다. 자세한 내용은 [ALTER DATASHARE](r_ALTER_DATASHARE.md) 섹션을 참조하세요.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
   ```

   datashare에 뷰를 추가할 수도 있습니다.

   ```
   CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD VIEW public.sales_data_summary_view;
   ```

   ALTER DATASHARE를 사용하여 지정된 스키마에서 스키마, 테이블, 뷰 및 함수를 공유합니다. 슈퍼 사용자, datashare 소유자 또는 datashare에 대한 ALTER 또는 ALL 권한이 있는 사용자는 datashare를 변경하여 객체를 추가하거나 제거할 수 있습니다. 사용자는 datashare에서 객체를 추가하거나 제거할 수 있는 권한이 있어야 합니다. 사용자는 객체 소유자이거나 객체에 대한 SELECT, USAGE 또는 ALL 권한도 있어야 합니다.

   GRANT를 사용하여 데이터 공유에 객체를 추가할 수도 있습니다. 방법은 아래 예시와 같습니다.

   ```
   GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;
   ```

   이 구문은 기능면에서 `ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;`와 동일합니다.

   INCLUDENEW 절을 사용하여 지정된 스키마에서 생성된 새 테이블, 뷰 또는 SQL 사용자 정의 함수(UDF)를 datashare에 추가합니다. 슈퍼 사용자만 각 datashare-스키마 페어에 대해 이 속성을 변경할 수 있습니다.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare에서 객체를 추가하거나 제거할 수도 있습니다. 자세한 내용은 [데이터 공유에 데이터 공유 객체 추가](datashare-creation.md#add-datashare-object-console), [datashare에서 datashare 객체 제거](manage-datashare-existing-console.md#remove-datashare-object-console), [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

1. datashare에서 소비자를 추가하거나 제거합니다. 다음 예에서는 소비자 네임스페이스를 `salesshare`에 추가합니다. 네임스페이스는 계정에 있는 소비자 클러스터의 네임스페이스 전역 고유 식별자(GUID)입니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   GRANT 문에서 한 명의 datashare 소비자에게만 권한을 부여할 수 있습니다.

   클러스터 슈퍼 사용자와 데이터 공유 객체의 소유자 또는 데이터 공유에 대한 SHARE 권한이 있는 사용자는 데이터 공유에서 소비자를 추가하거나 제거할 수 있습니다. 이를 위해 GRANT USAGE 또는 REVOKE USAGE를 사용합니다.

   현재 보고 있는 클러스터의 네임스페이스를 찾으려면 SELECT CURRENT\$1NAMESPACE 명령을 사용합니다. 동일한 AWS 계정 내에서 다른 클러스터의 네임스페이스를 찾으려면 Amazon Redshift 콘솔 클러스터 세부 정보 페이지로 이동합니다. 해당 페이지에서 새로 추가된 네임스페이스 필드를 찾습니다.

   Amazon Redshift 콘솔을 사용하여 datashare에 대한 데이터 소비자를 추가하거나 제거할 수도 있습니다. 자세한 내용은 [데이터 공유에 데이터 소비자 추가](datashare-creation.md#add-data-consumer-console) 및 [datashare에서 데이터 소비자 제거](manage-datashare-existing-console.md#remove-data-consumer-console) 섹션을 참조하세요.

1. (옵션) datashare에 보안 제한을 추가합니다. 다음 예에서는 퍼블릭 IP 액세스 권한이 있는 소비자 클러스터가 datashare를 읽을 수 있음을 보여줍니다. 자세한 내용은 [ALTER DATASHARE](r_ALTER_DATASHARE.md) 섹션을 참조하세요.

   ```
   ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;
   ```

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

   Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

1. 클러스터에서 생성된 datashare를 나열하고 datashare의 내용을 살펴봅니다.

   다음 예에서는 `salesshare`라는 datashare의 정보를 보여줍니다.

   ```
   DESC DATASHARE salesshare;
                  
    producer_account  |          producer_namespace          | share_type | share_name | object_type |           object_name          |   include_new
   -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+-------------------
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_users_redshift   |   
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_venue_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_category_redshift|
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_date_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_event_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_listing_redshift |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_sales_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | schema      | public                         |  t
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | view        | public.sales_data_summary_view |
   ```

   다음 예에서는 생산자 클러스터의 아웃바운드 datashare를 보여줍니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   ```

   출력 결과는 다음과 비슷합니다.

   ```
   share_name | share_owner  | source_database | consumer_database | share_type |     createdate      | is_publicaccessible  | share_acl | producer_account |          producer_namespace 
   -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+---------------------------------------
   salesshare |    100       | dev             |                   |  OUTBOUND  | 2020-12-09 02:27:08 |          True        |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
   ```

   자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   [SVV\$1DATASHARES](r_SVV_DATASHARES.md), [SVV\$1DATASHARE\$1CONSUMERS](r_SVV_DATASHARE_CONSUMERS.md), 및 [SVV\$1DATASHARE\$1OBJECTS](r_SVV_DATASHARE_OBJECTS.md)를 사용하여 datashare, datashare 내의 객체 및 datashare 소비자를 볼 수도 있습니다.

1. datashare를 삭제합니다. 자세한 내용은 [DROP DATASHARE](r_DROP_DATASHARE.md) 섹션을 참조하세요.

   [DROP DATASHARE](r_DROP_DATASHARE.md)를 사용하여 언제든지 datashare 객체를 삭제할 수 있습니다. 클러스터 슈퍼 사용자와 datashare 소유자는 datashare를 삭제할 수 있습니다.

   다음 예에서는 `salesshare`라는 datashare를 삭제합니다.

   ```
   DROP DATASHARE salesshare;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 삭제할 수도 있습니다. 자세한 내용은 [계정에 만들어진 데이터 공유 삭제](manage-datashare-existing-console.md#delete-datashare-console) 섹션을 참조하세요.

1. ALTER DATASHARE를 사용하여 datashare에서 언제든지 객체를 제거합니다. REVOKE USAGE ON을 사용하여 특정 소비자에 대한 datashare 권한을 취소합니다. datashare 내의 객체에 대한 USAGE 권한을 취소하고 모든 소비자 클러스터에 대한 액세스를 즉시 중지합니다. 데이터베이스 및 테이블 나열 등의 datashare 나열과 메타데이터 쿼리는 액세스가 취소된 후 공유 객체를 반환하지 않습니다.

   ```
   ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

1. 더 이상 소비자와 데이터를 공유하지 않으려면 네임스페이스에서 datashare에 대한 액세스를 취소합니다.

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

## 소비자 관리자로서 읽기 목적으로 데이터 공유
<a name="share-consumer"></a>

1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 관리자로 DESC DATASHARE를 실행할 때 인바운드 데이터 공유를 보려면 NAMESPACE 옵션을 지정해야 합니다.

   ```
   DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   
   
    producer_account  |          producer_namespace          | share_type | share_name | object_type |           object_name           |   include_new
   -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_users_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_venue_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_category_redshift |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_date_redshift     |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_event_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_listing_redshift  |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                          |    
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | view        | public.sales_data_summary_view  |
   ```

   클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV\$1DATASHARES를 사용하여 datashare를 보고 SVV\$1DATASHARE\$1OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

   다음 예에서는 소비자 클러스터의 인바운드 datashare를 보여줍니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   
   
    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace
   ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------
    salesshare |             |                 |                   | INBOUND    |            |         t           |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
   ```

1. Datashare 슈퍼 사용자는 datashare를 참조하는 로컬 데이터베이스를 생성할 수 있습니다. 자세한 내용은 [데이터베이스 생성](r_CREATE_DATABASE.md) 섹션을 참조하세요.

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   로컬 데이터베이스의 객체에 대한 액세스를 보다 세밀하게 제어하려면 데이터베이스를 만들 때 WITH PERMISSIONS 절을 사용하세요. 이렇게 하면 4단계에서 데이터베이스의 객체에 객체 수준 권한을 부여할 수 있습니다.

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 데이터 공유에서 만들어진 데이터베이스의 데이터를 쿼리할 수 있습니다. 기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

   Amazon Redshift 콘솔을 사용하여 datashare에서 데이터베이스를 생성할 수도 있습니다. 자세한 내용은 [datashare에서 데이터베이스 생성](query-datashare-console.md#create-database-from-datashare-console) 섹션을 참조하세요.

1. (옵션) 소비자 클러스터에서 가져온 소비자 데이터베이스의 특정 스키마를 참조하고 세분화된 권한을 할당할 외부 스키마를 생성합니다. 자세한 내용은 [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) 섹션을 참조하세요.

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 필요에 따라 소비자 클러스터의 사용자 및 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 권한을 부여합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

   WITH PERMISSIONS를 사용하지 않고 데이터베이스를 생성한 경우 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자와 역할에 할당할 수 있습니다. 경우에 따라 datashare에서 생성된 데이터베이스 객체의 하위 집합에 대한 세분화된 제어가 필요합니다. 이러한 경우 이전 단계에서 설명한 대로 datashare의 특정 스키마를 가리키는 외부 스키마 참조를 생성하고 스키마 수준에서 세분화된 권한을 제공할 수 있습니다.

   또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터가 필요한 세분성으로 추가 datashare를 생성하도록 할 수도 있습니다.

   2단계에서 WITH PERMISSIONS를 사용하여 데이터베이스를 만든 경우 공유 데이터베이스의 객체에 객체 수준 권한을 할당해야 합니다. USAGE 권한만 있는 사용자는 추가 객체 수준 권한을 부여받을 때까지 WITH PERMISSION을 사용하여 만든 데이터베이스의 객체에 액세스할 수 없습니다.

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. datashare의 공유 객체에서 데이터를 쿼리합니다.

   소비자 데이터베이스 및 소비자 클러스터의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버 또는 SVV\$1ALL 및 SVV\$1REDSHIFT 뷰를 사용합니다.

   생산자 클러스터의 경우 각 스키마 내의 데이터베이스, 테이블 및 뷰에 많은 스키마가 있을 수 있습니다. 소비자 측의 사용자는 datashare를 통해 사용할 수 있는 객체의 하위 집합만 볼 수 있습니다. 이러한 사용자는 생산자 클러스터에서 전체 메타데이터를 볼 수 없습니다. 이 접근 방식은 datashare로 세분화된 메타데이터 보안 제어를 제공하는 데 도움이 됩니다.

   로컬 클러스터 데이터베이스에 계속 연결합니다. 그러나 이제 세 부분으로 구성된 database.schema.table 표기법을 사용하여 datashare에서 생성된 데이터베이스와 스키마에서도 읽을 수도 있습니다. 사용자에게 표시되는 모든 데이터베이스에 걸쳐 쿼리를 수행할 수 있습니다. 이러한 데이터베이스는 클러스터의 로컬 데이터베이스이거나 datashare에서 생성된 데이터베이스일 수 있습니다. 소비자 클러스터는 datashare에서 생성된 데이터베이스에 연결할 수 없습니다.

   전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 [데이터베이스 간 쿼리 예제](cross-database_example.md) 섹션을 참조하세요.

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5;
   
    salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime
   ---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------
          1 |      1 |    36861 |   21191 |    7872 |   1875 |       4 |    728.00 |     109.20 | 2008-02-18 02:36:48
          2 |      4 |     8117 |   11498 |    4337 |   1983 |       2 |     76.00 |      11.40 | 2008-06-06 05:00:16
          3 |      5 |     1616 |   17433 |    8647 |   1983 |       2 |    350.00 |      52.50 | 2008-06-06 08:26:17
          4 |      5 |     1616 |   19715 |    8647 |   1986 |       1 |    175.00 |      26.25 | 2008-06-09 08:38:52
          5 |      6 |    47402 |   14115 |    8240 |   2069 |       2 |    154.00 |      23.10 | 2008-08-31 09:17:02
   ```

   공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

   쿼리 외에도 소비자는 공유 객체에 대한 뷰를 생성할 수 있습니다. 후기 바인딩 뷰나 구체화된 뷰만 지원됩니다. Amazon Redshift는 공유 데이터에 대한 일반 뷰를 지원하지 않습니다. 소비자가 생성하는 뷰는 여러 로컬 데이터베이스 또는 datashare에서 생성된 데이터베이스에 걸쳐 있을 수 있습니다. 자세한 내용은 [CREATE VIEW](r_CREATE_VIEW.md) 섹션을 참조하세요.

   ```
   // Connect to a local cluster database
                  
   // Create a view on shared objects and access it. 
   CREATE VIEW sales_data 
   AS SELECT * 
   FROM sales_db.public.tickit_sales_redshift 
   WITH NO SCHEMA BINDING;
   
   SELECT * FROM sales_data;
   ```

# Amazon Redshift 데이터 공유에서 보기 작업
<a name="datashare-views"></a>

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/dg/datashare-views.html)

다음 쿼리는 datashare와 함께 지원되는 일반 뷰의 출력을 보여줍니다. 일반 뷰 정의에 대한 자세한 내용은 [CREATE VIEW](r_CREATE_VIEW.md) 섹션을 참조하세요.

```
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](r_CREATE_VIEW.md) 섹션을 참조하세요.

```
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](materialized-view-create-sql-command.md) 섹션을 참조하세요.

```
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_account` 및 `current_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)
```

## 데이터 공유의 구체화된 뷰에 대한 증분 새로 고침
<a name="mv_incremental_datashare"></a>

 Amazon Redshift는 기본 테이블 또는 구체화된 뷰가 공유될 때 소비자 데이터 공유의 구체화된 뷰에 대한 증분 새로 고침을 지원합니다. 증분 새로 고침은 Amazon Redshift가 이전 새로 고침 이후에 발생한 기본 테이블의 변경 사항을 식별하고 구체화된 뷰의 해당 레코드만 업데이트하는 작업입니다. 이 동작에 대한 자세한 내용은 [구체화된 뷰 생성](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare)을 참조하세요.

# 데이터 공유에 데이터 레이크 테이블 추가
<a name="create-datashare-external-views"></a>

데이터 공유를 사용하면 데이터 *생산자*는 스키마 및 테이블 등의 세분화된 데이터베이스 객체를 동일한 AWS 계정 또는 다른 계정의 *소비자*와 안전하게 공유할 수 있습니다. 또한 생산자가 리전 전반에서 객체를 공유할 수 있습니다. 이 주제에서는 데이터 레이크, 특히 AWS Glue 데이터 카탈로그에서 데이터 공유로 객체를 추가하는 방법을 설명합니다. 여기에는 2가지 사용 사례가 포함됩니다.
+ *데이터 레이크의 테이블을 참조하는 데이터 공유에 지연 바인딩 뷰 추가* - 이는 Lake Formation과 같은 외부 소스 데이터에 대한 권한 정의 등의 예비 구성이 이미 완료되었을 가능성이 높으므로 소비자에게 편리합니다. 또 다른 이점은 데이터 공유에 추가된 뷰가 Redshift 네이티브 테이블을 사용하여 데이터 레이크의 테이블을 조인할 수 있다는 것입니다.
+ *외부 스키마의 테이블을 데이터 공유에 직접 추가* - 이렇게 하면 추가 계층이나 로직 없이 데이터 레이크의 객체를 소비자가 사용할 수 있습니다. 소비자는 테이블을 쿼리하거나 소비자의 테이블과 조인할 수 있습니다.

이러한 사례는 [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)를 사용하여 Redshift의 AWS 데이터 카탈로그에서 테이블을 참조한 후에 적용됩니다. AWS 데이터 카탈로그의 모든 테이블이 소스일 수 있습니다.

**참고**  
데이터 공유에 추가하는 데이터 레이크 테이블에는 Lake Formation에 등록된 테이블과 AWS Glue 데이터 카탈로그 테이블이 포함될 수 있습니다.

## 외부 스키마와 외부 테이블 생성
<a name="create-datashare-console-external-prelim"></a>

외부 스키마와 외부 테이블을 생성하여 다음 섹션의 데이터 공유에 추가합니다. 이 과정은 예비 단계입니다. 이미 완료했으면 이 섹션을 건너뜁니다.

1. 생산자의 경우 Amazon S3에 저장된 데이터 레이크 데이터를 참조하는 외부 스키마를 생성합니다. 외부 스키마는 AWS Glue Data Catalog를 참조합니다. 샘플의 역할 및 리전은 다음과 같습니다.

   ```
   CREATE EXTERNAL SCHEMA external_schema_name FROM DATA CATALOG
   DATABASE 'glue_database_name'
   IAM_ROLE 'arn:aws:iam::123456789012:role/sample-role'
   REGION 'us-east-1';
   ```

1. 외부 스키마에서 데이터 레이크 테이블을 생성합니다.

   ```
   CREATE EXTERNAL TABLE external_schema_name.sales(
   salesid INTEGER,
   sellerid INTEGER,
   buyerid INTEGER,
   saledate DATE,
   pricepaid DECIMAL(8,2))
   ROW FORMAT delimited
   FIELDS TERMINATED BY '\t'
   STORED AS textfile
   LOCATION 's3://redshift-downloads/tickit/spectrum/sales/';
   ```

   샘플 코드에는 `LOCATION`이 포함됩니다. 폴더가 지정된 `s3://{bucket_name}/{folder}/` 형식이어야 합니다. 폴더의 길이는 최소 문자 한 개 이상으로 구성되어야 합니다. 필요에 따라 하위 폴더를 포함할 수 있습니다. 데이터 레이크에서 테이블을 생성하는 추가 예제를 보려면 CREATE EXTERNAL TABLE [예제](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE_examples.html)를 참조하시기 바랍니다.
**참고**  
공유는 생산자의 IAM 역할이 테이블에 대해 SELECT 액세스 권한을 갖춘 테이블에만 지원됩니다.

## 데이터 레이크 테이블을 데이터 공유에 참조하는 지연 바인딩 뷰 추가
<a name="create-datashare-console-external-views-how-to"></a>

AWS 데이터 카탈로그에서 외부 스키마를 기반으로 테이블을 생성하고 데이터 공유에 테이블을 추가하려는 경우 가장 일반적인 방법은 데이터 레이크의 데이터를 포함하여 생성한 테이블을 참조하는 Redshift 지연 바인딩 뷰를 추가하는 것입니다. 절차에 포함되는 단계는 다음과 같습니다.

1. 이전에 생성한 외부 테이블을 참조하는 지연 바인딩 뷰를 생성합니다.

   ```
   CREATE VIEW lbv AS 
   select * from external_schema_name.sales, other_schema.t1
   WITH NO SCHEMA BINDING;
   ```

1. 데이터 공유에 뷰 스키마를 추가합니다. 이는 지연 바인딩 뷰가 포함된 로컬 스키마입니다.

   ```
   ALTER DATASHARE dsx_datashare ADD SCHEMA public;
   ```

1. 지연 바인딩 뷰에서 참조하는 테이블이 포함된 스키마를 데이터 공유에 추가합니다. 스키마에 로컬 데이터베이스 객체 또는 데이터 레이크의 객체가 포함되어 있는지 여부에 관계없이 데이터 공유에 추가된 뷰에서 참조된 기본 테이블에 스키마를 추가해야 합니다. 지연 바인딩 뷰를 추가하기 전에 먼저 이 스키마를 추가해야 합니다.

   ```
   ALTER DATASHARE dsx_datashare ADD SCHEMA external_schema_name;
   ALTER DATASHARE dsx_datashare ADD SCHEMA other_schema;
   ```

1. SQL 명령을 사용하여 데이터 공유에 뷰를 추가합니다. 테이블 이름에 스키마 접두사가 포함된 것을 알 수 있습니다.

   ```
   ALTER DATASHARE my_datashare ADD TABLE public.lbv;
   ```

1. 뷰 및 스키마가 데이터 공유에 성공적으로 추가되었는지 확인합니다.

   ```
   SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
   ```

1. 소비자 관리자는 데이터 공유에서 데이터베이스를 생성한 다음, 소비자 사용자에게 사용량을 부여합니다.

단계를 완료한 후 데이터 공유 뷰에 액세스할 수 있는 데이터베이스 소비자 사용자가 데이터를 쿼리할 수 있습니다.

## 데이터 레이크 테이블을 데이터 공유에 직접 추가
<a name="create-datashare-console-external-views-add-spectrum"></a>

외부 스키마의 테이블을 데이터 공유에 추가하는 작업은 뷰를 추가하는 과정과 유사합니다. 이는 소비자가 초기 상태에서 데이터 레이크 테이블을 쿼리하려는 경우 또는 소비자가 소비자 데이터 웨어하우스의 테이블에 조인하려는 경우에 적합합니다. 다음 단계에서는 SQL을 사용하여 데이터 공유에 데이터 레이크 테이블을 추가하는 방법을 보여 줍니다.

1. 이 주제의 첫 번째 섹션에 설명된 대로 외부 스키마와 외부 테이블을 생성합니다.

1. 

   외부 스키마에서 기존 테이블을 검색하여 생성한 테이블을 사용할 수 있는지 확인합니다.

   ```
   SELECT * FROM svv_external_tables WHERE schemaname = 'external_schema_name';
   ```

1. 외부 스키마를 다음과 같이 데이터 공유에 추가합니다.

   ```
   ALTER DATASHARE my_datashare ADD SCHEMA external_schema_name;
   ```

1. 외부 테이블을 데이터 공유에 추가합니다. 테이블 이름에 스키마 접두사가 포함된 것을 알 수 있습니다.

   ```
   ALTER DATASHARE my_datashare ADD TABLE external_schema_name.sales;
   ```

1. 테이블이 데이터 공유에 성공적으로 추가되었는지 확인합니다.

   ```
   SELECT * FROM svv_datashare_objects WHERE share_name = 'my_datashare';
   ```

   더 자세한 설명은 [AWS 계정 내 데이터에 대한 읽기 액세스 권한 공유](https://docs.aws.amazon.com/redshift/latest/dg/within-account.html)를 참조하시기 바랍니다.

1. 공유 데이터를 수신하는 데이터베이스인 소비자에서 관리자는 데이터 공유를 연결하여 사용자가 쿼리할 수 있는 공유 테이블을 제공합니다. 이 단계를 수행하는 방법에 관한 자세한 내용은 [소비자가 다른 계정의 데이터 공유 관리](manage-datashare-other-console.html)를 참조하시기 바랍니다.

관리자가 단계를 완료하면 소비자의 데이터베이스 사용자는 쿼리를 작성하여 공유 테이블에서 데이터를 검색하고 소비자의 다른 테이블과 이를 조인할 수 있습니다.

## 데이터 공유에 데이터 레이크 객체를 추가하기 위한 사용 정보
<a name="create-datashare-console-external-views-considerations"></a>

데이터 공유의 데이터 레이크에서 테이블과 뷰 사용 시 알아야 할 몇 가지 사항이 있습니다.
+ **AWS CloudTrail과 로깅** - 데이터 공유를 통해 공유된 데이터 레이크 테이블에 액세스할 때 데이터 생산자 계정은 AWS CloudTrail 로그를 사용하여 감사할 수 있습니다.
  + **로그 데이터를 사용하여 데이터 액세스 제어** - CloudTrail 로그는 Redshift 데이터 공유 생산자와 소비자를 비롯해 공유 테이블에 액세스하는 사용자에 대한 세부 정보를 기록합니다. 식별자는 `AssumeRole` CloudTrail 로그 아래의 `ExternalId` 필드에서 사용할 수 있습니다. 데이터 소유자는 작업을 통해 IAM 정책의 데이터 액세스에 대한 추가 제한 사항을 구성할 수 있습니다. 정책을 통한 데이터 액세스 정의에 관한 자세한 내용은 [서드 파티가 소유한 AWS 계정 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)를 참조하시기 바랍니다.
+ **보안 및 소비자 권한** - Lake Formation 등록 테이블의 경우 Amazon S3 리소스는 Lake Formation에서 보호되며 Lake Formation에서 제공하는 자격 증명 인증을 사용하여 이용 가능하도록 제공됩니다.

## 데이터 레이크 객체를 데이터 공유에 추가하기 위한 결제 고려 사항
<a name="create-datashare-console-external-views-billing"></a>

다음은 데이터 공유에서 데이터 레이크 객체를 저장하고 스캔하는 데 드는 비용을 계산하는 방법을 자세히 설명합니다.
+ 소비자가 데이터 레이크에서 공유 객체를 쿼리하면 스캔 비용이 소비자에게 부과됩니다.
  + 소비자가 프로비저닝 클러스터이면 Redshift는 Redshift Spectrum을 사용하여 Amazon S3 데이터를 스캔합니다. 따라서 Spectrum 비용이 소비자 계정으로 청구됩니다.
  + 소비자가 Amazon Redshift Serverless 작업 그룹이면 Spectrum에 따로 요금이 부과되지 않습니다.
+ 버킷 나열 등의 스토리지 및 작업에 대한 Amazon S3 비용은 각 Amazon S3 버킷을 소유한 계정으로 청구됩니다.

Amazon Redshift Serverless 결제에 관한 자세한 내용은 [Amazon Redshift Serverless 결제](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-billing.html)를 참고하시기 바랍니다. [Amazon Redshift 요금](https://aws.amazon.com/redshift/pricing/)에서 더 많은 결제 및 요금 정보를 확인할 수 있습니다.

# AWS 계정에서 데이터 공유
<a name="across-account"></a>

AWS 계정 간에 읽기용으로 데이터를 공유할 수 있습니다. AWS 계정 간 데이터 공유는 한 계정 내 데이터 공유와 유사합니다. 차이점은 AWS 계정 간 데이터 공유에는 양방향 핸드셰이크가 필요하다는 것입니다. 생산자 계정 관리자는 소비자 계정에 datashare 액세스 권한을 부여하거나 어떠한 액세스 권한도 부여하지 않도록 선택할 수 있습니다. 권한이 부여된 datashare를 사용하기 위해 소비자 계정 관리자는 datashare를 연결할 수 있습니다. 관리자는 데이터 공ㅇ를 전체 AWS 계정 계정 또는 소비자 계정의 특정 클러스터와 연결하거나 데이터 공유를 거부할 수 있습니다. 계정 내 datashare에 대한 자세한 내용은 [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md) 섹션을 참조하세요.

데이터 공유에는 동일한 계정 또는 다른 AWS 계정의 네임스페이스인 데이터 소비자가 있을 수 있습니다. 계정 내 공유와 계정 간 공유를 위해 별도의 datashare를 생성할 필요가 없습니다.

계정 간 datashare의 경우 생산자 및 소비자 클러스터를 모두 암호화해야 합니다.

AWS 계정과 데이터를 공유할 때 생산자 관리자는 AWS 계정과 엔터티로 공유합니다. 소비자 관리자는 소비자 계정의 어떤 네임스페이스가 데이터 공유에 액세스할 수 있는지 결정할 수 있습니다.

**Topics**
+ [생산자 관리자 작업](producer-cluster-admin.md)
+ [소비자 계정 관리자 작업](consumer-account-admin.md)
+ [소비자 관리자 작업](consumer-cluster-admin.md)

# 생산자 관리자 작업
<a name="producer-cluster-admin"></a>

Amazon Redshift로 생산자 클러스터에서 관리 작업을 수행하여 데이터 수집 및 로드 처리를 관리합니다.

**생산자 관리자 또는 데이터베이스 소유자인 경우** - 다음 단계를 따릅니다.

1. 클러스터에 datashare를 생성하고 datashare에 datashare 객체를 추가합니다. datashare를 생성하고 datashare 객체를 datashare에 추가하는 방법에 대한 자세한 단계는 [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md) 섹션을 참조하세요. CREATE DATASHARE 및 ALTER DATASHARE에 대한 자세한 내용은 [CREATE DATASHARE](r_CREATE_DATASHARE.md) 및 [ALTER DATASHARE](r_ALTER_DATASHARE.md) 섹션을 참조하세요.

   다음 예에서는 datashare `salesshare`에 다른 datashare 객체를 추가합니다.

   ```
   -- Add schema to datashare
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   
   -- Add table under schema to datashare
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   
   -- Add view to datashare 
   ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
   
   -- Add all existing tables and views under schema to datashare (does not include future table)
   ALTER DATASHARE salesshare ADD ALL TABLES in schema public;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 생성하거나 편집할 수도 있습니다. 자세한 내용은 [데이터 공유 만들기](datashare-creation.md#create-datashare-console) 및 [계정에 생성된 datashare 편집](manage-datashare-existing-console.md#edit-datashare-console) 섹션을 참조하세요.

1. datashare에 대한 작업 권한을 위임합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   다음 예에서는 `salesshare`의 `dbuser`에 권한을 부여합니다.

   ```
   GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;
   ```

   클러스터 슈퍼 사용자와 datashare 소유자는 datashare에 대한 수정 권한을 추가 사용자에게 부여하거나 취소할 수 있습니다.

1. datashare에서 소비자를 추가하거나 제거합니다. 다음 예에서는 `salesshare`에 AWS 계정 ID를 추가합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012';
   ```

   GRANT 문에서 한 명의 datashare 소비자에게만 권한을 부여할 수 있습니다.

   클러스터 슈퍼 사용자와 datashare 객체의 소유자 또는 datashare에 대한 SHARE 권한이 있는 사용자는 datashare에서 소비자를 추가하거나 제거할 수 있습니다. 이를 위해 GRANT USAGE 또는 REVOKE USAGE를 사용합니다.

   Amazon Redshift 콘솔을 사용하여 datashare에 대한 데이터 소비자를 추가하거나 제거할 수도 있습니다. 자세한 내용은 [데이터 공유에 데이터 소비자 추가](datashare-creation.md#add-data-consumer-console) 및 [datashare에서 데이터 소비자 제거](manage-datashare-existing-console.md#remove-data-consumer-console) 섹션을 참조하세요.

1. (옵션) 더 이상 소비자와 데이터를 공유하지 않으려면 AWS 계정에서 datashare에 대한 액세스를 취소합니다.

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012';
   ```

**생산자 계정 관리자인 경우** 다음 절차를 따릅니다.

AWS 계정에 사용 권한을 부여한 후 datashare 상태는 `pending_authorization`입니다. 생산자 계정 관리자는 Amazon Redshift 콘솔을 사용하여 datashare 권한을 부여하고 데이터 소비자를 선택해야 합니다.

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에 로그인합니다. 그런 다음 datashare에 대한 액세스 권한을 부여하거나 제거할 데이터 소비자를 선택합니다. 권한이 부여된 데이터 소비자는 datashare에 대한 작업을 수행하라는 알림을 받습니다. 네임스페이스를 데이터 소비자로 추가하는 경우 권한 부여를 수행할 필요가 없습니다. 권한을 부여 받은 데이터 소비자는 datashare 객체에 액세스하고 소비자 데이터베이스를 생성하여 데이터를 쿼리할 수 있습니다. 자세한 내용은 [datashare에서 권한 부여 또는 제거](authorize-datashare-console.md) 섹션을 참조하세요.

## 데이터에 대한 계정 간 쓰기 권한 공유
<a name="within-account-multi-warehouse-consumer-associate"></a>

Amazon Redshift를 사용하면 AWS 계정 전반에서 데이터를 공유하고 쓰기 권한을 부여하여 팀 또는 조직 간의 협업 및 데이터 공유를 지원할 수 있습니다. 계정 간 데이터 공유를 통해 데이터베이스, 스키마 및 테이블을 만들고 관리하는 데이터 공급자 계정을 설정할 수 있으며, 이 계정에서는 데이터 소비자 계정과 안전하게 공유할 수 있습니다. 다음 섹션에서는 계정 간 데이터 공유를 구성하고 Amazon Redshift에서 쓰기 액세스 권한을 부여하는 프로세스를 보여 줍니다.

# 소비자 계정 관리자 작업
<a name="consumer-account-admin"></a>

Amazon Redshift로 소비자 계정을 관리하고 데이터 웨어하우징 리소스에 대한 액세스를 제어합니다.

**소비자 계정 관리자인 경우** 다음 절차를 따릅니다.

다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정 또는 계정의 특정 네임스페이스와 연결하려면 Amazon Redshift 콘솔을 사용합니다.

[https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에 로그인합니다. 그런 다음 다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정 계정 또는 계정별 네임스페이스와 연결합니다. 자세한 내용은 [Amazon Redshift에서 다른 AWS 계정의 데이터 공유 연결](writes-associating.md) 섹션을 참조하세요.

AWS 계정 또는 특정 네임스페이스가 연결된 후 데이터 공유를 사용할 수 있게 됩니다. datashare 연결을 언제든지 변경할 수도 있습니다. 개별 네임스페이스에서 AWS 계정으로 연결을 변경하면 Amazon Redshift가 네임스페이스를 AWS 계정 정보로 덮어씁니다. AWS 계정에서 특정 네임스페이스로 연결을 변경할 때 Amazon Redshift는 AWS 계정 정보를 네임스페이스 정보로 덮어씁니다. 계정의 모든 네임스페이스는 데이터에 액세스할 수 있습니다.

# 소비자 관리자 작업
<a name="consumer-cluster-admin"></a>

Amazon Redshift로 소비자 클러스터에서 관리 작업을 수행하여 데이터 수집 및 로드 처리를 관리합니다.

**소비자 관리자인 경우** - 다음 단계를 따릅니다.

1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 데이터 공유의 내용은 생산자 관리자가 데이터 공유 권한을 부여받고 소비자 관리자가 데이터 공유를 수락하고 연결한 경우에만 사용할 수 있습니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 관리자로 DESC DATAHSARE를 실행할 때 인바운드 데이터 공유를 보려면 NAMESPACE와 계정 ID를 지정해야 합니다. 아웃바운드 datashare의 경우 datashare 이름을 지정합니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   
   share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace
   -----------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+---------------------------------------
   salesshare |             |                 |                   | INBOUND    |            |        t            |           | 123456789012    | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   DESC DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   
   
    producer_account |          producer_namespace          | share_type | share_name | object_type |           object_name
   ------------------+--------------------------------------+------------+------------+-------------+---------------------------------
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_users_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_venue_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_category_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_date_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_event_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_listing_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | table       | public.tickit_sales_redshift
    123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d | INBOUND    | salesshare | schema      | public
   (8 rows)
   ```

   클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV\$1DATASHARES를 사용하여 datashare를 보고 SVV\$1DATASHARE\$1OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

   다음 예에서는 소비자 클러스터의 인바운드 datashare를 보여줍니다.

   ```
   SELECT * FROM SVV_DATASHARES WHERE share_name LIKE 'sales%';
   
   share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace
   -----------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+---------------------------------------
   salesshare |             |                 |                   | INBOUND    |            |        t            |           | 123456789012      | 'dd8772e1-d792-4fa4-996b-1870577efc0d'
   ```

   ```
   SELECT * FROM SVV_DATASHARE_OBJECTS WHERE share_name LIKE 'sales%';
    share_type | share_name | object_type |           object_name           | producer_account |          producer_namespace
   ------------+------------+-------------+---------------------------------+------------------+--------------------------------------
    INBOUND    | salesshare | table       | public.tickit_users_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_venue_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_category_redshift | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_date_redshift     | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_event_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_listing_redshift  | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | table       | public.tickit_sales_redshift    | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
    INBOUND    | salesshare | schema      | public                          | 123456789012     | dd8772e1-d792-4fa4-996b-1870577efc0d
   (8 rows)
   ```

1. datashare를 참조하는 로컬 데이터베이스를 생성합니다. datashare에서 데이터베이스를 생성할 때 NAMESPACE와 계정 ID를 지정합니다. 자세한 내용은 [데이터베이스 생성](r_CREATE_DATABASE.md) 섹션을 참조하세요.

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

   로컬 데이터베이스의 객체에 대한 액세스를 보다 세밀하게 제어하려면 데이터베이스를 만들 때 WITH PERMISSIONS 절을 사용하세요. 이렇게 하면 4단계에서 데이터베이스의 객체에 객체 수준 권한을 부여할 수 있습니다.

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE 'dd8772e1-d792-4fa4-996b-1870577efc0d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 데이터 공유에서 만들어진 데이터베이스의 데이터를 쿼리할 수 있습니다. 기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

1. (옵션) 소비자 클러스터에서 가져온 소비자 데이터베이스의 특정 스키마를 참조하고 세분화된 권한을 할당할 외부 스키마를 생성합니다. 자세한 내용은 [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) 섹션을 참조하세요.

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 필요에 따라 소비자 클러스터의 사용자 또는 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 권한을 부여합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

   WITH PERMISSIONS를 사용하지 않고 데이터베이스를 생성한 경우 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자 또는 역할에 할당할 수 있습니다. 경우에 따라 datashare에서 생성된 데이터베이스 객체의 하위 집합에 대한 세분화된 제어가 필요합니다. 이러한 경우 이전 단계에서 설명한 대로 datashare의 특정 스키마를 가리키는 외부 스키마 참조를 생성할 수 있습니다. 그런 다음 스키마 수준에서 세분화된 권한을 제공할 수 있습니다. 또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터가 필요한 세분성으로 추가 datashare를 생성하도록 할 수도 있습니다. 데이터 공유에서 생성된 데이터베이스에 대해 필요에 따라 원하는 만큼 스키마 참조를 생성할 수 있습니다.

   2단계에서 WITH PERMISSIONS를 사용하여 데이터베이스를 만든 경우 공유 데이터베이스의 객체에 객체 수준 권한을 할당해야 합니다. USAGE 권한만 있는 사용자는 추가 객체 수준 권한을 부여받을 때까지 WITH PERMISSION을 사용하여 만든 데이터베이스의 객체에 액세스할 수 없습니다.

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. datashare의 공유 객체에서 데이터를 쿼리합니다.

   소비자 데이터베이스 및 소비자 클러스터의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버 또는 SVV\$1ALL 및 SVV\$1REDSHIFT 뷰를 사용합니다.

   생산자 클러스터의 경우 각 스키마 내의 데이터베이스, 테이블 및 뷰에 많은 스키마가 있을 수 있습니다. 소비자 측의 사용자는 datashare를 통해 사용할 수 있는 객체의 하위 집합만 볼 수 있습니다. 이러한 사용자는 생산자 클러스터에서 모든 메타데이터를 볼 수 없습니다. 이 접근 방식은 datashare로 세분화된 메타데이터 보안 제어를 제공하는 데 도움이 됩니다.

   로컬 클러스터 데이터베이스에 계속 연결합니다. 그러나 이제 세 부분으로 구성된 database.schema.table 표기법을 사용하여 datashare에서 생성된 데이터베이스와 스키마에서도 읽을 수도 있습니다. 사용자에게 표시되는 모든 데이터베이스에 걸쳐 쿼리를 수행할 수 있습니다. 이러한 데이터베이스는 클러스터의 로컬 데이터베이스이거나 datashare에서 생성된 데이터베이스일 수 있습니다. 소비자 클러스터는 datashare에서 생성된 데이터베이스에 연결할 수 없습니다.

   전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 [데이터베이스 간 쿼리 예제](cross-database_example.md) 섹션을 참조하세요.

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift;
   ```

   공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

   쿼리를 수행하는 것 외에도 소비자는 공유 객체에 대한 보기를 생성할 수 있습니다. 후기 바인딩 보기와 구체화된 보기만 지원됩니다. Amazon Redshift는 공유 데이터에 대한 일반 뷰를 지원하지 않습니다. 소비자가 생성하는 뷰는 여러 로컬 데이터베이스 또는 datashare에서 생성된 데이터베이스에 걸쳐 있을 수 있습니다. 자세한 내용은 [CREATE VIEW](r_CREATE_VIEW.md) 섹션을 참조하세요.

   ```
   // Connect to a local cluster database
                  
   // Create a view on shared objects and access it. 
   CREATE VIEW sales_data 
   AS SELECT * 
   FROM sales_db.public.tickit_sales_redshift 
   WITH NO SCHEMA BINDING;
   
   SELECT * FROM sales_data;
   ```

# AWS 리전에서 데이터 공유
<a name="across-region"></a>

AWS 리전의 Amazon Redshift 클러스터에서 읽기용으로 데이터를 공유할 수 있습니다. 리전 간 데이터 공유를 사용하면 데이터를 수동으로 복사할 필요 없이 AWS 리전 간에 데이터를 공유할 수 있습니다. 데이터를 Amazon S3로 언로드하고 데이터를 새 Amazon Redshift 클러스터로 복사하거나 리전 간 스냅샷 복사를 수행할 필요가 없습니다.

리전 간 데이터 공유를 사용하면 클러스터가 다른 리전에 있는 경우에도 동일한 AWS 계정 또는 다른 AWS 계정의 클러스터 간에 데이터를 공유할 수 있습니다. AWS 계정은 같지만 AWS 리전은 다른 Amazon Redshift 클러스터와 데이터를 공유하는 경우 AWS 계정 내에서 데이터를 공유하는 것과 동일한 워크플로를 따릅니다. 자세한 내용은 [AWS 계정 내 데이터에 대한 읽기 액세스 공유](within-account.md) 섹션을 참조하세요.

데이터를 공유하는 클러스터가 다른 AWS 계정과 AWS 리전에 있는 경우 AWS 계정 간에 데이터를 공유하는 것과 동일한 워크플로를 따르고 소비자 클러스터에 리전 수준 연결을 포함할 수 있습니다. 리전 간 데이터 공유는 전체 AWS 계정, 전체 AWS 리전 또는 AWS 리전 내의 특정 네임스페이스와의 데이터 공유 연결을 지원합니다. AWS 계정 간 데이터 공유에 대한 자세한 내용은 [AWS 계정에서 데이터 공유](across-account.md) 섹션을 참조하세요.

다른 리전의 데이터를 사용하는 경우 소비자는 생산자 리전에서 소비자 리전으로의 리전 간 데이터 전송 요금을 지불합니다.

datashare를 사용하기 위해 소비자 계정 관리자는 다음 세 가지 방법 중 하나로 datashare를 연결할 수 있습니다.
+ 모든 AWS 리전에 걸쳐 있는 전체 AWS 계정과의 연결
+ AWS 계정의 특정 AWS 리전과 연결
+ AWS 리전 내의 특정 네임스페이스와의 연결

관리자가 전체 AWS 계정을 선택하면 계정의 다른 AWS 리전에 있는 모든 기존 및 미래 네임스페이스가 데이터 공유에 액세스할 수 있습니다. 소비자 계정 관리자는 리전 내에서 특정 AWS 리전 또는 네임스페이스를 선택하여 데이터 공유에 대한 액세스 권한을 부여할 수도 있습니다.

**생산자 관리자 또는 데이터베이스 소유자인 경우** 데이터 공유를 만들고, 데이터베이스 객체와 데이터 소비자를 데이터 공유에 추가하고, 데이터 소비자에게 권한을 부여합니다. 자세한 내용은 [생산자 관리자 작업](producer-cluster-admin.md) 섹션을 참조하세요.

**생산자 계정 관리자인 경우** AWS Command Line Interface(AWS CLI) 또는 Amazon Redshift 콘솔을 사용하여 datashare 권한을 부여하고 데이터 소비자를 선택합니다.

**소비자 계정 관리자인 경우** 다음 절차를 따릅니다.

다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정, 특정 AWS 리전 또는 AWS 리전 내의 네임스페이스에 연결하려면 Amazon Redshift 콘솔을 사용합니다.

리전 간 데이터 공유에서는 AWS Command Line Interface(AWS CLI) 또는 Amazon Redshift 콘솔을 사용하여 특정 AWS 리전의 클러스터를 추가할 수 있습니다.

하나 이상의 AWS 리전을 지정하려면 선택 사항 `consumer-region` 옵션과 함께 `associate-data-share-consumer` CLI 명령을 사용할 수 있습니다.

CLI를 사용할 경우, 다음 예는 `associate-entire-account` 옵션을 사용하여 `Salesshare`을 전체 AWS 계정과 연결합니다. 한 번에 한 리전만 연결할 수 있습니다.

```
aws redshift associate-data-share-consumer
--region {PRODUCER_REGION}
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--associate-entire-account
```

다음 예에서는`Salesshare`을 미국 동부(오하이오) 리전(`us-east-2`)과 연결합니다.

```
aws redshift associate-data-share-consumer
--region {PRODUCER_REGION}
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:0123456789012:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--consumer-region 'us-east-2'
```

다음 예에서는 `Salesshare`을 아시아 태평양(시드니) 리전(`ap-southeast-2`)의 다른 AWS 계정에 있는 특정 소비자 네임스페이스와 연결합니다.

```
aws redshift associate-data-share-consumer
--data-share-arn arn:aws:redshift:{PRODUCER_REGION}:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/Salesshare
--consumer-arn 'arn:aws:redshift:ap-southeast-2:{CONSUMER_ACCOUNT}:namespace:{ConsumerImmutableClusterId}'
```

Amazon Redshift 콘솔을 사용하여 데이터 공유를 전체 AWS 계정 또는 AWS 리전 내의 특정 AWS 리전 또는 네임스페이스와 연결할 수 있습니다. 이렇게 하려면 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에 로그인합니다. 그런 다음 다른 계정에서 공유되는 하나 이상의 데이터 공유를 전체 AWS 계정, 전체 AWS 리전 또는 AWS 리전 내의 특정 네임스페이스와 연결합니다. 자세한 내용은 [Amazon Redshift에서 다른 AWS 계정의 데이터 공유 연결](writes-associating.md) 섹션을 참조하세요.

AWS 계정 또는 특정 네임스페이스가 연결된 후 데이터 공유를 사용할 수 있게 됩니다. datashare 연결을 언제든지 변경할 수도 있습니다. 개별 네임스페이스에서 AWS 계정으로 연결을 변경하면 Amazon Redshift가 네임스페이스를 AWS 계정 정보로 덮어씁니다. AWS 계정에서 특정 네임스페이스로 연결을 변경할 때 Amazon Redshift는 AWS 계정 정보를 네임스페이스 정보로 덮어씁니다. 전체 AWS 계정에서 특정 AWS 리전 및 네임스페이스로 연결을 변경할 때 Amazon Redshift는 AWS 계정 정보를 특정 리전 및 네임스페이스 정보로 덮어씁니다.

**소비자 관리자인 경우** 데이터 공유를 참조하는 로컬 데이터베이스를 만들고 필요에 따라 데이터 공유에서 만들어진 데이터베이스에 대한 권한을 소비자 클러스터의 사용자 또는 역할에 부여할 수 있습니다. 공유 객체에 대한 보기를 생성하고, 소비자 클러스터에서 가져온 소비자 데이터베이스의 특정 스키마를 참조하고 세분화된 권한을 할당할 외부 스키마를 생성할 수도 있습니다. 자세한 내용은 [소비자 관리자 작업](consumer-cluster-admin.md) 섹션을 참조하세요.

# 리전 간 데이터 공유를 위한 비용 관리
<a name="cross-region-billing"></a>

Amazon Redshift를 사용하면 AWS 리전 간에 전송되는 데이터의 양을 제한하도록 데이터 공유를 구성하여 리전 간 데이터 공유에 대한 비용 제어를 관리할 수 있습니다. 리전 간 데이터 공유에 대한 비용 제어 관리를 통해 데이터 전송 한도를 설정하고, 데이터 전송 사용량을 모니터링하고, 이러한 한도에 근접하거나 초과할 때 알림을 받게 됩니다.

다른 리전의 데이터를 사용하는 경우 소비자는 생산자 리전에서 소비자 리전으로의 리전 간 데이터 전송 요금을 지불합니다. 데이터 전송 가격은 리전마다 다릅니다. 요금은 모든 성공적인 쿼리 실행에 대해 스캔된 데이터 바이트를 기준으로 합니다. Amazon Redshift 요금에 대한 자세한 내용은 [Amazon Redshift 요금](https://aws.amazon.com/redshift/pricing/)을 참조하세요.

요금은 바이트 단위로 부과되며 바이트는 메가바이트로 반올림됩니다. 쿼리당 최소값은 10MB입니다. 쿼리 사용량에 대한 비용 관리를 설정하고 클러스터에서 쿼리당 전송되는 데이터의 양을 볼 수 있습니다.

리전 간 데이터 공유를 사용한 사용 및 관련 비용을 모니터링하고 제어하기 위해 매일, 매주, 매달 사용 한도를 생성하고 이 한도에 도달하면 Amazon Redshift에서 자동으로 수행할 작업을 정의하여 예산을 예측 가능하게 유지할 수 있습니다.

사용자가 설정한 사용 한도에 따라 Amazon Redshift가 수행하는 작업을 이벤트를 시스템 테이블에 기록하거나 CloudWatch 경보를 전송한 후 Amazon SNS 통해 관리자에게 알리거나 추가 사용을 위해 리전 간 데이터 공유를 해제합니다.

Amazon Redshift 콘솔에서 사용 한도를 정의하려면 클러스터에 대한 **작업(Actions)**에서 **사용량 한도 구성**을 선택합니다. **클러스터 성능(Cluster performance)** 또는 **모니터링(Monitoring)** 탭에서 자동으로 생성된 CloudWatch 메트릭과 함께 사용량 추세를 모니터링하고 정의된 한도를 초과하는 사용량 발생 시 알림을 받을 수 있습니다. 또한 AWS CLI 또는 Amazon Redshift API 동작을 이용하여 프로그램 방식으로 사용 한도를 생성, 수정 및 삭제할 수도 있습니다.

# AWS Data Exchange에서 라이선스가 부여된 Amazon Redshift 데이터 공유
<a name="adx-getting-started"></a>

공급자는 AWS Data Exchange datashare를 생성하고 AWS Data Exchange 제품에 추가할 때 소비자에게 활성 AWS Data Exchange 구독이 있으면 Amazon Redshift에서 최신 데이터를 검색, 구독 및 쿼리할 수 있는 Amazon Redshift의 데이터에 라이선스를 부여할 수 있습니다.

AWS Data Exchange datashare가 AWS Data Exchange 제품에 추가되면 소비자는 구독이 시작될 때 제품의 datashare에 자동으로 액세스할 수 있으며 구독이 활성화되어 있는 한 액세스를 유지합니다.

**Topics**
+ [생산자로서 AWS Data Exchange datashare 작업](adx-getting-started-producer.md)
+ [소비자로서 AWS Data Exchange datashare 작업](#adx-getting-started-consumer)

# 생산자로서 AWS Data Exchange datashare 작업
<a name="adx-getting-started-producer"></a>

Amazon Redshift로 데이터 공유를 생성 및 관리하여 생산자로서 AWS Data Exchange를 사용해 실시간으로 데이터 제품을 공유합니다.

**생산자 관리자인 경우 다음 단계에 따라 Amazon Redshift 콘솔에서 AWS Data Exchange 데이터 공유를 관리합니다.**

1. 클러스터에 datashare를 생성하여 AWS Data Exchange에서 데이터를 공유하고 datashare에 AWS Data Exchange에 대한 액세스 권한을 부여합니다.

   클러스터 슈퍼 사용자와 데이터베이스 소유자는 datashare를 생성할 수 있습니다. 각 datashare는 생성하는 동안 데이터베이스와 연결됩니다. 해당 데이터베이스의 객체만 해당 datashare에서 공유할 수 있습니다. 동일하거나 다른 세부 수준의 객체를 사용하여 동일한 데이터베이스에 여러 datashare를 생성할 수 있습니다. 클러스터에서 생성할 수 있는 datashare 수에는 제한이 없습니다.

   Amazon Redshift 콘솔을 사용하여 datashare를 생성할 수도 있습니다. 자세한 내용은 [데이터 공유 만들기](datashare-creation.md#create-datashare-console) 섹션을 참조하세요.

   CREATE DATASHARE 문을 실행할 때 MANAGEDBY ADX 옵션을 사용하여 암시적으로 AWS Data Exchange에 대한 datashare 액세스 권한을 부여합니다. 이는 AWS Data Exchange에서 이 datashare를 관리함을 나타냅니다. 새 datashare를 생성할 때만 MANAGEDBY ADX 옵션을 사용할 수 있습니다. ALTER DATASHARE 문으로 기존 datashare를 수정하여 MANAGEDBY ADX 옵션을 추가할 수 없습니다. MANAGEDBY ADX 옵션으로 datashare가 생성되면 AWS Data Exchange만 datashare에 액세스하고 관리할 수 있습니다.

   ```
   CREATE DATASHARE salesshare
   [[SET] MANAGEDBY [=] {ADX} ];
   ```

1. datashare에 객체를 추가합니다. 생산자 관리자는 AWS Data Exchange datashare에서 사용할 수 있는 datashare 객체를 계속 관리합니다.

   datashare에 객체를 추가하려면 객체를 추가하기 전에 스키마를 추가합니다. 스키마를 추가할 때 Amazon Redshift는 스키마 아래에 모든 객체를 추가하지 않습니다. 명시적으로 스키마를 추가해야 합니다. 자세한 내용은 [ALTER DATASHARE](r_ALTER_DATASHARE.md) 섹션을 참조하세요.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
   ```

   datashare에 뷰를 추가할 수도 있습니다.

   ```
   CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;
   ```

   ALTER DATASHARE를 사용하여 지정된 스키마에서 스키마, 테이블, 뷰 및 함수를 공유합니다. 슈퍼 사용자, datashare 소유자 또는 datashare에 대한 ALTER 또는 ALL 권한이 있는 사용자는 datashare를 변경하여 객체를 추가하거나 제거할 수 있습니다. 사용자는 datashare에서 객체를 추가하거나 제거할 수 있는 권한이 있어야 합니다. 사용자는 객체 소유자이거나 객체에 대한 SELECT, USAGE 또는 ALL 권한도 있어야 합니다.

   INCLUDENEW 절을 사용하여 지정된 스키마에서 생성된 새 테이블, 뷰 또는 SQL 사용자 정의 함수(UDF)를 datashare에 추가합니다. 슈퍼 사용자만 각 datashare-스키마 페어에 대해 이 속성을 변경할 수 있습니다.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare에서 객체를 추가하거나 제거할 수도 있습니다. 자세한 내용은 [데이터 공유에 데이터 공유 객체 추가](datashare-creation.md#add-datashare-object-console), [datashare에서 datashare 객체 제거](manage-datashare-existing-console.md#remove-datashare-object-console), [AWS Data Exchange datashare 편집](manage-adx-datashare-console.md#edit-adx-datashare-console) 섹션을 참조하세요.

1. AWS Data Exchange에 대해 datashare에 대한 액세스 권한을 부여하려면 다음 중 하나를 수행합니다.
   + `aws redshift authorize-data-share` API에서 `ADX` 키워드를 사용하여 AWS Data Exchange에 대해 datashare에 대한 액세스 권한을 명시적으로 부여합니다. 이를 통해 AWS Data Exchange는 서비스 계정의 datashare를 인식하고 소비자를 datashare에 연결하는 것을 관리할 수 있습니다.

     ```
     aws redshift authorize-data-share 
     --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
     --consumer-identifier ADX
     ```

     `AuthorizeDataShare` 및 `DeauthorizeDataShare` API에 조건부 키 `ConsumerIdentifier`를 사용하여 AWS Data Exchange가 IAM 정책에서 두 API를 호출하는 것을 명시적으로 허용하거나 거부할 수 있습니다.

------
#### [ JSON ]

****  

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

------
   + Amazon Redshift 콘솔을 사용하여 AWS Data Exchange datashare 권한을 부여하거나 제거합니다. 자세한 내용은 [datashare에서 권한 부여 또는 제거](authorize-datashare-console.md) 섹션을 참조하세요.
   + 선택적으로 AWS Data Exchange datashare를 AWS Data Exchange 데이터 집합으로 가져올 때 datashare에 대한 액세스 권한을 암시적으로 부여할 수 있습니다.

   AWS Data Exchange datashares에 대한 액세스 권한 부여를 제거하려면 `aws redshift deauthorize-data-share` API 작업에서 `ADX` 키워드를 사용합니다. 이렇게 하면 AWS Data Exchange에서 서비스 계정의 datashare를 인식하고 datashare에서 연결 제거를 관리할 수 있습니다.

   ```
   aws redshift deauthorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier ADX
   ```

1. 클러스터에서 생성된 datashare를 나열하고 datashare의 내용을 살펴봅니다.

   다음 예에서는 salesshare라는 datashare의 정보를 보여줍니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   ```
   DESC DATASHARE salesshare;
                  
    producer_account  |          producer_namespace          | share_type | share_name | object_type |           object_name          |   include_new
   -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+-------------------
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_users_redshift   |   
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_venue_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_category_redshift|
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_date_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_event_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_listing_redshift |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | table       | public.tickit_sales_redshift   |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | schema      | public                         |  t
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND   | salesshare | view        | public.sales_data_summary_view |
   ```

   다음 예에서는 생산자 클러스터의 아웃바운드 datashare를 보여줍니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   ```

   출력 결과는 다음과 비슷합니다.

   ```
   share_name | share_owner  | source_database | consumer_database | share_type |     createdate      | is_publicaccessible  | share_acl | producer_account |          producer_namespace 
   -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+---------------------------------------
   salesshare |    100       | dev             |                   |  OUTBOUND  | 2020-12-09 02:27:08 |          True        |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
   ```

   자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   [SVV\$1DATASHARES](r_SVV_DATASHARES.md), [SVV\$1DATASHARE\$1CONSUMERS](r_SVV_DATASHARE_CONSUMERS.md), 및 [SVV\$1DATASHARE\$1OBJECTS](r_SVV_DATASHARE_OBJECTS.md)를 사용하여 datashare, datashare 내의 객체 및 datashare 소비자를 볼 수도 있습니다.

1. datashare를 삭제합니다. DROP DATASHARE 문을 사용하여 다른 AWS 계정과 공유되는 AWS Data Exchange datashare를 삭제하지 않는 것이 좋습니다. 이러한 계정은 dathare에 대한 액세스 권한을 상실합니다. 이 작업은 되돌릴 수 없습니다. 이는 AWS Data Exchange의 데이터 제품 및 서비스 약관을 위반할 수 있습니다. AWS Data Exchange datashare를 삭제하려는 경우 [DROP DATASHARE 사용 참고 사항](r_DROP_DATASHARE.md#r_DROP_DATASHARE_usage) 섹션을 참조하세요.

   다음 예에서는 salesshare라는 datashare를 삭제합니다.

   ```
   DROP DATASHARE salesshare;
   ERROR:  Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
   ```

   AWS Data Exchange datashare 삭제를 허용하려면 datashare\$1break\$1glass\$1session\$1var 변수를 설정하고 DROP DATASHARE 문을 다시 실행합니다. AWS Data Exchange datashare를 삭제하려는 경우 [DROP DATASHARE 사용 참고 사항](r_DROP_DATASHARE.md#r_DROP_DATASHARE_usage) 섹션을 참조하세요.

   Amazon Redshift 콘솔을 사용하여 datashare를 삭제할 수도 있습니다. 자세한 내용은 [계정에 생성된 AWS Data Exchange datashare 삭제](manage-adx-datashare-console.md#delete-adx-datashare-console) 섹션을 참조하세요.

1. ALTER DATASHARE를 사용하여 datashare에서 언제든지 객체를 제거합니다. REVOKE USAGE ON을 사용하여 특정 소비자에 대한 datashare 권한을 취소합니다. datashare 내의 객체에 대한 USAGE 권한을 취소하고 모든 소비자 클러스터에 대한 액세스를 즉시 중지합니다. 데이터베이스 및 테이블 나열 등의 datashare 나열과 메타데이터 쿼리는 액세스가 취소된 후 공유 객체를 반환하지 않습니다.

   ```
   ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
   ```

   Amazon Redshift 콘솔을 사용하여 datashare를 편집할 수도 있습니다. 자세한 내용은 [AWS Data Exchange datashare 편집](manage-adx-datashare-console.md#edit-adx-datashare-console) 섹션을 참조하세요.

1. AWS Data Exchange datashare에서 GRANT USAGE를 부여하거나 취소합니다. AWS Data Exchange datashare에 대한 GRANT USAGE를 부여하거나 취소할 수 없습니다. 다음 예에서는 AWS Data Exchange에서 관리하는 datashare에 대해 GRANT USAGE 권한이 AWS 계정에 부여된 경우 오류를 보여줍니다.

   ```
   CREATE DATASHARE salesshare MANAGEDBY ADX;
   ```

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '012345678910';
   ERROR:  Permission denied to add/remove consumer to/from datashare salesshare. Datashare consumers are managed by ADX.
   ```

   자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

**생산자 관리자인 경우 다음 단계에 따라 AWS Data Exchange 콘솔에서 데이터 공유 제품을 만들고 게시합니다.**
+ AWS Data Exchange datashare가 생성되면 생산자는 새 데이터 집합을 생성하고, 자산을 가져오고, 개정을 생성하고, 새 제품을 생성 및 게시합니다.

  Amazon Redshift 콘솔을 사용하여 데이터 집합을 생성합니다. 자세한 내용은 [AWS Data Exchange에서 데이터 집합 생성](manage-adx-datashare-console.md#create-dataset-console) 섹션을 참조하세요.

  자세한 내용은 [AWS Data Exchange에서 데이터 제품 제공](https://docs.aws.amazon.com/data-exchange/latest/userguide/providing-data-sets.html)을 참조하세요.

## 소비자로서 AWS Data Exchange datashare 작업
<a name="adx-getting-started-consumer"></a>

Amazon Redshift로 데이터 사본을 저장하거나 관리할 필요 없이 AWS Data Exchange에서 데이터세트에 액세스하고 분석합니다.

**소비자인 경우 다음 단계에 따라 AWS Data Exchange datashare가 포함된 데이터 제품을 검색하고 Amazon Redshift 데이터를 쿼리합니다.**

1. AWS Data Exchange 콘솔에서 AWS Data Exchange datashare가 포함된 데이터 제품을 검색하고 구독합니다.

   구독이 시작되면 AWS Data Exchange datashare가 포함된 데이터 집합에 자산으로 가져온 라이선스가 부여된 Amazon Redshift 데이터에 액세스할 수 있습니다.

   AWS Data Exchange datashare가 포함된 데이터 제품 사용을 시작하는 방법에 대한 자세한 내용은 [AWS Data Exchange에서 데이터 제품 구독](https://docs.aws.amazon.com/data-exchange/latest/userguide/subscribe-to-data-sets.html)을 참조하세요.

1. 필요한 경우 Amazon Redshift 콘솔에서 Amazon Redshift 클러스터를 생성합니다.

   클러스터 생성 방법에 대한 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)을 참조하세요.

1. 사용할 수 있는 datashare를 나열하고 datashare의 내용을 봅니다. 자세한 내용은 [DESC DATASHARE](r_DESC_DATASHARE.md) 및 [SHOW DATASHARES](r_SHOW_DATASHARES.md) 섹션을 참조하세요.

   다음 예에서는 지정된 생산자 네임스페이스의 인바운드 datashare 정보를 보여줍니다. 소비자 관리자로 DESC DATASHARE를 실행할 때 인바운드 데이터 공유를 보려면 ACCOUNT 및 NAMESPACE 옵션을 지정해야 합니다.

   ```
   DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   
    producer_account  |          producer_namespace          | share_type | share_name | object_type |           object_name           |   include_new
   -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_users_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_venue_redshift    |     
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_category_redshift |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_date_redshift     |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_event_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_listing_redshift  |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift    |
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                          |    
    123456789012      | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | view        | public.sales_data_summary_view  |
   ```

   클러스터 슈퍼 사용자만 이 작업을 수행할 수 있습니다. SVV\$1DATASHARES를 사용하여 datashare를 보고 SVV\$1DATASHARE\$1OBJECTS를 사용하여 datashare 내의 객체를 볼 수도 있습니다.

   다음 예에서는 소비자 클러스터의 인바운드 datashare를 보여줍니다.

   ```
   SHOW DATASHARES LIKE 'sales%';
   
   
    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account |          producer_namespace
   ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+--------------------------------------
    salesshare |             |                 |                   | INBOUND    |            |         t           |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
   ```

1. datashare를 참조하는 로컬 데이터베이스를 생성합니다. AWS Data Exchange datashare를 위한 로컬 데이터베이스를 생성하려면 ACCOUNT 및 NAMESPACE 옵션을 지정해야 합니다. 자세한 내용은 [데이터베이스 생성](r_CREATE_DATABASE.md) 섹션을 참조하세요.

   ```
   CREATE DATABASE sales_db FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   로컬 데이터베이스의 객체에 대한 액세스를 보다 세밀하게 제어하려면 데이터베이스를 만들 때 WITH PERMISSIONS 절을 사용하세요. 이렇게 하면 6단계에서 데이터베이스의 객체에 객체 수준 권한을 부여할 수 있습니다.

   ```
   CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
   ```

   [SVV\$1REDSHIFT\$1DATABASES](r_SVV_REDSHIFT_DATABASES.md) 뷰를 쿼리하여 datashare에서 생성한 데이터베이스를 볼 수 있습니다. 그러나 소비자 클러스터의 로컬 데이터베이스에 연결하고 데이터베이스 간 쿼리를 수행하여 데이터 공유에서 만들어진 데이터베이스의 데이터를 쿼리할 수 있습니다. 기존 datashare에서 생성된 데이터베이스 객체 위에 datashare를 생성할 수 없습니다. 그러나 데이터를 소비자 클러스터의 별도 테이블에 복사하고 필요한 처리를 수행한 다음 생성된 새 객체를 공유할 수 있습니다.

   Amazon Redshift 콘솔을 사용하여 datashare에서 데이터베이스를 생성할 수도 있습니다. 자세한 내용은 [datashare에서 데이터베이스 생성](query-datashare-console.md#create-database-from-datashare-console) 섹션을 참조하세요.

1. (옵션) 소비자 클러스터에서 가져온 소비자 데이터베이스의 특정 스키마를 참조하고 세분화된 권한을 할당할 외부 스키마를 생성합니다. 자세한 내용은 [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) 섹션을 참조하세요.

   ```
   CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
   ```

1. 필요에 따라 소비자 클러스터의 사용자 또는 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 권한을 부여합니다. 자세한 내용은 [GRANT](r_GRANT.md) 또는 [REVOKE](r_REVOKE.md) 섹션을 참조하세요.

   ```
   GRANT USAGE ON DATABASE sales_db TO Bob;
   ```

   ```
   GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
   ```

    WITH PERMISSIONS를 사용하지 않고 데이터베이스를 생성한 경우 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자와 역할에 할당할 수 있습니다. 경우에 따라 datashare에서 생성된 데이터베이스 객체의 하위 집합에 대한 세분화된 제어가 필요합니다. 이러한 경우 이전 단계에서 설명한 대로 datashare의 특정 스키마를 가리키는 외부 스키마 참조를 생성하고 스키마 수준에서 세분화된 권한을 제공할 수 있습니다.

   또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터가 필요한 세분성으로 추가 datashare를 생성하도록 할 수도 있습니다. 데이터 공유에서 생성된 데이터베이스에 대해 필요에 따라 원하는 만큼 스키마 참조를 생성할 수 있습니다.

   4단계에서 WITH PERMISSIONS를 사용하여 데이터베이스를 만든 경우 공유 데이터베이스의 객체에 객체 수준 권한을 할당해야 합니다. USAGE 권한만 있는 사용자는 추가 객체 수준 권한을 부여받을 때까지 WITH PERMISSION을 사용하여 만든 데이터베이스의 객체에 액세스할 수 없습니다.

   ```
   GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
   ```

1. datashare의 공유 객체에서 데이터를 쿼리합니다.

   소비자 데이터베이스 및 소비자 클러스터의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버, SHOW 명령, SVV\$1ALL 및 SVV\$1REDSHIFT 뷰를 사용합니다.

   생산자 클러스터의 경우 각 스키마 내의 데이터베이스, 테이블 및 뷰에 많은 스키마가 있을 수 있습니다. 소비자 측의 사용자는 datashare를 통해 사용할 수 있는 객체의 하위 집합만 볼 수 있습니다. 이러한 사용자는 생산자 클러스터에서 전체 메타데이터를 볼 수 없습니다. 이 접근 방식은 datashare로 세분화된 메타데이터 보안 제어를 제공하는 데 도움이 됩니다.

   로컬 클러스터 데이터베이스에 계속 연결합니다. 그러나 이제 세 부분으로 구성된 database.schema.table 표기법을 사용하여 datashare에서 생성된 데이터베이스와 스키마에서도 읽을 수도 있습니다. 사용자에게 표시되는 모든 데이터베이스에 걸쳐 쿼리를 수행할 수 있습니다. 이러한 데이터베이스는 클러스터의 로컬 데이터베이스이거나 datashare에서 생성된 데이터베이스일 수 있습니다. 또는 이러한 소비자 데이터베이스에 직접 연결하고 부분 표기법으로 공유 객체에 대해 쿼리를 실행할 수 있습니다.

   전체 자격을 사용하여 데이터에 액세스할 수 있습니다. 자세한 내용은 [데이터베이스 간 쿼리 예제](cross-database_example.md) 섹션을 참조하세요.

   ```
   SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5;
   
    salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime
   ---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------
          1 |      1 |    36861 |   21191 |    7872 |   1875 |       4 |    728.00 |     109.20 | 2008-02-18 02:36:48
          2 |      4 |     8117 |   11498 |    4337 |   1983 |       2 |     76.00 |      11.40 | 2008-06-06 05:00:16
          3 |      5 |     1616 |   17433 |    8647 |   1983 |       2 |    350.00 |      52.50 | 2008-06-06 08:26:17
          4 |      5 |     1616 |   19715 |    8647 |   1986 |       1 |    175.00 |      26.25 | 2008-06-09 08:38:52
          5 |      6 |    47402 |   14115 |    8240 |   2069 |       2 |    154.00 |      23.10 | 2008-08-31 09:17:02
   ```

   공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

   쿼리 외에도 소비자는 공유 객체에 대한 뷰를 생성할 수 있습니다. 후기 바인딩 뷰나 구체화된 뷰만 지원됩니다. Amazon Redshift는 공유 데이터에 대한 일반 뷰를 지원하지 않습니다. 소비자가 생성하는 뷰는 여러 로컬 데이터베이스 또는 datashare에서 생성된 데이터베이스에 걸쳐 있을 수 있습니다. 자세한 내용은 [CREATE VIEW](r_CREATE_VIEW.md) 섹션을 참조하세요.

   ```
   // Connect to a local cluster database
                  
   // Create a view on shared objects and access it. 
   CREATE VIEW sales_data 
   AS SELECT * 
   FROM sales_db.public.tickit_sales_redshift 
   WITH NO SCHEMA BINDING;
   
   SELECT * FROM sales_data;
   ```

# AWS Lake Formation 관리형 데이터 공유 시작하기
<a name="lf-getting-started"></a>

Amazon Redshift를 사용하면 AWS Lake Formation 관리형 데이터 공유를 통해 AWS 계정 및 Amazon Redshift 클러스터 전반에서 실시간 데이터에 액세스하고 공유할 수 있습니다. AWS Lake Formation 데이터 공유에서는 데이터 공급자가 다른 AWS 계정 및 Amazon Redshift 클러스터를 포함한 모든 소비자와 Amazon S3 데이터 레이크의 실시간 데이터를 안전하게 공유하도록 지원합니다.

# 생산자로서 Lake Formation에서 관리하는 데이터 공유 사용
<a name="lake-formation-getting-started-producer"></a>

Amazon Redshift로 AWS Lake Formation 데이터 공유를 통해 공유된 데이터에 액세스하고 분석합니다. AWS Lake Formation 데이터 공유를 사용하면 기본 데이터를 복사하거나 이전할 필요 없이 AWS 계정과 Amazon Redshift 클러스터 간에 안전한 데이터 공유가 가능합니다.

AWS Lake Formation에 데이터를 공유하면 Amazon Redshift 데이터 공유의 AWS Lake Formation 권한을 중앙에서 정의하고 데이터 공유 내의 객체에 대한 사용자 액세스를 제한할 수 있습니다.

Amazon Redshift가 있으면 AWS Lake Formation 관리형 데이터 공유를 생산자로 사용하여 AWS 계정 및 Amazon Redshift 클러스터 전반에서 실시간 데이터를 안전하게 공유할 수 있습니다. Lake Formation 관리형 데이터 공유는 Amazon Redshift 클러스터의 실시간 데이터를 다른 AWS 계정 및 서비스와 공유할 수 있는 객체입니다.

생산자 클러스터 또는 작업 그룹 관리자는 다음 단계에 따라 Lake Formation Formation에 데이터 공유를 공유하세요.

1. 클러스터에서 데이터 공유를 생성하고 데이터 공유에 액세스할 수 있도록 AWS Lake Formation에 권한을 부여합니다.

   클러스터 슈퍼 사용자와 데이터베이스 소유자만 datashare를 생성할 수 있습니다. 각 datashare는 생성하는 동안 데이터베이스와 연결됩니다. 해당 데이터베이스의 객체만 해당 datashare에서 공유할 수 있습니다. 동일하거나 다른 세부 수준의 객체를 사용하여 동일한 데이터베이스에 여러 datashare를 생성할 수 있습니다. 클러스터에서 생성할 수 있는 datashare 수에는 제한이 없습니다.

   ```
   CREATE DATASHARE salesshare;
   ```

1. 데이터 공유에 객체를 추가합니다. 생산자 클러스터 또는 작업 그룹 관리자는 사용 가능한 데이터 공유 객체를 계속 관리합니다. datashare에 객체를 추가하려면 객체를 추가하기 전에 스키마를 추가합니다. 스키마를 추가할 때 Amazon Redshift는 스키마 아래에 모든 객체를 추가하지 않습니다. 명시적으로 스키마를 추가해야 합니다. 자세한 내용은 [ALTER DATASHARE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATASHARE.html)를 참조하세요.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
   ```

   datashare에 뷰를 추가할 수도 있습니다. 지원되는 는 표준 뷰, 후기 바인딩 뷰 및 구체화된 뷰입니다.

   ```
   CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift;
   ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
   ```

   ALTER DATASHARE를 사용하여 지정된 스키마에서 스키마, 테이블 및 뷰를 공유합니다. 슈퍼 사용자, datashare 소유자 또는 datashare에 대한 ALTER 또는 ALL 권한이 있는 사용자는 datashare를 변경하여 객체를 추가하거나 제거할 수 있습니다. 데이터베이스 사용자는 객체의 소유자이거나 객체에 대한 SELECT, USAGE 또는 ALL 권한이 있어야 합니다.

   INCLUDENEW 절을 사용하여 지정된 스키마에서 생성된 새 테이블과 뷰를 데이터 공유에 추가합니다. 슈퍼 사용자만 각 datashare-스키마 페어에 대해 이 속성을 변경할 수 있습니다.

   ```
   ALTER DATASHARE salesshare ADD SCHEMA PUBLIC;
   ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;
   ```

1. 수퍼유저만 각 데이터 공유-스키마 쌍에 대해 이 속성을 변경할 수 있습니다.

   ```
   GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

   사용을 취소하려면 다음 명령을 사용하세요.

   ```
   REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '012345678910' VIA DATA CATALOG;
   ```

1. `aws redshift authorize-data-share` API 작업을 사용하여 Lake Formation의 데이터 공유에 대한 액세스 권한을 부여합니다. 이를 통해 Lake Formation은 서비스 계정에서 데이터 공유를 인식하고 데이터 공유에 대한 소비자 연결을 관리할 수 있습니다.

   ```
   aws redshift authorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    Lake Formation에서 관리하는 데이터 공유에서 권한을 제거하려면 `aws redshift deauthorize-data-share` API 작업을 사용하세요. 이렇게 하면 AWS Lake Formation이 서비스 계정에서 데이터 공유를 인식하고 권한 부여를 제거할 수 있습니다.

   ```
   aws redshift deauthorize-data-share 
   --data-share-arn arn:aws:redshift:us-east-1:{PRODUCER_ACCOUNT}:datashare:{PRODUCER_CLUSTER_NAMESPACE}/salesshare 
   --consumer-identifier {"DataCatalog/<consumer-account-id>"}
   ```

    언제든지 생산자 클러스터 또는 작업 그룹 관리자가 더 이상 소비자 클러스터 또는 작업 그룹과 데이터를 공유할 필요가 없다고 판단하면 DROP DATASHARE를 사용하여 데이터 공유를 삭제하거나, 데이터 공유의 인증을 해제하거나, 데이터 공유 권한을 취소할 수 있습니다. Lake Formation의 연결된 권한 및 객체는 자동으로 삭제되지 않습니다.

   ```
   DROP DATASHARE salesshare;
   ```

    데이터 공유를 관리하도록 Lake Formation 계정에 권한을 부여한 후 Lake Formation 관리자는 공유 데이터 공유를 검색하고 데이터 카탈로그 ARN과 데이터 공유를 연결하고, 데이터 공유에 연결되는 데이터베이스를 AWS Glue Data Catalog 카탈로그에서 생성할 수 있습니다. AWS CLI를 사용하여 데이터 공유를 연결하려면 [ associate-data-share-consumer](https://docs.aws.amazon.com/cli/latest/reference/redshift/associate-data-share-consumer.html) 명령을 사용합니다. AWS 리전 간에 데이터 공유를 공유하려면 `associate-data-share-consumer` 명령에 `--region` 파라미터를 지정하거나 AWS 콘솔을 사용하여 데이터 소비자를 선택합니다. 다음 예제는 Lake Formation에서 관리하는 데이터 공유를 여러 리전에서 공유하는 방법을 보여줍니다.

   ```
   aws redshift associate-data-share-consumer --region <region-1>
   --data-share-arn 'arn:aws:redshift:us-east-1:12345678912:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/sample_share' 
   --consumer-arn 'arn:aws:glue:<region-1>:111912345678:catalog'
   ```

   Lake Formation 관리자는 데이터 공유 내의 객체가 Lake Formation 내의 객체에 매핑되는 방법을 정의하는 로컬 리소스도 생성해야 합니다. 데이터 공유 검색 및 로컬 리소스 생성에 대한 자세한 내용은 [Amazon Redshift 데이터 공유의 데이터에 대한 권한 관리](https://docs.aws.amazon.com/lake-formation/latest/dg/data-sharing-redshift.html)를 참조하세요.

# 소비자로서 Lake Formation에서 관리하는 데이터 공유 사용
<a name="lake-formation-getting-started-consumer"></a>

Amazon Redshift를 사용하면 AWS Lake Formation 데이터 공유를 통해 공유된 데이터에 액세스하고 분석할 수 있습니다. 데이터 공유는 다양한 데이터 소스의 테이블 또는 데이터베이스 등 데이터 객체 모음이 포함된 데이터 제품입니다.

 AWS Lake Formation 관리자가 데이터 공유 초대를 검색하고 데이터 공유에 연결되는 AWS Glue Data Catalog에 데이터베이스를 생성한 후, 소비자 클러스터 또는 작업 그룹 관리자는 클러스터를 AWS Glue Data Catalog의 데이터 공유 및 데이터베이스와 연결하고 소비자 클러스터 또는 작업 그룹에 로컬 데이터베이스를 생성하며 Amazon Redshift 소비자 클러스터 또는 작업 그룹의 사용자 및 역할이 쿼리를 시작하도록 액세스 권한을 부여할 수 있습니다. 쿼리 권한을 설정하려면 다음 단계를 따르세요.

1. 필요한 경우 Amazon Redshift 콘솔에서 소비자 클러스터 또는 작업 그룹 역할을 할 Redshift 클러스터를 생성합니다. 클러스터 생성 방법에 대한 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#create-cluster)을 참조하세요.

1. AWS Glue Data Catalog 소비자 클러스터 또는 작업 그룹 사용자가 액세스할 수 있는 데이터베이스를 나열하려면 [SHOW DATABASES](https://docs.aws.amazon.com/redshift/latest/dg/r_SHOW_DATABASES.html) 명령을 실행합니다.

   ```
   SHOW DATABASES FROM DATA CATALOG [ACCOUNT <account-id>,<account-id2>] [LIKE <expression>]
   ```

   이렇게 하면 AWS Glue 데이터베이스의 ARN, 데이터베이스 이름 및 데이터 공유에 대한 정보와 같이 Data Catalog에서 사용할 수 있는 리소스가 나열됩니다.

1. SHOW DATABASES의 AWS Glue 데이터베이스 ARN을 사용하여 소비자 클러스터 또는 작업 그룹에 로컬 데이터베이스를 생성합니다. 자세한 내용은 [Creating a database](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)(데이터베이스 생성)를 참조하세요.

   ```
   CREATE DATABASE lf_db FROM ARN <lake-formation-database-ARN> WITH [NO] DATA CATALOG SCHEMA [<schema>];
   ```

1. 필요에 따라 소비자 클러스터 또는 작업 그룹의 사용자 및 역할에 데이터 공유에서 생성된 데이터베이스 및 스키마 참조에 대한 액세스 권한을 부여합니다. 자세한 내용은 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 또는 [REVOKE](https://docs.aws.amazon.com//redshift/latest/dg/r_REVOKE.html)를 참조하세요. [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html) 명령으로 생성된 사용자는 Lake Formation에 공유된 데이터 공유의 객체에 액세스할 수 없습니다. Redshift와 Lake Formation 모두에 대한 액세스 권한이 있는 사용자만 Lake Formation과 공유된 데이터 공유에 액세스할 수 있습니다.

   ```
   GRANT USAGE ON DATABASE sales_db TO IAM:Bob;
   ```

    소비자 클러스터 또는 작업 그룹 관리자는 데이터 공유에서 생성된 전체 데이터베이스에 대한 권한만 사용자와 역할에 할당할 수 있습니다. 경우에 따라 datashare에서 생성된 데이터베이스 객체의 하위 집합에 대한 세분화된 제어가 필요합니다.

    또한 공유 객체 위에 후기 바인딩 뷰를 생성하고 이를 사용하여 세분화된 권한을 할당할 수 있습니다. 생산자 클러스터 또는 작업 그룹이 필요한 세분성으로 추가 데이터 공유를 생성하도록 할 수도 있습니다. datashare에서 생성된 데이터베이스에 대한 많은 스키마 참조를 생성할 수 있습니다.

1. 데이터베이스 사용자는 SVV\$1EXTERNAL\$1TABLES 및 SVV\$1EXTERNAL\$1COLUMNS 뷰를 사용하여 AWS Glue 데이터베이스 내의 모든 공유 테이블 또는 열을 찾을 수 있습니다.

   ```
   SELECT * from svv_external_tables WHERE redshift_database_name = 'lf_db';
                           
   SELECT * from svv_external_columns WHERE redshift_database_name = 'lf_db';
   ```

1. datashare의 공유 객체에서 데이터를 쿼리합니다.

   소비자 데이터베이스 및 소비자 클러스터 또는 작업 그룹의 스키마에 대한 권한이 있는 사용자와 역할은 모든 공유 객체의 메타데이터를 탐색할 수 있습니다. 또한 소비자 클러스터 또는 작업 그룹에서 로컬 객체를 탐색할 수 있습니다. 이를 위해 JDBC 또는 ODBC 드라이버나 SVV\$1ALL 및 SVV\$1EXTERNAL 뷰를 사용할 수 있습니다.

   ```
   SELECT * FROM lf_db.schema.table;
   ```

   공유 객체에는 SELECT 문만 사용할 수 있습니다. 그러나 다른 로컬 데이터베이스에 있는 공유 객체의 데이터를 쿼리하여 소비자 클러스터에 테이블을 생성할 수 있습니다.

   ```
   // Connect to a local cluster database
               
   // Create a view on shared objects and access it.
   
   CREATE VIEW sales_data 
   AS SELECT * 
   FROM sales_db.public.tickit_sales_redshift 
   WITH NO SCHEMA BINDING;
   
   SELECT * FROM sales_data;
   ```