액세스 제어 문제 해결
이 문서에서는 BigQuery의 Identity and Access Management (IAM) 권한, 열 수준 액세스 제어, 고객 관리 암호화 키 (CMEK)와 관련된 보안 문제를 해결하는 방법을 설명합니다.
IAM 권한 문제로 인해 일반적으로 다음과 같은 Access Denied 오류가 발생합니다.
Access Denied: Project PROJECT_ID: User does not have bigquery.jobs.create permission in project PROJECT_ID.Access Denied: Project PROJECT_ID: User does not have bigquery.datasets.get permission on dataset DATASET.User does not have permission to query table PROJECT_ID:DATASET.TABLE.Access Denied: Table PROJECT_ID:DATASET.TABLE: User does not have permission to query table PROJECT_ID:DATASET.TABLE, or perhaps it does not exist.Access Denied: User PRINCIPAL does not have permission to perform bigquery.tables.getData on resource 'projects/PROJECT_ID/datasets/DATASET/tables/TABLE'.
시작하기 전에
- 주 구성원의 BigQuery 리소스 액세스 문제를 해결하려면 필요한 IAM 권한이 있는지 확인하세요.
문제에 관한 정보 수집
리소스 액세스 문제를 해결하는 첫 번째 단계는 누락된 권한, 액세스가 거부된 IAM 주 구성원, 주 구성원이 액세스하려고 한 리소스를 확인하는 것입니다.
오류 또는 작업 기록에서 정보 가져오기
주 구성원, 리소스, 권한에 관한 정보를 확인하려면 bq 명령줄 도구, API 응답 또는 Google Cloud 콘솔의 BigQuery 출력을 검사하세요.
예를 들어 권한이 부족한 상태로 쿼리를 실행하려고 하면 Google Cloud 콘솔의 쿼리 결과 섹션에 있는 작업 정보 탭에 다음과 같은 오류가 표시됩니다.
오류를 검사하여 주 구성원, 리소스, 권한을 확인합니다.
경우에 따라 오류 메시지에서 직접 누락된 권한을 요청할 수 있습니다. 자세한 내용은 IAM 문서의 권한 오류 메시지를 참고하세요.
Cloud 감사 로그에서 정보 가져오기
오류 메시지가 일반적이거나 정보가 누락되었거나 백그라운드 프로세스에서 작업이 실패한 경우 Cloud 감사 로그 로그 탐색기를 사용하여 오류에 관한 정보를 확인하세요.
Google Cloud 콘솔에서 로그 탐색기 페이지로 이동합니다.
또는 탐색 메뉴에서 Monitoring >로그 탐색기를 선택합니다.
로그 탐색기에서 로그 범위로 프로젝트 로그를 선택합니다.
쿼리 창에서 다음 쿼리를 입력하여 BigQuery 데이터 액세스 로그에서 권한 관련 오류를 가져옵니다.
resource.type="bigquery_resource" AND logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access" AND protoPayload.status.message:"Access Denied" OR protoPayload.status.message:"Permission denied" OR protoPayload.status.code=7
PROJECT_ID를 프로젝트 ID로 바꿉니다.
쿼리 결과에서 실패한 작업에 해당하는 로그 항목을 펼칩니다.
protoPayload섹션에서authorizationInfo배열을 펼친 다음authorizationInfo배열의 각 노드를 펼칩니다.authorizationInfo배열은 API 호출 중에 실행된 모든 권한 확인을 보여줍니다.오류의 원인을 확인하려면
granted: false항목을 찾으세요.granted: false항목에는 다음 정보가 표시됩니다.permission: 확인된 IAM 권한 문자열입니다. 예를 들면bigquery.tables.getData입니다.resource: 주 구성원이 액세스하려고 시도한 리소스의 정규화된 이름입니다. 예를 들면projects/myproject/datasets/mydataset/tables/mytable입니다.principalEmail(사용 가능한 경우):protoPayload.authenticationInfo에서 참조되며, 작업을 시도한 주체입니다.
허용 정책에 대한 정책 분석 도구 사용
허용 정책용 정책 분석 도구를 사용하면 IAM 허용 정책에 따라 어떤 IAM 주 구성원이 어떤 BigQuery 리소스에 대해 어떤 액세스 권한을 갖는지 확인할 수 있습니다.
권한 오류에 관한 정보를 수집한 후 정책 분석 도구를 사용하여 주 구성원에게 필요한 액세스 권한이 없는 이유를 파악할 수 있습니다. 이 도구는 모든 관련 정책, Google 그룹의 멤버십, 프로젝트, 폴더, 조직과 같은 상위 리소스의 상속을 분석합니다.
허용 정책에 대해 정책 분석 도구를 사용하려면 분석 쿼리를 만들고, 분석 범위를 지정한 후 쿼리를 실행합니다.
Google Cloud 콘솔에서 정책 분석 도구 페이지로 이동합니다.
또는 탐색 메뉴에서 IAM 및 관리자 > 정책 분석 도구를 선택합니다.
맞춤 쿼리 만들기를 클릭합니다.
쿼리 구성 페이지에서 이전에 수집한 정보를 입력합니다.
범위 선택 섹션의 쿼리 범위 선택 필드에서 현재 프로젝트가 표시되는지 확인하거나 찾아보기를 클릭하여 다른 리소스를 선택합니다.
쿼리 매개변수 설정 섹션의 매개변수 1에서 주 구성원을 선택하고 주 구성원 필드에 사용자, 그룹 또는 서비스 계정의 이메일을 입력합니다.
파라미터 추가를 클릭합니다.
매개변수 2에서 권한을 선택하고 권한 필드에서 선택을 클릭하고 BigQuery 권한을 선택한 다음 추가를 클릭합니다. 예를 들어
bigquery.tables.getData을 선택합니다.파라미터 추가를 클릭합니다.
매개변수 3에서 리소스를 선택하고 리소스 필드에 정규화된 리소스 이름을 입력합니다. 리소스 이름에는 다음 예와 같이 서비스 접두사가 포함되어야 합니다.
- BigQuery 프로젝트:
//cloudresourcemanager.googleapis.com/projects/PROJECT_ID - BigQuery 데이터 세트:
//bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET - BigQuery 테이블:
//bigquery.googleapis.com/projects/PROJECT/datasets/DATASET/tables/TABLE
- BigQuery 프로젝트:
맞춤 쿼리 창에서 분석 > 쿼리 실행을 클릭합니다.
쿼리 결과를 살펴봅니다. 결과는 다음 중 하나일 수 있습니다.
- 빈 목록 결과가 없으면 주 구성원에 필요한 권한이 없는 것입니다. 올바른 권한을 제공하는 주 구성원에게 역할을 부여해야 합니다.
- 하나 이상의 결과 분석 도구에서 허용 정책을 찾으면 액세스 권한이 있는 것입니다. 각 결과에서 바인딩 보기를 클릭하여 주 구성원이 속한 리소스에 대한 액세스 권한을 제공하는 역할을 확인합니다. 정책 바인딩은 그룹 멤버십 또는 상속을 통해 액세스 권한이 부여되는지, 아니면 IAM 조건 또는 IAM 거부 정책에 의해 액세스가 거부되는지 보여줍니다.
필요한 권한을 부여하는 올바른 IAM 역할 찾기
주 구성원에게 충분한 액세스 권한이 없는지 확인한 후 다음 단계는 필요한 권한을 부여하는 적절한 사전 정의 또는 커스텀 IAM 역할을 찾는 것입니다. 선택한 역할은 최소 권한의 원칙을 준수해야 합니다.
조직에서 커스텀 역할을 사용하는 경우 프로젝트 또는 조직에 생성된 모든 커스텀 역할을 나열하여 올바른 역할을 찾을 수 있습니다. 예를 들어 Google Cloud 콘솔의 역할 페이지에서 유형:맞춤으로 목록을 필터링하여 맞춤 역할만 볼 수 있습니다.
올바른 사전 정의된 IAM 역할을 찾으려면 다음 단계를 따르세요.
BigQuery IAM 역할 및 권한 페이지의 BigQuery 권한 섹션을 엽니다.
권한 입력 검색창에 오류 메시지, 작업 기록 또는 감사 로그에서 가져온 권한을 입력합니다. 예를 들면
bigquery.tables.getData입니다.검색 결과에는 권한을 부여하는 모든 사전 정의된 BigQuery 역할이 표시됩니다.
최소 권한의 원칙 적용: 역할 목록에서 필요한 권한을 부여하는 권한이 가장 적은 역할을 선택합니다. 예를 들어 테이블 데이터를 쿼리할 수 있는 권한을 부여하기 위해
bigquery.tables.getData를 검색한 경우 BigQuery 데이터 뷰어는 해당 권한을 부여하는 가장 제한적인 역할입니다.주 구성원에게 적절한 역할을 부여합니다. BigQuery 리소스에 IAM 역할을 부여하는 방법에 대한 자세한 내용은 IAM으로 리소스 액세스 제어를 참고하세요.
열 수준 액세스 제어 문제 해결
다음 섹션에서는 열 수준 액세스 제어 및 Data Catalog 정책 태그 관련 문제를 해결하는 방법을 설명합니다.
Data Catalog 역할을 볼 수 없습니다.
Data Catalog 세분화된 권한의 리더와 같은 역할을 볼 수 없는 경우 프로젝트에서 Data Catalog API를 사용 설정하지 않았을 수 있습니다. Data Catalog API를 사용 설정하는 방법은 시작하기 전에를 참조하세요. Data Catalog API를 사용 설정한 후 몇 분이 지나면 Data Catalog 역할이 표시됩니다.
분류 페이지를 볼 수 없습니다.
Google Cloud 콘솔에서 정책 태그 분류 페이지를 보려면 추가 권한이 필요합니다. 예를 들어 Data Catalog 정책 태그 관리자 역할에는 분류 페이지에 대한 액세스 권한이 있습니다.
정책 태그를 적용했지만 작동하지 않는 것 같습니다.
액세스 권한이 없는 계정의 쿼리 결과가 계속 표시되는 경우 해당 계정에서 캐시된 결과를 수신하고 있을 수 있습니다. 구체적으로 이전에 쿼리를 성공적으로 실행한 후 정책 태그를 적용한 경우 쿼리 결과 캐시에서 결과가 표시될 수 있습니다. 기본적으로 쿼리 결과는 24시간 동안 캐시됩니다. 결과 캐시를 사용 중지하면 쿼리가 즉시 실패합니다. 캐싱에 대한 자세한 내용은 열 수준 액세스 제어 영향을 참고하세요.
일반적으로 IAM 업데이트가 적용되기까지 약 30초가 걸립니다. 정책 태그 계층 구조의 변경사항이 적용되려면 최대 30분이 걸릴 수 있습니다.
열 수준 보안이 설정된 테이블에서 읽을 권한이 없습니다.
조직, 폴더, 프로젝트, 정책 태그와 같은 서로 다른 수준에서 세분화된 리더 역할 또는 마스킹된 리더 역할이 필요합니다. 세분화된 리더 역할은 원시 데이터 액세스 권한을 부여하고 마스킹된 리더 역할은 마스킹된 데이터에 대한 액세스 권한을 부여합니다. IAM 정책 문제 해결 도구를 사용하여 프로젝트 수준에서 이 권한을 확인할 수 있습니다.
정책 태그 분류에 세분화된 액세스 제어를 설정했지만 사용자에게 보호된 데이터가 표시됨
이 문제를 해결하려면 다음 세부정보를 확인하세요.
- BigQuery 보안 센터의 정책 태그 분류 페이지에서 액세스 제어 적용 전환 버튼이 사용 위치에 있는지 확인합니다.
쿼리에서 캐시된 쿼리 결과를 사용하지 않는지 확인합니다. bq 명령줄 도구를 사용하여 쿼리를 테스트하는 경우
--nouse_cache플래그를 사용하여 쿼리 캐시를 사용 중지합니다. 예를 들면 다음과 같습니다.bq query --nouse_cache --use_legacy_sql=false "SELECT * EXCEPT (customer_pii) FROM my_table;"
프로젝트 마이그레이션 고려사항
정책 태그와 분류는 특정 Google Cloud 조직 내에 있으며 프로젝트가 새 조직으로 이전될 때 자동으로 다시 연결되지 않습니다. 열 수준 액세스 제어에 정책 태그를 사용하는 프로젝트를 다른 조직으로 마이그레이션하면 다음 문제가 발생합니다.
- 정책 태그는 마이그레이션된 프로젝트 내의 Google Cloud 콘솔에서 더 이상 관리할 수 없습니다.
- 이러한 정책 태그는 이전된 프로젝트의 새 열에 적용할 수 없습니다.
- 기존 열 수준 액세스 제어가 계속 적용되는 것처럼 보일 수 있지만 관리 목적으로 원래 조직의 소스 분류 링크가 끊어집니다.
이 문제를 해결하려면 Google Cloud 지원팀에서 분류를 새 조직과 다시 연결해야 합니다. 정책 태그가 있는 프로젝트를 이전한 후 이러한 문제가 발생하면 Cloud Customer Care에 문의하세요.
고객 관리 암호화 키 문제 해결
다음 목록에서는 Cloud Key Management Service와 함께 고객 관리 암호화 키 (CMEK)를 사용할 때 발생하는 일반적인 오류와 권장 해결 방법을 설명합니다.
- 오류:
Please grant Cloud KMS CryptoKey Encrypter/Decrypter role - 해결 방법: 프로젝트와 연결된 BigQuery 서비스 계정에 지정된 Cloud KMS 키에서 작업을 수행할 충분한 IAM 권한이 없습니다. 필요한 IAM 권한을 부여하려면 오류 메시지 또는 암호화 및 복호화 권한 부여의 안내를 따르세요.
- 오류:
Existing table encryption settings don't match encryption settings specified in the request - 해결 방법: 이 오류는 대상 테이블에 요청의 암호화 설정과 일치하지 않는 암호화 설정이 있는 경우 발생할 수 있습니다. 이 문제를 해결하려면
TRUNCATE쓰기 방식을 사용하여 테이블을 교체하거나 다른 대상 테이블을 지정하세요. - 오류:
This region is not supported - 해결 방법: Cloud KMS 키의 리전이 대상 테이블의 BigQuery 데이터 세트 리전과 일치하지 않습니다. 이 문제를 해결하려면 데이터 세트와 일치하는 리전의 키를 선택하거나 키 리전과 일치하는 데이터 세트에 데이터를 로드하세요.
- 오류:
Your administrator requires that you specify an encryption key for queries in project PROJECT_ID. - 해결 방법: 조직 정책으로 인해 리소스를 만들거나 쿼리를 실행할 수 없습니다. 이 정책에 대한 자세한 내용은 모든 리소스에 CMEK 요구를 참고하세요.
- 오류:
Your administrator prevents using KMS keys from project KMS_PROJECT_ID to protect resources in project PROJECT_ID. - 해결 방법: 조직 정책으로 인해 리소스를 만들거나 쿼리를 실행할 수 없습니다. 이 정책에 대한 자세한 내용은 BigQuery 프로젝트의 Cloud KMS 키 제한을 참고하세요.
다음 단계
- 모든 BigQuery IAM 역할 및 권한 목록은 BigQuery IAM 역할 및 권한을 참고하세요.
- 열 수준 보안에 대한 자세한 내용은 열 수준 액세스 제어로 액세스 제한을 참고하세요.
- 고객 관리 암호화 키에 대한 자세한 내용은 Cloud KMS 키로 데이터 보호를 참고하세요.
- IAM에서 허용 및 거부 정책 문제 해결에 대한 자세한 내용은 정책 문제 해결을 참고하세요.
- 정책 인텔리전스 정책 분석 도구에 대한 자세한 내용은 허용 정책용 정책 분석기를 참고하세요.
- 정책 문제 해결 도구에 대한 자세한 내용은 정책 문제 해결 도구 사용을 참고하세요.