필드 수준 액세스 구성

이 문서에서는 필드 수준 액세스 제어에 대해 그리고 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.ssnhttpRequest.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.ssnhttpRequest.status는 모두 제한된 필드로 삭제됩니다.

제한된 필드에 대한 액세스 관리

기본적으로 Logging은 logging.fieldAccessor 역할 또는 비슷한 권한의 역할이 없는 사용자에게 모든 제한된 필드를 숨깁니다. Logging은 버킷의 로그를 볼 수 있는 권한과 logging.fieldAccessor 역할이 모두 있는 사용자에게 제한된 필드를 노출합니다.

기본 동작을 수정하면 제한된 필드의 하위 집합을 특정 사용자로 제한할 수 있습니다.

모든 제한된 필드에 대한 권한 부여

사용자에게 모든 제한된 필드에 대한 권한을 부여하려면 logging.fieldAccessor 역할 또는 logging.fieldAccessor 역할이 포함된 커스텀 역할을 사용자에게 부여합니다.

콘솔

Google Cloud Console을 사용하여 사용자에게 logging.fieldAccessor 역할을 부여하려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동합니다.

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 IAM 및 관리자인 결과를 선택합니다.

  2. 주 구성원을 선택하고 수정을 클릭합니다.
  3. 권한 수정 창에서 역할에 로그 필드 접근자를 선택합니다.
  4. IAM 조건 추가를 선택합니다.
  5. 제목설명 필드에 제목과 설명을 입력합니다.
  6. 조건 편집기 탭을 클릭하고 다음 표현식을 입력합니다.

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. 저장을 선택합니다.

Identity and Access Management 권한은 즉시 업데이트됩니다.

gcloud

gcloud CLI를 사용하여 사용자에게 logging.fieldAccessor 역할을 부여하려면 다음 단계를 완료합니다.

  1. 현재 IAM 정책 정보를 파일에 저장하려면 gcloud projects get-iam-policy 명령어를 실행하고 출력을 파일에 저장합니다.

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    위 명령어는 policy.json 파일에 정보를 저장합니다.

  2. 추가 바인딩으로 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: 조건의 제목
  3. 업데이트된 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)으로 표현할 수 있습니다.

    예를 들어 logNameLogEntry protobuf의 필드이고 log_name은 동일한 필드를 참조합니다. jsonPayload 아래의 필드 이름은 맵 문자열 키이므로 jsonPayload.fooBar 필드는 jsonPayload.foo_bar와는 다른 필드를 참조합니다. 하지만 json_payload.fooBar는 참조합니다.

    필드 경로가 동일한 필드에 대한 유효한 참조이더라도 제한사항 및 IAM 권한을 구성할 때 맞춤법, 대문자, 대소문자를 일치시켜야 합니다. 예를 들어 jsonPayload.foo에 제한사항을 지정하는 경우 json_payload.foo가 아닌 jsonPayload.foo에 대한 IAM 권한을 구성해야 합니다.

유효한 로그 필드 유형에 대한 자세한 내용은 로깅 쿼리 언어: 값 및 변환을 참조하세요.

콘솔

Google Cloud Console을 사용하여 제한된 필드에 대해 액세스 권한을 사용자에게 부여하려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동합니다.

    검색창을 사용하여 이 페이지를 찾은 경우 부제목이 IAM 및 관리자인 결과를 선택합니다.

  2. 주 구성원을 선택하고 수정을 클릭합니다.
  3. 권한 수정 창에서 역할에 로그 필드 접근자를 선택합니다.
  4. IAM 조건 추가를 선택합니다.
  5. 제목설명 필드에 제목과 설명을 입력합니다.
  6. 조건 편집기 탭을 클릭하고 다음 표현식을 입력합니다.

    resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
    
  7. 저장을 선택합니다.

Identity and Access Management 권한은 즉시 업데이트됩니다.

gcloud

gcloud CLI를 사용하여 제한된 필드에 대한 액세스 권한을 사용자에게 부여하려면 다음 단계를 완료하세요.

  1. IAM 정보를 파일에 저장하려면 gcloud projects get-iam-policy 명령어를 실행하고 출력을 파일에 저장합니다.

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    위 명령어는 policy.json 파일에 정보를 저장합니다.

  2. 추가 바인딩으로 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: 조건의 제목
  3. 업데이트된 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에 적용될 수 있는 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.