이 문서에서는 필드 수준 액세스 제어에 대해 그리고 Logging 버킷에 이를 설정하는 방법을 설명합니다.
필드 수준 액세스 제어를 사용하면 Google Cloud 프로젝트 사용자에게서 개별 LogEntry
필드를 숨기고, 사용자가 액세스할 수 있는 로그 데이터를 보다 세부적으로 제어할 수 있습니다.
개요
Logging은 필드 수준 액세스 제어를 사용해서 필드를 보는 데 필요한 권한이 없는 Google Cloud 프로젝트 사용자에게 LogEntry
필드를 숨깁니다. 전체 LogEntry
를 숨기는 로그 보기와 달리 필드 수준 액세스 제어는 LogEntry
의 개별 필드를 숨깁니다. Logging 버킷에 대해 필드 수준 액세스 제어 및 로그 보기 권한을 둘 다 설정할 수 있습니다. Google Cloud CLI를 사용하여 필드 수준 액세스 제어를 제한하고 관리합니다.
로그 필드에 대해 액세스를 제한하려면 다음을 수행합니다.
- 로그 버킷에 제한된
LogEntry
필드를 구성합니다. - 제한된 필드를 조회해야 하는 사용자에게만 해당 필드 경로의
logging.fieldAccessor
IAM 역할 또는 유사한 권한이 포함된 역할을 부여합니다.
Logging은 제한된 필드가 설정된 버킷의 로그를 사용자가 쿼리할 때 IAM 권한을 확인합니다. ACL이 구성된 필드는 해당 필드에 해당하는 logging.FieldAccessor
가 없는 사용자에게 거부됩니다. 즉, 다음과 같습니다.
- 사용자가 제한된 필드를 직접 쿼리하려고 시도하면 권한 거부 오류가 발생합니다.
- 전체 검색에서는 거부된 필드의 내용을 고려하지 않습니다.
- 반환된
LogEntry
결과에서 제한된 필드가 생략됩니다.
제한된 필드
jsonPayload
필드에 대한 액세스를 제한하여 중첩 경로에 대한 액세스도 제한할 수 있습니다.
다음의 리프 필드에 대한 액세스도 제한할 수 있습니다.
예를 들어 labels.check_id
필드에 대한 액세스를 제한할 수 있습니다.
시작하기 전에
필드 수준 액세스 제어 설정을 시작하려면 먼저 다음을 수행합니다.
gcloud --version
이 버전 362.0.0 이상을 보고하는지 확인합니다.최신 버전의 gcloud CLI를 설치하기 위해
gcloud components update
명령어를 실행합니다.gcloud components update
gcloud CLI 설치 방법에 대한 자세한 내용은 Google Cloud CLI 설치를 참조하세요.
gcloud config set
를 실행하여 Google Cloud CLI 명령어의 기본 Google Cloud 프로젝트를 구성합니다. 명령어를 실행하기 전에 다음을 바꿉니다.- PROJECT_ID: 프로젝트 식별자입니다.
명령어:
gcloud config set project PROJECT_ID
버킷을 포함하는 Google Cloud 프로젝트에 대해 다음 IAM 역할 중 하나가 있는지 확인합니다.
IAM 역할 설정에 대한 자세한 내용은 Logging 액세스 제어 가이드를 참조하세요.
필드 수준 액세스 제어 설정
필드 수준 제한은 로그 버킷 수준에서 구성되며 기존 로그 버킷에 적용하거나 새 로그 버킷을 만들 때 적용할 수 있습니다.
새 버킷의 필드 제한
새 로그 버킷을 만들 때 로그 필드를 제한하려면 gcloud logging buckets create
명령어를 실행합니다.
명령어를 실행하기 전에 다음을 바꿉니다.
- BUCKET_ID: 로그 버킷의 이름 또는 ID
- LOCATION: 로그 버킷의 위치
- DESCRIPTION: 로그 버킷에 대한 설명입니다.
- RESTRICTED_FIELDS: 제한되는 필드의 쉼표로 구분된 목록
명령어:
gcloud logging buckets create BUCKET_ID --location=LOCATION \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS
명령어 예시:
gcloud logging buckets create new-log-bucket --location=global \ --description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
기존 버킷의 필드 제한
기존 로그 버킷에서 로그 필드를 제한하려면 gcloud logging buckets update
명령어를 실행합니다.
gcloud logging buckets update BUCKET_ID --location=LOCATION \
--restricted-fields=RESTRICTED_FIELDS
명령어 예시:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
기존 제한사항에 필드를 추가하려면 업데이트 명령어가 제한된 필드 전체를 다시 나열해야 합니다. 이전 예시를 바탕으로, 이미 제한된 필드인 jsonPayload.data.ssn
및 httpRequest.status
외에 jsonPayload.data.entryDate
필드에 대한 액세스를 제한하려면 다음과 같은 명령어를 실행합니다.
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
이미 제한된 필드를 다시 나열하지 않고 방금 jsonPayload.data.entryDate
를 나열한 경우 jsonPayload.data.ssn
과 httpRequest.status
는 모두 제한된 필드로 삭제됩니다.
제한된 필드에 대한 액세스 관리
기본적으로 Logging은 logging.fieldAccessor
역할 또는 비슷한 권한의 역할이 없는 사용자에게 모든 제한된 필드를 숨깁니다.
Logging은 버킷의 로그를 볼 수 있는 권한과 logging.fieldAccessor
역할이 모두 있는 사용자에게 제한된 필드를 노출합니다.
기본 동작을 수정하면 제한된 필드의 하위 집합을 특정 사용자로 제한할 수 있습니다.
모든 제한된 필드에 대한 권한 부여
사용자에게 모든 제한된 필드에 대한 권한을 부여하려면 logging.fieldAccessor
역할 또는 logging.fieldAccessor
역할이 포함된 커스텀 역할을 사용자에게 부여합니다.
콘솔
Google Cloud Console을 사용하여 사용자에게 logging.fieldAccessor
역할을 부여하려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾은 경우 부제목이 IAM 및 관리자인 결과를 선택합니다.
- 주 구성원을 선택하고 수정을 클릭합니다.
- 권한 수정 창에서 역할에 로그 필드 접근자를 선택합니다.
- IAM 조건 추가를 선택합니다.
- 제목 및 설명 필드에 제목과 설명을 입력합니다.
조건 편집기 탭을 클릭하고 다음 표현식을 입력합니다.
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
저장을 선택합니다.
Identity and Access Management 권한은 즉시 업데이트됩니다.
gcloud
gcloud CLI를 사용하여 사용자에게 logging.fieldAccessor
역할을 부여하려면 다음 단계를 완료합니다.
현재 IAM 정책 정보를 파일에 저장하려면
gcloud projects get-iam-policy
명령어를 실행하고 출력을 파일에 저장합니다.gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
위 명령어는
policy.json
파일에 정보를 저장합니다.추가 바인딩으로
policy.json
파일을 업데이트합니다.다음에서
expression
필드에는 로그 버킷만 나열됩니다. 따라서 해당 로그 버킷에 저장된 로그 항목의 모든 필드를members
섹션에 나열된 주 구성원이 액세스할 수 있습니다."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
이전 샘플에서 필드의 의미는 다음과 같습니다.
- PRINCIPAL: 역할을 부여할 주 구성원의 식별자입니다. 주 구성원 식별자는 일반적으로
PRINCIPAL-TYPE:ID
형식입니다. 예를 들면user:my-user@example.com
입니다.PRINCIPAL
형식 전체 목록은 주 구성원 식별자를 참조하세요.policy.json
파일의members
필드에서"PRINCIPAL-TYPE":"ID"
형식을 사용합니다. - DESCRIPTION: 조건에 대한 설명
- TITLE: 조건의 제목
- PRINCIPAL: 역할을 부여할 주 구성원의 식별자입니다. 주 구성원 식별자는 일반적으로
업데이트된
policy.json
파일을 적용하려면gcloud projects set-iam-policy
명령어를 실행합니다.gcloud projects set-iam-policy PROJECT_ID policy.json
Identity and Access Management 권한은 즉시 업데이트됩니다.
제한된 필드의 하위 집합에 대한 권한 부여
사용자에게 제한된 필드의 하위 집합에 대한 권한을 부여하려면 logging.fieldAccessor
역할을 부여하거나 logging.fieldAccessor
가 포함된 커스텀 역할을 설정할 때 사용자가 액세스할 수 있는 필드를 설정합니다.
다음에 유의하세요.
버킷 구성에 표시된 제한된 필드의 철자 및 대문자 사용은 IAM 권한 이름으로 표시된 제한된 필드의 철자 및 대문자 사용과 일치해야 합니다. 예를 들어 제한된 필드를
jsonPayload
로 설정한 경우Jsonpayload
필드가 아닌jsonPayload
필드에 권한을 부여해야 합니다.맵 키 문자열을 포함한 필드 경로는 대소문자를 구분하지만 protobuf 필드 경로는 대소문자를 구분하지 않는 스네이크 표기법(snake_case) 또는 대소문자를 구분하는 카멜 표기법(camelCase)으로 표현할 수 있습니다.
예를 들어
logName
은LogEntry
protobuf의 필드이고log_name
은 동일한 필드를 참조합니다.jsonPayload
아래의 필드 이름은 맵 문자열 키이므로jsonPayload.fooBar
필드는jsonPayload.foo_bar
와는 다른 필드를 참조합니다. 하지만json_payload.fooBar
는 참조합니다.필드 경로가 동일한 필드에 대한 유효한 참조이더라도 제한사항 및 IAM 권한을 구성할 때 맞춤법, 대문자, 대소문자를 일치시켜야 합니다. 예를 들어
jsonPayload.foo
에 제한사항을 지정하는 경우json_payload.foo
가 아닌jsonPayload.foo
에 대한 IAM 권한을 구성해야 합니다.
유효한 로그 필드 유형에 대한 자세한 내용은 로깅 쿼리 언어: 값 및 변환을 참조하세요.
콘솔
Google Cloud Console을 사용하여 제한된 필드에 대해 액세스 권한을 사용자에게 부여하려면 다음 단계를 완료합니다.
-
Google Cloud 콘솔에서 IAM 페이지로 이동합니다.
검색창을 사용하여 이 페이지를 찾은 경우 부제목이 IAM 및 관리자인 결과를 선택합니다.
- 주 구성원을 선택하고 수정을 클릭합니다.
- 권한 수정 창에서 역할에 로그 필드 접근자를 선택합니다.
- IAM 조건 추가를 선택합니다.
- 제목 및 설명 필드에 제목과 설명을 입력합니다.
조건 편집기 탭을 클릭하고 다음 표현식을 입력합니다.
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
저장을 선택합니다.
Identity and Access Management 권한은 즉시 업데이트됩니다.
gcloud
gcloud CLI를 사용하여 제한된 필드에 대한 액세스 권한을 사용자에게 부여하려면 다음 단계를 완료하세요.
IAM 정보를 파일에 저장하려면
gcloud projects get-iam-policy
명령어를 실행하고 출력을 파일에 저장합니다.gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
위 명령어는
policy.json
파일에 정보를 저장합니다.추가 바인딩으로
policy.json
파일을 업데이트합니다.다음에서
expression
필드는 특정 필드를 나열합니다. 따라서members
섹션에 나열된 주 구성원만 지정된 로그 버킷에 저장된 로그 항목의 해당 필드에 액세스할 수 있습니다."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
이전 샘플에서 필드의 의미는 다음과 같습니다.
- PRINCIPAL: 역할을 부여할 주 구성원의 식별자입니다. 주 구성원 식별자는 일반적으로
PRINCIPAL-TYPE:ID
형식입니다. 예를 들면user:my-user@example.com
입니다.PRINCIPAL
형식 전체 목록은 주 구성원 식별자를 참조하세요.policy.json
파일의members
필드에서"PRINCIPAL-TYPE":"ID"
형식을 사용합니다. - DESCRIPTION: 조건에 대한 설명
- TITLE: 조건의 제목
- PRINCIPAL: 역할을 부여할 주 구성원의 식별자입니다. 주 구성원 식별자는 일반적으로
업데이트된
policy.json
파일을 적용하려면gcloud projects set-iam-policy
명령어를 실행합니다.gcloud projects set-iam-policy PROJECT_ID policy.json
Identity and Access Management 권한은 즉시 업데이트됩니다.
예
로그 버킷이 jsonPayload
필드, 특정 라벨, 특정 httpRequest
하위 필드를 제한한다고 가정해 보겠습니다. 사용자가 로그 항목을 검사할 때 다음과 같은 문제가 발생합니다.
모든 제한된 필드에 액세스할 권한이 있는 사용자에게는 로그 항목의 모든 필드가 표시됩니다.
제한된
jsonPayload
LogEntry
필드에만 액세스할 수 있는 권한이 있는 사용자의 경우 제한되지 않은 모든 필드가 표시되고jsonPayload
필드가 표시됩니다.제한된 필드를 볼 권한이 없는 사용자의 경우 제한되지 않은 필드만 표시됩니다.
사용자가 전역 제한을 설정하여 쿼리를 작성하면 제한된 필드가 포함된 로그 항목은 응답에서 생략됩니다.
제한된 필드 나열
로그 버킷의 제한된 필드를 나열하려면 다음 gcloud logging buckets describe
를 실행합니다.
gcloud logging buckets describe BUCKET_ID --location=LOCATION
명령어 예시:
gcloud logging buckets describe my-log-bucket --location=global
할당량 및 한도
필드 수준 액세스 제어를 설정하고 사용할 때 다음 사항에 유의하세요.
- 제한된 필드의 수: 각 로그 버킷에서 최대 20개 필드를 제한할 수 있습니다.
- 제한된 필드의 크기: 제한된 필드 경로는 길이가 800B 미만이어야 합니다.
Cloud Logging에 적용될 수 있는 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.