Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 블로그 게시물
Amazon Redshift 페더레이션 권한 카탈로그에서 액세스 제어 관리
Amazon Redshift 페더레이션 권한을 사용하면 사용자는 AWS 계정의 모든 Redshift 웨어하우스에서 대략적인 액세스 제어와 세분화되지 않은 액세스 제어와 세분화된 액세스 제어를 모두 정의할 수 있습니다. 세분화되지 않은 권한은 범위가 지정된 권한을 포함하여 테이블, 뷰 및 데이터베이스 객체에 대한 액세스를 관리하는 반면, 세분화된 제어는 열 수준 권한과 행 수준 보안(RLS) 및 동적 데이터 마스킹(DDM)과 같은 보안 정책의 적용을 허용합니다.
권한 부여/취소
페더레이션 권한을 사용하면 Redshift 웨어하우스의 Redshift 페더레이션 권한 데이터베이스에서 테이블 및 뷰의 읽기, 쓰기 데이터에 대한 액세스와 같은 테이블 수준 액세스의 권한을 정의할 수 있습니다.
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table TO "IAMR:sales_analyst"; GRANT INSERT ON "sales_db@finance-catalog".sales_schema.sales_view TO "IAMR:sales_data_engineer"; REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst"; REVOKE DELETE ON "sales_db@finance-catalog".sales_schema.us_sales_view FROM "IAMR:us_sales_analyst";
Amazon Redshift 페더레이션 권한은 데이터베이스 또는 스키마 내 유형의 모든 객체에 대한 권한을 부여하거나 취소할 수 있는 범위가 지정된 권한을 지원합니다.
GRANT SELECT FOR TABLES IN SCHEMA "sales_db@finance-catalog".sales_schema TO "IAMR:sales_manager"; REVOKE UPDATE FOR TABLES IN SCHEMA sales_schmea DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
데이터베이스에 대한 액세스 권한 부여/취소를 정의할 수 있습니다.
GRANT CREATE ON DATABASE "sales_db@finance-catalog" TO "IAMR:sales_admin"; REVOKE TEMP ON DATABASE "sales_db@finance-catalog" FROM "IAMR:sales_analyst";
권한 부여에 지원되는 Amazon Redshift 페더레이션 권한 구문에 대한 자세한 내용은 Amazon Redshift 페더레이션 권한 카탈로그에서 부여할 수 있는 권한 섹션을 참조하세요.
세분화된 액세스 제어
Amazon Redshift 페더레이션 권한이 있는 데이터베이스에서 열 수준 액세스 제어, 행 수준 보안(RLS) 및 동적 데이터 마스킹(DDM)을 사용하여 민감한 데이터에 대한 세분화된 액세스 제어를 정의할 수 있습니다. 열 수준 액세스 제어를 사용하면 테이블 및 뷰에 대해 더 세분화된 열 수준 액세스 권한을 정의할 수 있습니다. 데이터베이스에서 sys:secadmin 역할을 가진 슈퍼유저 및 사용자 또는 역할은 RLS 및 DDM 정책을 생성하고, 이러한 정책을 특정 관계에 연결하고, 관계에서 RLS를 활성화할 수 있습니다.
열 수준 액세스 제어:
테이블 또는 뷰의 개별 열에 대한 특정 권한을 부여하거나 취소할 수 있습니다.
GRANT SELECT ON "sales_db@finance-catalog".sales_schema.sales_table(order_number, sales_date, purchase_amount, sale_amount) TO "IAMR:sales_revenue_analyst"; REVOKE UPDATE ON "sales_db@finance-catalog".sales_schema.us_sales_view(order_number, sales_date, purchase_amount, sale_amount) FROM "IAMR:sales_revenue_analyst";
행 수준 보안(RLS):
관계에 대한 행 수준 보안을 켜거나 끌 수 있습니다.
ALTER TABLE "sales_db@finance-catalog".sales_schema.sales_table ROW LEVEL SECURITY ON;
데이터베이스에서 RLS 정책을 생성, 변경, 삭제할 수 있습니다.
-- Create an RLS policy CREATE RLS POLICY "sales_db@finance-catalog".policy_america WITH (region VARCHAR(10)) USING (region = 'USA'); -- Alter an RLS policy ALTER RLS POLICY "sales_db@finance-catalog".policy_america USING (region IN ('USA', 'CANADA', 'Mexico')); -- Drop an RLS policy DROP RLS POLICY "sales_db@finance-catalog".policy_america;
관계에 RLS 정책을 연결하거나 분리할 수 있습니다.
-- Attach an RLS policy ATTACH RLS POLICY "sales_db@finance-catalog".policy_america ON "sales_db@finance-catalog".sales_schema.sales_table TO "IAMR:america_sales_analyst"; -- Detach an RLS policy DETACH RLS POLICY "sales_db@finance-catalog".policy_america ON "sales_db@finance-catalog".sales_schema.sales_view_america FROM "IAMR:global_sales_analyst";
동적 데이터 마스킹(DDM):
데이터베이스에서 마스킹 정책을 생성, 변경, 삭제할 수 있습니다.
-- Create a masking policy CREATE MASKING POLICY "sales_db@finance-catalog".hash_credit WITH (credit_card varchar(256)) USING (sha2(credit_card + 'testSalt', 256)); -- Alter an masking policy ALTER MASKING POLICY "sales_db@finance-catalog".hash_credit USING (sha2(credit_card + 'otherTestSalt', 256)); -- Drop an masking policy DROP MASKING POLICY "sales_db@finance-catalog".hash_credit;
관계에 마스킹 정책을 연결하거나 분리할 수 있습니다.
-- Attach a masking policy ATTACH MASKING POLICY hash_credit ON "sales_db@finance-catalog".sales_schema.transaction_table (credit_card) TO "IAMR:sales_analyst" PRIORITY 30; -- Detach a masking policy DETACH MASKING POLICY hash_credit ON "sales_db@finance-catalog".sales_schema.transaction_view (credit_card) FROM "IAMR:transaction_analyst";
슈퍼유저 또는 sys:secadmin 권한이 있는 사용자는 SHOW POLICIES 명령을 사용하여 RLS 및 DDM 정책과 페더레이션 권한이 있는 관계에 대한 연결을 볼 수 있습니다.
참고
-
RLS의 사용자 정의 함수(UDF)인 DDM 정책 정의는 Amazon Redshift 페더레이션 권한에서 지원되지 않습니다.
-
Redshift SQL 함수 user_is_member_of, role_is_member_of, user_is_member_of_role은 Amazon Redshift 페더레이션 권한에서 지원되지 않습니다.
Amazon Redshift 페더레이션 권한 카탈로그에서 부여할 수 있는 권한
다양한 세부 수준의 리소스에 대한 Amazon Redshift 페더레이션 권한을 사용하여 데이터베이스에 대한 권한 관리를 지원하는 SQL 문입니다. 구문은 로컬 테이블 참조(리소스가 포함된 데이터베이스에 연결되거나 소스 데이터베이스가 사용 중일 때)와 정규화된 데이터베이스 간 참조를 모두 지원합니다.
Note
-
username은 IAM 사용자, IAM 역할 또는 IdC(AWS IAM Identity Center) 사용자를 참조할 수 있습니다. -
role_name은 IdC 그룹을 참조할 수 있습니다. IAM 그룹은 지원되지 않습니다.
세분화되지 않은 권한
GRANT { SELECT | INSERT | UPDATE | DELETE | TRUNCATE} ON [ TABLE ] { table_name | database@catalog.schema_name.table_name } TO { username | ROLE role_name | PUBLIC } REVOKE { SELECT | INSERT | UPDATE | DELETE | TRUNCATE } ON [ TABLE ] { table_name | database@catalog.schema_name.table_name } FROM { username | ROLE role_name | PUBLIC }
열 수준 권한
GRANT { { SELECT | UPDATE | DELETE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { table_name | database@catalog.schema_name.table_name } TO { username | ROLE role_name | PUBLIC } REVOKE { { SELECT | UPDATE | DELETE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { table_name | database@catalog.schema_name.table_name } FROM { username | ROLE role_name | PUBLIC }
범위가 지정된 권한
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASEdatabase@catalogTO {username[ WITH GRANT OPTION ] | ROLErole_name} [, ...] GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [ PRIVILEGES ] } } FOR TABLES IN { SCHEMAschema_name[DATABASEdatabase@catalog] | DATABASEdatabase@catalog} TO {username[ WITH GRANT OPTION ] | ROLErole_name} [, ...] REVOKE [ GRANT OPTION ] { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASEdatabase@catalogFROM {username| ROLErole_name} [, ...] REVOKE [ GRANT OPTION ] { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [ PRIVILEGES ] } } FOR TABLES IN { SCHEMAschema_name[ DATABASEdatabase@catalog] | DATABASEdatabase@catalog} FROM {username| ROLErole_name} [, ...]