사용 노트 - Amazon Redshift

사용 노트

객체에 대한 권한을 허용하려면 다음 조건 중 하나를 충족해야 합니다.

  • 객체 소유자입니다.

  • 수퍼유저입니다.

  • 그 객체와 권한에 대해 허용된 권한이 있습니다.

예를 들어, 다음 명령을 실행하면 사용자 HR은 직원 테이블에서 SELECT 명령을 수행할 뿐 아니라 다른 사용자에 대해 같은 권한을 허용하고 취소할 수 있습니다.

grant select on table employees to HR with grant option;

HR은 SELECT 이외의 작업 권한이나 직원 이외의 테이블에 대한 권한을 허용할 수 없습니다.

또 다른 예로, 다음 명령을 실행하면 사용자 HR은 직원 테이블에서 ALTER 명령을 수행할 뿐 아니라 다른 사용자에 대해 같은 권한을 허용하고 취소할 수 있습니다.

grant ALTER on table employees to HR with grant option;

HR은 ALTER 이외의 작업 권한이나 직원 이외의 테이블에 대한 권한을 허용할 수 없습니다.

뷰에 대해 허용된 권한을 갖는다고 해서 기본 테이블에 대한 권한을 갖는다는 의미는 아닙니다. 마찬가지로, 스키마에 대해 허용된 권한을 갖는다고 해서 스키마에 있는 테이블에 대한 권한을 갖는다는 의미는 아닙니다. 대신에 기본 테이블에 대한 액세스 권한을 명시적으로 부여합니다.

AWS Lake Formation 테이블에 권한을 부여하려면 해당 테이블의 외부 스키마와 연결된 IAM 역할에 외부 테이블에 권한을 부여할 권한이 있어야 합니다. 다음 예제에서는 연결된 IAM 역할 myGrantor가 있는 외부 스키마를 생성합니다. IAM 역할 myGrantor는 다른 사람에게 권한을 부여할 권한이 있습니다. GRANT 명령은 외부 스키마와 연결된 IAM 역할 myGrantor의 권한을 사용하여 IAM 역할 myGrantee에 권한을 부여합니다.

create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

IAM 역할에 GRANT ALL 권한을 부여하면 관련된 Lake Formation 사용 Data Catalog에서 개별 권한이 부여됩니다. 예를 들어 다음 GRANT ALL은 부여된 개별 권한(SELECT, ALTER, DROP, DELETE, INSERT)을 Lake Formation 콘솔에 표시합니다.

grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

수퍼유저는 객체 권한을 설정하는 GRANT 및 REVOKE 명령과는 무관하게 모든 객체에 액세스할 수 있습니다.

열 수준 액세스 제어 사용 시 주의 사항

다음 사용 노트는 Amazon Redshift 테이블 및 뷰에 대한 열 수준 권한에 적용됩니다. 이러한 주의 사항은 테이블에 대해 설명합니다. 예외를 명시적으로 언급하지 않는 한 뷰에 동일한 주의 사항이 적용됩니다.

  • Amazon Redshift 테이블의 경우 열 수준에서 SELECT 및 UPDATE 권한만 부여할 수 있습니다. Amazon Redshift 뷰의 경우 열 수준에서 SELECT 권한만 부여할 수 있습니다.

  • ALL 키워드는 테이블의 열 수준 GRANT 컨텍스트에서 사용될 때 결합된 SELECT 및 UPDATE 권한의 동의어입니다.

  • 테이블의 모든 열에 대해 SELECT 권한이 없는 경우 SELECT * 작업을 수행하면 액세스 권한이 있는 열만 반환됩니다. 뷰를 사용할 때 SELECT * 작업은 뷰의 모든 열에 액세스하려고 시도합니다. 모든 열에 액세스할 수 있는 권한이 없는 경우 이러한 쿼리는 권한 거부 오류와 함께 실패합니다.

  • SELECT *는 다음과 같은 경우 액세스 가능한 열로만 확장되지 않습니다.

    • SELECT *를 사용하여 액세스 가능한 열만 포함하는 일반 뷰를 생성할 수 없습니다.

    • SELECT *를 사용하여 액세스 가능한 열만 포함하는 구체화된 뷰를 생성할 수 없습니다.

  • 테이블 또는 뷰에 대해 SELECT 또는 UPDATE 권한이 있고 열을 추가하는 경우 테이블 또는 뷰 및 모든 열에 대해 동일한 권한이 여전히 있습니다.

  • 테이블의 소유자 또는 수퍼유저만 열 수준 권한을 부여할 수 있습니다.

  • 열 수준 권한에는 WITH GRANT OPTION 절이 지원되지 않습니다.

  • 테이블 수준과 열 수준 모두에서 동일한 권한을 보유할 수 없습니다. 예를 들어 data_scientist 사용자는 employee 테이블에 대한 SELECT 권한과 employee.department 열에 대한 SELECT 권한을 모두 가질 수 없습니다. 테이블 및 테이블 내의 열에 동일한 권한을 부여할 때 다음 결과를 고려하십시오.

    • 사용자에게 테이블에 대한 테이블 수준 권한이 있는 경우 열 수준에서 동일한 권한을 부여해도 아무런 효과가 없습니다.

    • 사용자에게 테이블에 대한 테이블 수준 권한이 있는 경우 테이블의 하나 이상의 열에 대해 동일한 권한을 취소하면 오류가 반환됩니다. 대신 테이블 수준에서 권한을 취소합니다.

    • 사용자에게 열 수준 권한이 있는 경우 테이블 수준에서 동일한 권한을 부여하면 오류가 반환됩니다.

    • 사용자에게 열 수준 권한이 있는 경우 테이블 수준에서 동일한 권한을 취소하면 테이블의 모든 열에 대한 열 및 테이블 권한이 모두 취소됩니다.

  • Late-Binding 보기에 대한 열 수준 권한은 부여할 수 없습니다.

  • 구체화된 뷰를 생성하려면 기본 테이블에 대해 테이블 수준 SELECT 권한이 있어야 합니다. 특정 열에 대한 열 수준 권한이 있더라도 해당 열에 대해서만 구체화된 보기를 생성할 수 없습니다. 그러나 일반 보기와 마찬가지로 구체화된 보기의 열에 SELECT 권한을 부여할 수 있습니다.

  • 열 수준 권한의 권한 부여를 조회하려면 PG_ATTRIBUTE_INFO 보기를 사용합니다.

ASSUMEROLE 권한 부여에 대한 사용 노트

다음 사용 노트는 Amazon Redshift에서 ASSUMEROLE 권한을 부여하는 데 적용됩니다.

ASSUMEROLE 권한을 사용하여 COPY, UNLOAD, EXTERNAL FUNCTION 또는 CREATE MODEL과 같은 명령에 대한 데이터베이스 사용자, 역할 또는 그룹의 IAM 역할 액세스 권한을 제어합니다. IAM 역할에 대해 사용자, 역할 또는 그룹에 ASSUMEROLE 권한을 부여한 후 해당 사용자, 역할 또는 그룹은 명령을 실행할 때 해당 역할을 맡을 수 있습니다. ASSUMEROLE 권한을 사용하면 필요에 따라 적절한 명령에 대한 액세스 권한을 부여할 수 있습니다.

데이터베이스 슈퍼유저만 사용자, 역할 및 그룹에 대한 ASSUMEROLE 권한을 부여하거나 취소할 수 있습니다. 슈퍼유저는 항상 ASSUMEROLE 권한을 유지합니다.

사용자, 역할 및 그룹에 ASSUMEROLE 권한을 사용하도록 설정하기 위해 슈퍼유저는 다음 두 가지 작업을 수행합니다.

  • 클러스터에서 다음 문을 한 번 실행합니다.

    revoke assumerole on all from public for all;
  • 적절한 명령에 대해 사용자, 역할 및 그룹에 ASSUMEROLE 권한을 부여합니다.

ASSUMEROLE 권한을 부여할 때 ON 절에서 역할 체인을 지정할 수 있습니다. 쉼표를 사용하여 역할 체인에서 역할을 구분합니다(예: Role1,Role2,Role3). ASSUMEROLE 권한을 부여할 때 역할 체인을 지정한 경우 ASSUMEROLE 권한으로 부여된 작업을 수행할 때 역할 체인을 지정해야 합니다. ASSUMEROLE 권한으로 부여된 작업을 수행할 때 역할 체인 내에서 개별 역할을 지정할 수 없습니다. 예를 들어 사용자, 역할 또는 그룹에 역할 체인 Role1,Role2,Role3이 부여된 경우 작업을 수행하도록 Role1만 지정할 수 없습니다.

사용자가 COPY, UNLOAD, EXTERNAL FUNCTION 또는 CREATE MODEL 작업을 수행하려고 하고 ASSUMEROLE 권한이 부여되지 않은 경우 다음과 유사한 메시지가 나타납니다.

ERROR: User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY

ASSUMEROLE 권한을 통해 IAM 역할 및 명령에 대한 액세스 권한이 부여된 사용자를 나열하려면 HAS_ASSUMEROLE_PRIVILEGE 섹션을 참조하세요. 지정한 사용자에게 부여된 IAM 역할 및 명령 권한을 나열하려면 PG_GET_IAM_ROLE_BY_USER 섹션을 참조하세요. 지정한 IAM 역할에 대한 액세스 권한이 부여된 사용자, 역할 및 그룹을 나열하려면 PG_GET_GRANTEE_BY_IAM_ROLE 섹션을 참조하세요.

기계 학습 권한 부여에 대한 사용 노트

ML 함수와 관련된 권한을 직접 부여하거나 취소할 수 없습니다. ML 함수는 ML 모델에 속하며 권한은 모델을 통해 제어됩니다. 대신 ML 모델과 관련된 권한을 부여할 수 있습니다. 다음 예제는 모든 사용자에게 customer_churn 모델과 연결된 ML 함수를 실행할 수 있는 권한을 부여하는 방법을 보여줍니다.

GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;

ML 모델 customer_churn에 대한 모든 권한을 사용자에게 부여할 수도 있습니다.

GRANT ALL on MODEL customer_churn TO ml_user;

스키마에 ML 함수가 있는 경우 해당 ML 함수가 이미 GRANT EXECUTE ON MODEL을 통해 EXECUTE 권한을 부여받았더라도 ML 함수와 관련된 EXECUTE 권한 부여는 실패합니다. CREATE MODEL 명령을 사용할 때는 별도의 스키마를 사용하여 ML 함수를 별도의 스키마에 따로 보관하는 것이 좋습니다. 다음 예제에서는 이 작업을 수행하는 방법을 보여 줍니다.

CREATE MODEL ml_schema.customer_churn FROM customer_data TARGET churn FUNCTION ml_schema.customer_churn_prediction IAM_ROLE default SETTINGS ( S3_BUCKET 'your-s3-bucket' );