데이터 액세스 감사 로그 사용 설정

이 가이드에서는 Google Cloud 콘솔이나 API를 사용하여 Google Cloud 프로젝트, 결제 계정, 폴더, 조직에서 데이터 액세스 감사 로그 일부나 전체를 사용 설정하거나 중지하는 방법을 설명합니다.

시작하기 전에

데이터 액세스 감사 로그를 구성하기 전에 다음 정보를 이해해야 합니다.

  • BigQuery를 제외한 데이터 액세스 감사 로그는 기본적으로 사용 중지되어 있습니다. BigQuery 이외의 Google Cloud 서비스에 대해 데이터 액세스 감사 로그를 작성하려면 로그를 명시적으로 사용 설정해야 합니다.

  • 데이터 액세스 감사 로그는 다른 곳으로 라우팅하지 않는 한 _Default 버킷에 저장됩니다. 자세한 내용은 감사 로그 저장 및 라우팅을 참조하세요.

  • 데이터 액세스 감사 로그는 Google 지원팀에서 계정 문제 해결을 돕기 위해 사용됩니다. 따라서 가능하면 데이터 액세스 감사 로그를 사용 설정하는 것이 좋습니다.

구성 개요

Google Cloud 리소스 및 서비스에 데이터 액세스 감사 로그를 사용 설정하는 방법을 구성할 수 있습니다.

  • 조직: 조직의 데이터 액세스 감사 로그를 사용 설정하고 구성할 수 있으며, 이는 그 조직의 모든 기존 및 신규 Google Cloud 프로젝트와 폴더에 적용됩니다.

  • 폴더: 폴더의 데이터 액세스 감사 로그를 사용 설정하고 구성할 수 있으며, 이는 그 폴더의 모든 기존 및 신규 Google Cloud 프로젝트에 적용됩니다. 프로젝트의 상위 조직에서 사용 설정된 데이터 액세스 감사 로그는 사용 중지할 수 없습니다.

  • 프로젝트: 개별 Google Cloud 프로젝트에 대해 데이터 액세스 감사 로그를 구성할 수 있습니다. 상위 조직 또는 폴더에서 사용 설정된 데이터 액세스 감사 로그를 사용 중지할 수 없습니다.

  • 결제 계정: 결제 계정의 데이터 액세스 감사 로그를 구성하려면 Google Cloud CLI를 사용합니다. 데이터 액세스 감사 로그와 결제 계정에서 gcloud CLI를 사용하는 방법에 대한 자세한 내용은 gcloud beta billing accounts set-iam-policy 문서를 참조하세요.

  • 기본 구성: 조직, 폴더 또는 Google Cloud 프로젝트의 기본 데이터 액세스 감사 로그 구성을 지정할 수 있습니다. 이 구성은 이후에 데이터 액세스 감사 로그를 생성하기 시작하는 Google Cloud 서비스에 적용됩니다. 자세한 내용은 기본 구성 설정을 참조하세요.

  • 권한 유형: 특정 유형의 권한만 확인하는 Google Cloud API가 감사 로그를 내보내도록 지정할 수 있습니다. 자세한 내용은 이 페이지의 권한 유형 섹션을 참고하세요.

  • 면제된 주 구성원: 데이터 액세스가 기록되지 않도록 특정 주 구성원을 제외할 수 있습니다. 예를 들어 내부 테스트 계정의 Cloud Monitoring 작업이 기록되지 않도록 면제할 수 있습니다. 사용자와 그룹을 포함하여 올바른 주 구성원 목록은 Binding 유형 참조를 참조하세요.

Google Cloud 콘솔의 IAM 감사 로그 페이지 또는 API를 사용하여 데이터 액세스 감사 로그를 구성할 수 있습니다. 이러한 방법은 아래 섹션에서 설명합니다.

권한 유형

API 메서드가 IAM 권한을 확인합니다. IAM 권한에는 type 속성이 있으며, 이 속성의 값은 다음 권한 유형 중 하나입니다.

  • ADMIN_READ: 이 유형의 IAM 권한은 메타데이터 또는 구성 정보를 읽는 Google Cloud API 메서드에 대해 확인됩니다.

  • DATA_READ: 이 유형의 IAM 권한은 사용자 제공 데이터를 읽는 Google Cloud API 메서드에 대해 확인됩니다.

  • DATA_WRITE: 이 유형의 IAM 권한은 사용자 제공 데이터를 쓰는 Google Cloud API 메서드에 대해 확인됩니다.

  • ADMIN_WRITE: 이 유형의 IAM 권한은 메타데이터 또는 구성 정보를 쓰는 Google Cloud API 메서드에 대해 확인됩니다. 이 유형과 연결된 감사 로그인 관리자 활동 감사 로그는 기본적으로 사용 설정되어 있으며 사용 중지할 수 없습니다.

대부분의 Google Cloud API는 단일 IAM 권한만 확인하며 서비스의 권한과 연결된 유형을 사용 설정하면 호출되는 메서드와 연결된 감사 로그가 사용 설정됩니다.

Google Cloud 콘솔을 사용하거나 API를 호출하여 서비스의 권한 유형을 사용 설정하거나 중지할 수 있습니다.

다음 섹션에서는 일반적으로 Google Cloud API 메서드가 IAM 권한을 확인하는 다른 방법을 설명합니다. 어떤 권한 유형에 대해 어떤 메서드가 확인되는지에 관한 서비스별 정보는 서비스의 감사 로깅 문서를 참고하세요.

데이터 액세스 권한 유형에 대한 IAM 권한 확인

일부 Google Cloud API 메서드는 주 구성원에게 권한 유형이 다른 여러 IAM 권한이 있는지 확인합니다. 감사 로그는 API 호출이 타겟팅하는 프로젝트에서 IAM 권한과 연결된 권한 유형 중 하나가 사용 설정되면 작성됩니다.

예를 들어 API 메서드는 API 요청을 실행하는 주 구성원에게 example.resource.get(DATA_READ) 및 example.resource.write(DATA_WRITE) 권한이 있는지 확인할 수 있습니다. 서비스가 호출을 실행할 때 감사 로그를 내보내려면 프로젝트에 DATA_WRITE 또는 DATA_READ만 사용 설정하면 됩니다.

관리자 활동 및 데이터 액세스 IAM 권한 유형이 확인됨

일부 Google Cloud API 메서드는 ADMIN_WRITE 권한 유형이 있는 IAM 권한과 데이터 액세스 권한 유형이 있는 하나 이상의 권한을 모두 확인합니다. 이러한 유형의 API 호출은 관리자 활동 감사 로그를 내보내며, 이 로그는 기본적으로 사용 설정되어 있으며 사용 중지할 수 없습니다.

서비스에서 소유하지 않은 IAM 권한을 확인하는 API 메서드

일부 Google Cloud 서비스에는 다른 서비스에서 소유한 IAM 권한을 확인하는 API 메서드가 있습니다. 이 경우 호출되는 API 메서드와 연결된 감사 로그를 사용 설정하려면 IAM 권한을 소유한 서비스에 권한 유형을 사용 설정해야 합니다.

예를 들어 Cloud Billing에는 Resource Manager가 소유한 ADMIN_READ 권한 유형을 확인하는 API 메서드가 있습니다. Cloud Billing API와 연결된 감사 로그를 사용 설정하려면 서비스 cloudresourcemanager.googleapis.comADMIN_READ를 사용 설정해야 합니다.

동일한 API 메서드에서 서로 다른 IAM 권한을 확인함

일부 Google Cloud API는 API 메서드가 호출되는 방식에 따라 다양한 권한 유형으로 서로 다른 IAM 권한을 확인합니다. 감사 로그는 API 호출이 타겟팅하는 프로젝트에서 IAM 권한 유형 중 하나가 사용 설정되면 작성됩니다.

예를 들어 Spanner에는 메서드 호출 방식에 따라 DATA_WRITE 유형으로 IAM 권한을 확인하는 경우도 있고 DATA_READ 유형으로 IAM 권한을 확인하는 경우도 있는 API 메서드가 있습니다. 이 경우 프로젝트에서 Spanner에 DATA_WRITE를 사용 설정하면 API 호출 시 DATA_WRITE 유형의 IAM 권한이 확인된 경우에만 API와 연결된 감사 로그가 사용 설정됩니다.

서비스별 구성

Google Cloud 서비스 전체(allServices) 구성과 Google Cloud 서비스별 구성이 모두 있는 경우 서비스의 결과 구성은 두 구성의 합집합입니다. 즉,

  • 특정 Google Cloud 서비스의 데이터 액세스 감사 로그를 사용 설정할 수 있지만 더 광범위한 구성에서 사용 설정된 Google Cloud 서비스의 데이터 액세스 감사 로그를 중지할 수 없습니다.

  • Google Cloud 서비스의 데이터 액세스 감사 로그에 다른 종류의 정보를 추가할 수 있지만 더 광범위한 구성에서 지정된 종류의 정보를 삭제할 수 없습니다.

  • 주 구성원을 면제 목록에 추가할 수 있지만 더 광범위한 구성의 면제 목록에서 주 구성원을 삭제할 수 없습니다.

  • BigQuery Data Transfer Service의 경우 데이터 액세스 감사 로그 구성은 기본 감사 로그 구성에서 상속됩니다.

Google Cloud 리소스 구성

Google Cloud 프로젝트, 결제 계정, 폴더, 조직에 대해 데이터 액세스 감사 로그를 구성할 수 있습니다. Google Cloud 서비스에 대한 구성이 상, 하 계층 전체에 존재하는 경우 결과 구성은 해당 구성의 합집합입니다. 즉, Google Cloud 프로젝트 수준에서는 다음과 같이 적용됩니다.

  • Google Cloud 서비스의 로그를 사용 설정할 수 있지만 상위 조직 또는 폴더에서 사용 설정된 Google Cloud 서비스의 로그를 사용 중지할 수 없습니다.

  • 정보의 종류를 사용 설정할 수 있지만 상위 조직 또는 폴더에서 사용 설정된 정보의 종류를 중지할 수 없습니다.

  • 주 구성원을 면제 목록에 추가할 수 있지만 상위 조직 또는 폴더의 면제 목록에서 삭제할 수 없습니다.

  • 상위 조직 또는 폴더 수준에서는 Google Cloud 프로젝트에 데이터 액세스 감사 로그가 구성되지 않은 경우에도 해당 조직 또는 폴더 내의 Google Cloud 프로젝트에 데이터 액세스 감사 로그를 사용 설정할 수 있습니다.

액세스 제어

Identity and Access Management 역할 및 권한은 데이터 액세스 감사 기본 로깅 구성의 IAM 정책을 보고 관리하는 것을 포함한 Logging 데이터에 대한 액세스를 제어합니다.

데이터 액세스 구성과 연결된 정책을 보거나 설정하려면 적절한 리소스 수준의 권한이 있는 역할이 필요합니다. 이러한 리소스 수준 역할을 부여하는 방법은 Google Cloud 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

  • IAM 정책을 설정하려면 resourcemanager.RESOURCE_TYPE.setIamPolicy 권한이 있는 역할이 필요합니다.

  • IAM 정책을 보려면 resourcemanager.RESOURCE_TYPE.getIamPolicy 권한이 있는 역할이 필요합니다.

데이터 액세스 감사 로그를 보는 데 필요한 권한과 역할의 목록은 IAM으로 액세스 제어를 참조하세요.

Google Cloud 콘솔에서 데이터 액세스 감사 로그 구성

이 섹션에서는 Google Cloud 콘솔을 사용하여 데이터 액세스 감사 로그를 구성하는 방법을 설명합니다.

또한 API 또는 Google Cloud CLI를 사용하여 이러한 태스크를 프로그래매틱 방식으로 수행할 수 있습니다. 자세한 내용은 API로 데이터 액세스 감사 로그 구성을 참조하세요.

Google Cloud 콘솔에서 감사 로그 구성 옵션에 액세스하려면 다음 단계를 수행합니다.

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

    감사 로그로 이동

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

  2. 기존 Google Cloud 프로젝트, 폴더 또는 조직을 선택합니다.

감사 로그 사용 설정

데이터 액세스 감사 로그를 사용 설정하려면 다음을 수행합니다.

  1. 데이터 액세스 감사 로그 구성 표의 서비스 열에서 Google Cloud 서비스를 하나 이상 선택합니다.

  2. 로그 유형 탭에서 선택한 서비스에 사용 설정하려는 데이터 액세스 감사 로그 유형을 선택합니다.

  3. 저장을 클릭합니다.

감사 로그가 성공적으로 사용 설정되면 표에 체크표시 아이콘이 포함됩니다.

다음 예시에서는 Access Approval 서비스에 데이터 읽기 감사 로그 유형이 사용 설정된 것을 확인할 수 있습니다.

감사 로그 구성

데이터 액세스 감사 로그를 생성하는 모든 Google Cloud 서비스에 감사 로그를 사용 설정할 수도 있습니다. 데이터 액세스 감사 로그 구성 표에서 모든 Google Cloud 서비스를 선택합니다.

이 일괄 구성 방법은 현재 리소스에 사용할 수 있는 Google Cloud 서비스에만 적용됩니다. 새 Google Cloud 서비스가 추가되면 기본 감사 구성을 상속합니다.

데이터 액세스 감사 로그 사용 중지

데이터 액세스 감사 로그를 사용 중지하려면 다음을 수행합니다.

  1. 데이터 액세스 감사 로그 구성 표에서 Google Cloud 서비스를 하나 이상 선택합니다.

  2. 정보 패널의 로그 유형 탭에서 선택한 서비스에 중지하려는 데이터 액세스 감사 로그 유형을 선택합니다.

  3. 저장을 클릭합니다.

표에서 데이터 액세스 감사 로그에 대시가 표시되면 성공적으로 중지된 것입니다. 사용 설정된 데이터 액세스 감사 로그에는 체크표시 아이콘이 표시됩니다.

면제 설정

예외를 설정하여 특정 서비스의 데이터 액세스 감사 로그를 생성하는 주 구성원을 제어할 수 있습니다. 면제된 주 구성원을 추가하면 선택한 로그 유형에서 해당 주 구성원의 감사 로그가 생성되지 않습니다.

면제를 설정하려면 다음을 수행합니다.

  1. 데이터 액세스 감사 로그 구성 표의 서비스 열에서 Google Cloud 서비스를 선택합니다.

  2. 정보 패널에서 면제 주 구성원 탭을 선택합니다.

  3. 면제 주 구성원 추가에서 선택한 서비스의 데이터 액세스 감사 로그 생성에서 제외할 주 구성원을 입력합니다.

    면제 주 구성원 추가 버튼을 필요한 횟수만큼 클릭하여 여러 주 구성원을 추가할 수 있습니다.

    사용자와 그룹을 포함하여 올바른 주 구성원 목록은 Binding 유형 참조를 참조하세요.

  4. 사용 중지된 로그 유형에서 중지하려는 데이터 액세스 감사 로그 유형을 선택합니다.

  5. 저장을 클릭합니다.

서비스에 면제된 주 구성원을 성공적으로 추가한 경우 데이터 액세스 감사 로그 구성 표의 면제 주 구성원 열에 숫자가 표시됩니다.

면제 목록에서 주 구성원을 삭제하려면 다음을 수행합니다.

  1. 데이터 액세스 감사 로그 구성 표의 서비스 열에서 Google Cloud 서비스를 선택합니다.

  2. 정보 패널에서 면제 주 구성원 탭을 선택합니다.

  3. 주 구성원 이름 위로 마우스를 가져가고 표시된 삭제 아이콘을 선택합니다.

  4. 주 구성원의 이름이 취소선 텍스트로 표시된 다음 저장을 클릭합니다.

면제된 주 구성원의 정보를 수정하려면 다음을 수행합니다.

  1. 데이터 액세스 감사 로그 구성 표의 서비스 열에서 Google Cloud 서비스를 선택합니다.

  2. 정보 패널에서 면제 주 구성원 탭을 선택합니다.

  3. 주 구성원 이름을 확장합니다.

  4. 주 구성원에 맞게 데이터 액세스 감사 로그 유형을 선택하거나 선택 해제합니다.

  5. 저장을 클릭합니다.

기본 구성 설정

Google Cloud 프로젝트, 폴더 또는 조직의 모든 신규 및 기존 Google Cloud 서비스가 상속받는 구성을 설정할 수 있습니다. 그러면 새 Google Cloud 서비스를 사용할 수 있게 되어 조직의 주 구성원이 사용하기 시작할 때 이 기본 구성 설정이 적용됩니다. 해당 서비스는 다른 Google Cloud 서비스에 이미 설정된 감사 로깅 정책을 상속하므로 데이터 액세스 감사 로그가 캡처됩니다.

기본 구성을 설정하거나 수정하려면 다음을 수행합니다.

  1. 기본 구성 설정을 클릭합니다.

  2. 정보 패널의 로그 유형 탭에서 사용 설정하거나 중지하려는 데이터 액세스 감사 로그 유형을 선택합니다.

  3. 저장을 클릭합니다.

  4. 정보 패널에서 면제 주 구성원 탭을 선택합니다.

  5. 면제 주 구성원 추가에서 선택한 서비스의 데이터 액세스 감사 로그 생성에서 제외할 주 구성원을 입력합니다.

    면제 주 구성원 추가 버튼을 필요한 횟수만큼 클릭하여 여러 주 구성원을 추가할 수 있습니다.

    사용자와 그룹을 포함하여 올바른 주 구성원 목록은 Binding 유형 참조를 참조하세요.

  6. 사용 중지된 로그 유형에서 중지하려는 데이터 액세스 감사 로그 유형을 선택합니다.

  7. 저장을 클릭합니다.

API로 데이터 액세스 감사 로그 구성

이 섹션에서는 API 및 gcloud CLI를 사용하여 프로그래매틱 방식으로 데이터 액세스 감사 로그를 구성하는 방법을 설명합니다.

Google Cloud 콘솔을 사용하여 이 태스크의 대부분을 수행할 수도 있습니다. 자세한 내용은 이 페이지의 Google Cloud 콘솔에서 데이터 액세스 감사 로그 구성을 참조하세요.

IAM 정책 객체

API를 사용하여 데이터 액세스 감사 로그를 구성하려면 Google Cloud 프로젝트, 폴더, 조직과 연결된 IAM 정책을 수정해야 합니다. 감사 로그 구성은 정책의 auditConfigs 섹션에 있습니다.

"auditConfigs": [
  {
    object(AuditConfig)
  }
]

자세한 내용은 IAM 정책 유형을 참조하세요.

다음 섹션에서는 AuditConfig 객체를 자세히 설명합니다. 구성을 변경하는 데 사용되는 API 및 gcloud CLI 명령어는 getIamPolicy 및 setIamPolicy를 참조하세요.

AuditConfig 객체

감사 로그 구성은 AuditConfig 객체의 목록으로 구성됩니다. 각 객체는 한 서비스의 로그를 구성하거나 모든 서비스의 더 광범위한 구성을 설정합니다. 각 객체는 다음과 같이 나타납니다.

{
  "service": SERVICE_NAME,
  "auditLogConfigs": [
    {
      "logType": "ADMIN_READ"
      "exemptedMembers": [ PRINCIPAL,]
    },
    {
      "logType": "DATA_READ"
      "exemptedMembers": [ PRINCIPAL,]
    },
    {
      "logType": "DATA_WRITE"
      "exemptedMembers": [ PRINCIPAL,]
    },
  ]
},

SERVICE_NAME에는 "appengine.googleapis.com"과 같은 값이나 "allServices"와 같은 특수 값이 있습니다. 구성에 특정 서비스가 언급되어 있지 않으면 해당 서비스에는 더 광범위한 구성이 사용됩니다. 구성이 없으면 해당 서비스에 데이터 액세스 감사 로그가 사용 설정되지 않습니다. 서비스 이름 목록은 로그 서비스를 참조하세요.

AuditConfig 객체의 auditLogConfigs 섹션은 각각 한 종류의 감사 로그 정보를 구성하는 객체 0~3개로 구성된 목록입니다. 목록에서 종류 중 하나를 생략하면 이 종류의 정보는 서비스에 사용 설정되지 않습니다.

PRINCIPAL는 데이터 액세스 감사 로그가 수집되지 않는 사용자입니다. Binding 유형은 사용자와 그룹을 포함하여 여러 가지 유형의 주 구성원을 설명하지만 모든 주 구성원을 데이터 액세스 감사 로그를 구성하는 데 사용할 수 있는 것은 아닙니다.

다음은 JSON 형식과 YAML 형식에서 감사를 구성하는 예시입니다. Google Cloud CLI를 사용할 경우 YAML 형식이 기본값입니다.

JSON

"auditConfigs": [
  {
    "auditLogConfigs": [
      {
        "logType": "ADMIN_READ"
      },
      {
        "logType": "DATA_WRITE"
      },
      {
        "logType": "DATA_READ"
      }
    ],
    "service": "allServices"
  },
  {
    "auditLogConfigs": [
      {
        "exemptedMembers": [
          "499862534253-compute@developer.gserviceaccount.com"
        ],
        "logType": "ADMIN_READ"
      }
    ],
    "service": "cloudsql.googleapis.com"
  }
],

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices
- auditLogConfigs:
  - exemptedMembers:
    - 499862534253-compute@developer.gserviceaccount.com
    logType: ADMIN_READ
  service: cloudsql.googleapis.com

일반 설정

다음은 Google Cloud 프로젝트에 대한 몇 가지 일반 감사 로그 구성입니다.

모든 데이터 액세스 감사 로그 사용 설정

다음 auditConfigs 섹션에서는 모든 서비스와 주 구성원에 데이터 액세스 감사 로그를 사용 설정합니다.

JSON

"auditConfigs": [
      {
        "service": "allServices",
        "auditLogConfigs": [
          { "logType": "ADMIN_READ" },
          { "logType": "DATA_READ"  },
          { "logType": "DATA_WRITE" },
        ]
      },
    ]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: ADMIN_READ
  - logType: DATA_WRITE
  - logType: DATA_READ
  service: allServices

한 종류의 서비스 및 정보 사용 설정

다음 구성은 Cloud SQL에 DATA_WRITE 데이터 액세스 감사 로그를 사용 설정합니다.

JSON

"auditConfigs": [
  {
    "service": "cloudsql.googleapis.com",
    "auditLogConfigs": [
      { "logType": "DATA_WRITE" },
    ]
  },
]

YAML

auditConfigs:
- auditLogConfigs:
  - logType: DATA_WRITE
  service: cloudsql.googleapis.com

모든 데이터 액세스 감사 로그 중지

Google Cloud 프로젝트에서 BigQuery를 제외한 모든 데이터 액세스 감사 로그를 중지하려면 새 IAM 정책에 빈 auditConfigs: 섹션을 포함합니다.

JSON

"auditConfigs": [],

YAML

auditConfigs:

새 정책에서 auditConfigs 섹션을 완전히 삭제해도 setIamPolicy가 기존 데이터 액세스 감사 로그 구성을 변경하지 않습니다. 자세한 내용은 setIamPolicy 업데이트 마스크를 참조하세요.

BigQuery 데이터 액세스 감사 로그를 중지할 수 없습니다.

getIamPolicysetIamPolicy

Cloud Resource Manager API의 getIamPolicysetIamPolicy 메서드를 사용하여 IAM 정책을 읽고 씁니다. 다음과 같이 여러 메서드 중에 선택하여 사용할 수 있습니다.

  • Cloud Resource Manager API는 다음과 같은 메서드를 제공합니다.

    projects.getIamPolicy
    projects.setIamPolicy
    organizations.getIamPolicy
    organizations.setIamPolicy
    
  • Google Cloud CLI에는 다음 Resource Manager 명령어가 있습니다.

    gcloud projects get-iam-policy
    gcloud projects set-iam-policy
    gcloud resource-manager folders get-iam-policy
    gcloud resource-manager folders set-iam-policy
    gcloud organizations get-iam-policy
    gcloud organizations set-iam-policy
    gcloud beta billing accounts get-iam-policy
    gcloud beta billing accounts set-iam-policy
    

어떤 메서드를 선택하든 다음 3단계를 따르세요.

  1. getIamPolicy 메서드 중 하나를 사용하여 현재 정책을 읽습니다. 정책을 임시 파일에 저장합니다.
  2. 임시 파일의 정책을 수정합니다. auditConfigs 섹션만 변경(또는 추가)합니다.
  3. setIamPolicy 메서드 중 하나를 사용하여 수정된 정책을 임시 파일에 씁니다.

Resource Manager에서 개발자가 첫 번째 단계에서 정책을 읽은 후에 다른 개발자가 이 정책을 변경했음을 감지하면 setIamPolicy가 실패합니다. 이 경우 앞의 세 단계를 반복합니다.

예시

다음 예시에서는 gcloud 명령어와 Cloud Resource Manager API를 사용하여 프로젝트의 데이터 액세스 감사 로그를 구성하는 방법을 보여줍니다.

조직의 데이터 액세스 감사 로그를 구성하려면 이러한 명령어와 API 메서드의 'projects' 버전을 'organizations' 버전으로 바꿉니다.

gcloud

gcloud projects 명령어를 사용하여 데이터 액세스 감사 로그를 구성하려면 다음을 수행합니다.

  1. 프로젝트의 IAM 정책을 읽고 파일에 저장합니다.

    gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    

    아래와 같이 정책이 반환됩니다. 이 정책에는 아직 auditConfigs 섹션이 없습니다.

    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  2. /tmp/policy.yaml에서 정책을 수정하되, 데이터 액세스 감사 로그 구성 추가하거나 변경합니다.

    Cloud SQL 데이터-쓰기 데이터 액세스 감사 로그를 사용 설정하도록 수정된 정책의 예가 아래에 나와 있습니다. 처음에 네 줄이 추가되었습니다.

    auditConfigs:
    - auditLogConfigs:
      - logType: DATA_WRITE
      service: cloudsql.googleapis.com
    bindings:
    - members:
      - user:colleague@example.com
      role: roles/editor
    - members:
      - user:myself@example.com
      role: roles/owner
    etag: BwVM-FDzeYM=
    version: 1
    
  3. 다음과 같이 새 IAM 정책을 씁니다.

    gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
    

    앞의 명령어가 다른 변경사항과의 충돌을 보고할 경우 이 단계를 1단계부터 다시 반복합니다.

JSON

YAML 대신 JSON 형식으로 IAM 정책을 사용하려면 예시에서 다음 gcloud 명령어를 바꿉니다.

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

API

Cloud Resource Manager API를 사용하여 데이터 액세스 감사 로그를 구성하려면 다음을 수행합니다.

  1. getIamPolicy API 메서드에 다음 매개변수를 지정하여 프로젝트의 IAM 정책을 읽습니다.

    • 리소스: projects/PROJECT_ID
    • 요청 본문: 비워둠

    이 메서드는 아래와 같이 현재 정책 객체를 반환합니다. 이 프로젝트의 정책에는 아직 auditConfigs 섹션이 없습니다.

    {
      "version": 1,
      "etag": "BwXqwxkr40M=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "user:myself@example.com"
          ]
        }
      ]
    }
    
  2. 현재 정책을 수정합니다.

    • auditConfigs 섹션을 변경 또는 추가합니다.

      데이터 액세스 감사 로그를 중지하려면 auditConfigs:[] 섹션에 빈 값을 포함합니다.

    • etag 값을 유지합니다.

    다음 단계에서 updateMask를 주의해서 설정한다면 새 정책 객체에서 다른 모든 정보를 삭제할 수도 있습니다. Cloud SQL 데이터 쓰기 감사 로그를 사용 설정하도록 수정된 정책은 다음과 같습니다.

    {
      "policy": {
        "auditConfigs": [
          {
            "auditLogConfigs": [
              {
                "logType": "DATA_WRITE"
              }
            ],
            "service": "cloudsql.googleapis.com"
          }
        ],
        "etag": "BwXqwxkr40M="
      },
      "updateMask": "auditConfigs,etag"
    }
    
  3. setIamPolicy API 메서드를 사용하여 새 정책을 씁니다. 이때 매개변수는 다음과 같이 지정합니다.

    • 리소스: projects/PROJECT_ID
    • 요청 본문: 수정된 정책을 포함합니다.

setIamPolicy 업데이트 마스크

이 섹션에서는 setIamPolicy 메서드에 사용되는 updateMask 매개변수의 중요성을 설명하고 gcloud CLI set-iam-policy 명령어를 사용할 때 Google Cloud 프로젝트 또는 조직에 실수로 해를 끼치지 않도록 주의가 필요한 이유를 설명합니다.

setIamPolicy API methodupdateMask 매개변수를 사용하여 업데이트할 정책 필드를 제어합니다. 예를 들어 마스크에 bindings가 포함되어 있지 않으면 정책 섹션을 실수로 변경할 수 없습니다. 반면에 마스크에 bindings가 포함되어 있으면 정책 섹션이 항상 업데이트됩니다. bindings의 업데이트된 값을 포함하지 않으면 섹션이 정책에서 완전히 삭제됩니다.

setIamPolicy를 호출하는 gcloud projects set-iam-policy 명령어로는 updateMask 매개변수를 지정할 수 없습니다. 대신 이 명령어는 다음과 같은 방법으로 updateMask 값을 계산합니다.

  • updateMask에는 항상 bindingsetag 필드가 포함됩니다.
  • set-iam-policy에서 제공된 정책 객체에 auditConfigs 등의 다른 최상위 필드가 포함되어 있으면 해당 필드가 updateMask에 추가됩니다.

이러한 규칙의 결과로 set-iam-policy 명령어는 다음과 같이 동작합니다.

  • 새 정책에서 auditConfigs 섹션을 생략해도 이 섹션이 업데이트 마스크에 없으므로 auditConfigs 섹션의 이전 값(있는 경우)은 변경되지 않습니다. 이 경우 해가 되지 않으나 혼동이 발생할 수 있습니다.

  • 새 정책 객체에서 bindings를 생략하면 정책에서 bindings 섹션이 삭제됩니다. 이 섹션이 업데이트 마스크에 표시되기 때문입니다. 이 경우 매우 유해한 결과가 초래될 수 있으며, 모든 주 구성원이 Google Cloud 프로젝트에 액세스할 수 없게 됩니다.

  • 새 정책 객체에서 etag를 생략하면 정책에 대한 동시 변경사항 검사가 사용 중지되고 사용자의 변경사항이 실수로 다른 사용자의 변경사항을 덮어쓰게 될 수 있습니다.