세분화된 액세스 제어 개요

Spanner 세분화된 액세스 제어를 통해 Identity and Access Management(IAM)의 이점을 SQL 역할 기반 액세스 제어와 함께 활용합니다. 세분화된 액세스 제어를 통해 데이터베이스 역할을 정의하고, 역할에 권한을 부여하고, IAM 정책을 생성하여 IAM 주 구성원에게 데이터베이스 역할에 대한 권한을 부여합니다.

관리자가 개별 IAM 주 구성원마다 세분화된 액세스 제어를 사용 설정해야 합니다. 세분화된 액세스 제어가 사용 설정된 주 구성원('세분화된 액세스 제어 사용자')은 Spanner 리소스에 액세스할 수 있는 데이터베이스 역할을 맡아야 합니다.

세분화된 액세스 제어 사용자가 아닌 사용자의 리소스 액세스는 IAM 데이터베이스 수준 역할로 제어됩니다. 세분화된 액세스 제어는 완전히 호환되며 기존 IAM 데이터베이스 수준 액세스 제어와 공존할 수 있습니다. 이를 사용하여 개별 데이터베이스 객체를 정의할 수 있습니다. 전체 데이터베이스에 대한 액세스를 제어하려면 IAM 역할을 사용합니다.

세분화된 액세스 제어를 통해 테이블, 열, 보기 및 변경 내역에 대한 액세스를 제어할 수 있습니다.

세분화된 액세스 제어를 관리하려면 다음 DDL 문을 사용합니다.

  • 데이터베이스 역할 만들기 및 삭제를 위한 CREATEDROP 문. 데이터베이스 역할은 권한 모음입니다. 데이터베이스 하나에 최대 100개의 역할을 만들 수 있습니다.
  • 데이터베이스 역할에 대해 권한을 부여하거나 취소하는 GRANTREVOKE 문. 권한에는 SELECT, INSERT, UPDATE, DELETE, EXECUTE가 포함됩니다. 권한 이름은 비슷한 이름의 SQL 문에 해당합니다. 예를 들어 INSERT 권한이 있는 역할은 GRANT 문에 지정된 테이블에서 INSERT SQL 문을 실행할 수 있습니다.

    다음 DDL 문은 hr_rep 데이터베이스 역할에 대해 employees 테이블에 SELECT 권한을 부여합니다.

    GoogleSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO ROLE hr_rep;
    

    PostgreSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO hr_rep;
    

    권한에 대한 자세한 내용은 세분화된 액세스 제어 권한 참조를 확인하세요.

  • GRANT 문은 권한 계층 구조를 사용하여 역할의 계층 구조를 만들 수 있는 역할을 다른 역할에 부여합니다.

사용 사례

다음은 세분화된 액세스 제어를 위한 샘플 사용 사례입니다.

  • 판매 보상 분석가, 판매 관리, HR 분석가 역할을 가지며, 데이터에 대해 각각 서로 다른 액세스 수준을 갖는 HR 정보 시스템. 예를 들어 보상 분석가 및 판매 관리는 주민등록번호를 볼 수 없습니다.
  • 탑승자 및 운전자에 대해 서로 다른 서비스 계정 및 권한을 사용하는 차량 공유 애플리케이션
  • SELECTINSERT 작업은 허용하지만 UPDATEDELETE 작업을 허용하지 않는 원장

Spanner 리소스 및 해당 권한

다음은 Spanner 리소스와 이 리소스에 부여할 수 있는 세분화된 액세스 제어 권한의 목록입니다.

스키마
특정 데이터베이스 역할에 스키마에 대한 USAGE 권한을 부여할 수 있습니다. 기본이 아닌 스키마의 경우 데이터베이스 역할에는 데이터베이스 객체에 액세스할 수 있도록 USAGE 권한이 있어야 합니다. 권한 확인은 다음과 같습니다.

스키마에 USAGE이 있나요?

아니요: 액세스를 거부합니다.

예: 테이블에 대한 적절한 권리도 가지고 있나요?

아니요: 액세스를 거부합니다.

예: 표에 액세스할 수 있습니다.

테이블
데이터베이스 역할에 테이블에 대한 SELECT, INSERT, UPDATE, DELETE 권한을 부여할 수 있습니다. 인터리브 처리된 테이블의 경우 상위 테이블에 부여된 권한은 하위 테이블에 전파되지 않습니다.
테이블의 열 하위 집합에 대한 SELECT, INSERT, UPDATE를 부여할 수 있습니다. 이 권한은 해당 열에 대해서만 유효합니다. 열 수준에서는 DELETE가 허용되지 않습니다.
뷰에 대한 SELECT 권한을 부여할 수 있습니다. SELECT만 뷰에 대해 지원됩니다. Spanner는 호출자의 권한 뷰와 정의자의 권한 뷰를 모두 지원합니다. 호출자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할 또는 사용자에게 해당 뷰에 대한 SELECT 권한과 뷰에서 참조된 기본 객체에 대한 SELECT 권한이 필요합니다. 정의자 권한으로 뷰를 만드는 경우 뷰를 쿼리하려면 데이터베이스 역할이나 사용자에게 뷰에 대한 SELECT 권한만 필요합니다. 자세한 내용은 뷰 개요를 참조하세요.
변경 스트림
변경 내역에 대한 SELECT를 부여할 수 있습니다. 변경 내역과 연결된 읽기 함수에 EXECUTE를 부여해야 합니다. 자세한 내용은 변경 내역에 대해 세분화된 액세스 제어를 참조하세요.
시퀀스
시퀀스에 SELECTUPDATE를 부여할 수 있습니다. 자세한 내용은 시퀀스에 대해 세분화된 액세스 제어를 참조하세요.
모델
모델에 EXECUTE을 부여할 수 있습니다. 자세한 내용은 모델에 대해 세분화된 액세스 제어를 참조하세요.

세분화된 액세스 제어 시스템 역할

세분화된 액세스 제어에는 데이터베이스별로 사전 정의된 시스템 역할이 있습니다. 사용자 정의 데이터베이스 역할과 같이 시스템 역할에서 Spanner 리소스에 대한 액세스를 제어할 수 있습니다.

예를 들어 Key Visualizer에 액세스하려면 세분화된 액세스 제어 사용자에게 spanner_sys_reader 시스템 역할을 부여해야 하며 INFORMATION_SCHEMA 테이블을 쿼리할 때 필터링되지 않은 결과를 볼 수 있으려면 spanner_info_reader 시스템 역할이 필요합니다.

자세한 내용은 세분화된 액세스 제어 시스템 역할을 참조하세요.

데이터베이스 역할 계층 및 상속

하위 역할이 상위 역할의 권한을 상속하는 데이터베이스 역할의 계층 구조를 만들 수 있습니다. 하위 역할은 상위 역할의 구성원으로 알려져 있습니다.

예를 들어 다음 GRANT 문을 고려해 보세요.

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;

PostgreSQL

GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;

hr_managerhr_directorpii_access 역할의 구성원이고 employees 테이블에서 SELECT 권한을 상속합니다.

권한 상속

또한 hr_managerhr_director도 구성원을 가질 수 있고 이러한 구성원은 employeesSELECT 권한을 상속합니다.

역할 계층 구조의 깊이는 제한이 없지만 역할 계층 구조가 깊고 광범위한 경우 쿼리 성능이 저하될 수 있습니다.

백업 및 복원

Spanner 백업에는 데이터베이스 역할 정의가 포함됩니다. 백업에서 데이터베이스가 복원되면 부여된 권한으로 데이터베이스 역할이 다시 생성됩니다. 하지만 IAM 정책이 데이터베이스 백업에 포함되지 않으므로 복원된 데이터베이스에서 주 구성원에 대해 데이터베이스 역할에 대해 액세스를 다시 부여해야 합니다.

세분화된 액세스 제어 설정 개요

다음에서는 세분화된 액세스 제어로 데이터를 보호하는 단계를 간략하게 설명합니다. 자세한 내용은 세분화된 액세스 제어 구성을 참조하세요.

이 태스크를 수행하려면 roles/spanner.admin 또는 roles/spanner.databaseAdmin IAM 역할이 부여되어야 합니다.

  1. 데이터베이스 역할을 만들고 이 역할에 권한을 부여합니다.
  2. 선택사항: 역할을 다른 역할에 부여하여 상속성이 있는 역할 계층 구조를 만듭니다.
  3. 세분화된 액세스 제어 사용자로 설정할 각 주 구성원에 대해 이 단계를 수행합니다.
    1. 주 구성원에 대해 세분화된 액세스 제어를 사용 설정합니다. 그러면 주 구성원에 기본적으로 권한이 없는 public 데이터베이스 역할이 자동으로 부여됩니다. 이 작업은 각 주 구성원에 대해 한 번만 수행하면 됩니다.
    2. 주 구성원에 대해 하나 이상의 데이터베이스 역할에 대한 IAM 권한을 부여합니다.
    3. 주 구성원에 모든 필수 데이터베이스 역할을 부여한 후, 주 구성원에 데이터베이스 수준의 IAM 역할이 있으면 주 구성원의 액세스 제어가 하나의 메서드로만 관리되도록 데이터베이스 수준 역할을 취소하는 것이 좋습니다.

제한사항

  • 내보내기 작업은 데이터베이스 역할 및 권한을 내보내지 않으며 가져오기 작업으로 이를 가져올 수 없습니다. 가져오기가 완료된 후에 역할과 권한을 수동으로 설정해야 합니다.
  • Google Cloud 콘솔에서 TABLE 페이지의 데이터 탭은 세분화된 액세스 제어 사용자에게 제공되지 않습니다.

다음 단계

자세한 내용은 다음 주제를 참조하세요.