정책

ID 및 액세스 관리(IAM) 정책은 Google Cloud 리소스에 대한 액세스 제어를 지정합니다.

Policybindings의 모음입니다. binding은 하나 이상의 members를 단일 role에 바인딩합니다. 구성원은 사용자 계정, 서비스 계정, Google 그룹스, 도메인(예: G Suite)일 수 있습니다. role은 이름이 지정된 권한 목록입니다. 각 role은 IAM 사전 정의된 역할 또는 사용자가 만든 커스텀 역할일 수 있습니다.

선택적으로 bindingcondition을 지정할 수 있으며 이는 표현식이 true로 계산되는 경우에만 리소스에 액세스를 허용하는 논리 표현식입니다. 조건은 요청, 리소스 또는 둘 모두를 기준으로 제약조건을 추가할 수 있습니다.

JSON 예시:

{
  "bindings": [
    {
      "role": "roles/resourcemanager.organizationAdmin",
      "members": [
        "user:mike@example.com",
        "group:admins@example.com",
        "domain:google.com",
        "serviceAccount:my-project-id@appspot.gserviceaccount.com"
      ]
    },
    {
      "role": "roles/resourcemanager.organizationViewer",
      "members": ["user:eve@example.com"],
      "condition": {
        "title": "expirable access",
        "description": "Does not grant access after Sep 2020",
        "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
      }
    }
  ],
  "etag": "BwWWja0YfJA=",
  "version": 3
}

YAML 예시:

bindings:
- members:
  - user:mike@example.com
  - group:admins@example.com
  - domain:google.com
  - serviceAccount:my-project-id@appspot.gserviceaccount.com
  role: roles/resourcemanager.organizationAdmin
- members:
  - user:eve@example.com
  role: roles/resourcemanager.organizationViewer
  condition:
    title: expirable access
    description: Does not grant access after Sep 2020
    expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
- etag: BwWWja0YfJA=
- version: 3

IAM 및 IAM 기능에 대한 설명은 IAM 문서를 참조하세요.

JSON 표현

{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
필드
version

integer

정책의 형식을 지정합니다.

유효한 값은 0, 1, 3입니다. 잘못된 값을 지정하는 요청은 거부됩니다.

조건부 역할 결합에 영향을 미치는 모든 작업은 3 버전을 지정해야 합니다. 이 요구사항은 다음 작업에 적용됩니다.

  • 조건부 역할 결합이 포함된 정책 가져오기
  • 정책에 조건부 역할 binding 추가
  • 정책에서 조건부 역할 결합 변경
  • 조건이 포함된 정책에서 조건 유무와 관계없이 역할 결합 삭제

중요: IAM 조건을 사용하는 경우 setIamPolicy를 호출할 때마다 etag 필드를 포함해야 합니다. 이 필드를 제외하면 IAM을 통해 버전 3정책으로 1 정책을 덮어쓸 수 있으며, 버전 3 정책의 모든 조건이 손실됩니다.

정책에 조건이 포함되어 있지 않으면 해당 정책에 대한 작업에서 유효한 버전을 지정하거나 필드를 설정하지 않은 상태로 둘 수 있습니다.

bindings[]

object (Binding)

members 목록을 role에 연결합니다. 선택적으로 bindings 적용 방법과 시기를 결정하는 condition을 지정할 수 있습니다. 각 bindings에는 하나 이상의 구성원을 포함해야 합니다.

auditConfigs[]

object (AuditConfig)

이 정책의 Cloud 감사 로깅 구성을 지정합니다.

etag

string (bytes format)

etag는 동시에 발생한 여러 정책 업데이트가 서로를 덮어쓰지 않도록 방지하는 낙관적 동시 실행 제어에 사용됩니다. 정책 업데이트를 수행할 때 읽기-수정-쓰기 주기에서 시스템이 etag를 활용하여 경합 상태를 방지하는 것이 좋습니다. etaggetIamPolicy에 대한 응답으로 반환되며, setIamPolicy 요청에 해당 etag를 넣어 변경사항이 정책의 동일한 버전에 적용되도록 해야 합니다.

중요: IAM 조건을 사용하는 경우 setIamPolicy를 호출할 때마다 etag 필드를 포함해야 합니다. 이 필드를 제외하면 IAM을 통해 버전 3정책으로 1 정책을 덮어쓸 수 있으며, 버전 3 정책의 모든 조건이 손실됩니다.

base64 인코딩 문자열입니다.

결합

membersrole과 연결합니다.

JSON 표현

{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
필드
role

string

members에 할당된 역할입니다. 예를 들면 roles/viewer, roles/editor, roles/owner입니다.

members[]

string

Cloud Platform 리소스에 대한 액세스를 요청하는 ID를 지정합니다. members는 다음과 같은 값을 가질 수 있습니다.

  • allUsers: Google 계정 유무에 관계없이 임의의 인터넷 사용자를 나타내는 특수한 식별자입니다.

  • allAuthenticatedUsers: Google 계정 또는 서비스 계정으로 인증한 사용자를 나타내는 특수한 식별자입니다.

  • user:{emailid}: 특정 Google 계정을 나타내는 이메일 주소입니다. 예를 들면 alice@example.com입니다.

  • serviceAccount:{emailid}: 서비스 계정을 나타내는 이메일 주소입니다. 예를 들면 my-other-app@appspot.gserviceaccount.com입니다.

  • group:{emailid}: Google 그룹을 나타내는 이메일 주소입니다. admins@example.com).

  • deleted:user:{emailid}?uid={uniqueid}: 최근에 삭제된 사용자를 나타내는 이메일 주소 및 고유 식별자입니다. 예를 들면 alice@example.com?uid=123456789012345678901입니다. 사용자가 복구되면 이 값은 user:{emailid}로 되돌아가고 복구된 사용자는 binding에서 역할을 유지합니다.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: 최근에 삭제된 서비스 계정을 나타내는 이메일 주소 및 고유 식별자입니다. 예를 들면 my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901입니다. 서비스 계정이 삭제 취소되면 이 값은 serviceAccount:{emailid}로 되돌아가고 삭제되지 않은 서비스 계정은 binding에서 역할을 유지합니다.

  • deleted:group:{emailid}?uid={uniqueid}: 최근에 삭제된 Google 그룹을 나타내는 이메일 주소 및 고유 식별자입니다. admins@example.com?uid=123456789012345678901). 그룹이 복구되면 이 값은 group:{emailid}로 되돌아가고 복구된 그룹은 binding에서 역할을 유지합니다.

  • domain:{domain}: 해당 도메인의 모든 사용자를 나타내는 G Suite 도메인(기본)입니다. 예를 들면 google.com 또는 example.com입니다.
condition

object (Expr)

이 결합에 연결된 조건입니다. 참고: 조건이 충족되지 않으면 현재 바인딩을 통해 사용자에게 액세스가 허용되지 않습니다. 서로 다른 바인딩과 해당 조건은 독립적으로 검사됩니다.

Expr

Common Expression Language(CEL) 구문으로 된 텍스트 표현식을 나타냅니다. CEL은 C와 같은 표현식 언어입니다. CEL의 구문과 시맨틱스는 https://github.com/google/cel-spec에 설명되어 있습니다.

예시(비교):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

예시(균등):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

예시(로직):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

예시(데이터 조작):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

표현식 내에서 참조할 수 있는 정확한 변수와 함수는 이를 계산하는 서비스에 의해 결정됩니다. 자세한 내용은 서비스 문서를 참조하세요.

JSON 표현

{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
필드
expression

string

Common Expression Language 구문으로 된 표현식의 텍스트 표현입니다.

title

string

선택사항 표현식의 제목으로, 목적을 설명하는 짧은 문자열입니다. 표현식을 입력할 수 있는 UI 등에 사용할 수 있습니다.

description

string

선택사항 표현식에 대한 설명입니다. 표현식을 설명하는 더 긴 텍스트입니다. 예를 들어 UI에서 마우스를 가져갈 때 표시할 수 있습니다.

location

string

선택사항. 오류 보고를 위해 표현식의 위치를 나타내는 문자열입니다. 예를 들어 파일 이름 및 파일 내 위치일 수 있습니다.

AuditConfig

서비스의 감사 구성을 지정합니다. 이 구성은 로깅되는 권한 유형 및 로깅에서 제외할 ID(있는 경우)를 결정합니다. AuditConfig에는 하나 이상의 AuditLogConfig가 있어야 합니다.

allServices와 특정 서비스 모두에 AuditConfig가 있으면 해당 서비스에 두 AuditConfig의 합집합이 사용됩니다. 즉, 각 AuditConfig에 지정된 log_types가 사용 설정되며 각 AuditLogConfig의 exemptedMembers가 제외됩니다.

다음은 여러 AuditConfig가 있는 정책의 예시입니다.

{
  "auditConfigs": [
    {
      "service": "allServices"
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE",
        },
        {
          "logType": "ADMIN_READ",
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com"
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

이 정책은 sampleservice에서 DATA_READ, DATA_WRITE, ADMIN_READ 로깅을 사용 설정합니다. 또한 jose@example.com을 DATA_READ 로깅에서, aliya@example.com을 DATA_WRITE 로깅에서 제외합니다.

JSON 표현

{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
필드
service

string

감사 로깅을 사용 설정할 서비스를 지정합니다. 예를 들면 storage.googleapis.com, cloudsql.googleapis.com입니다. allServices는 모든 서비스를 포괄하는 특수한 값입니다.

auditLogConfigs[]

object (AuditLogConfig)

각 권한 유형의 로깅에 대한 구성입니다.

AuditLogConfig

권한 유형 로깅에 대한 구성을 제공합니다. 예를 들면 다음과 같습니다.

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE",
    }
  ]
}

여기에서는 'DATA_READ' 및 'DATA_WRITE' 로깅을 사용 설정하고 jose@example.com을 DATA_READ 로깅에서 제외합니다.

JSON 표현

{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
필드
logType

enum (LogType)

이 구성이 사용 설정하는 로그 유형입니다.

exemptedMembers[]

string

이 권한 유형을 로깅하지 않는 ID를 지정합니다. Binding.members와 동일한 형식을 따릅니다.

LogType

로깅을 구성할 수 있는 유효한 권한 유형의 목록입니다. 관리자 쓰기는 항상 로깅되며 구성할 수 없습니다.

열거형
LOG_TYPE_UNSPECIFIED 경우의 기본값. 이 값을 지정하면 안 됩니다.
ADMIN_READ 관리자 읽기. 예: CloudIAM getIamPolicy
DATA_WRITE 데이터 쓰기. 예: CloudSQL Users create
DATA_READ 데이터 읽기. 예: CloudSQL Users list