리소스 액세스 거부

이 페이지에서는 특정 Identity and Access Management(IAM) 권한을 사용하지 못하도록 방지하여 주 구성원 액세스를 거부하는 방법을 설명합니다.

IAM에서는 거부 정책을 사용하여 액세스를 거부합니다. 각 거부 정책은 Google Cloud 조직, 폴더, 프로젝트에 연결됩니다. 거부 정책에는 주 구성원을 식별하고 주 구성원이 사용할 수 없는 권한을 나열하는 거부 규칙이 포함됩니다.

거부 정책은 IAM 정책으로도 알려진 허용 정책과 구분됩니다. 허용 정책은 주 구성원에 IAM 역할을 부여하여 리소스에 대해 액세스 권한을 제공합니다.

Google Cloud CLI 또는 IAM v2beta REST API를 사용하여 거부 정책을 관리할 수 있습니다.

시작하기 전에

필요한 역할

거부 정책을 관리하는 데 필요한 권한을 얻으려면 관리자에게 조직에서 다음 IAM 역할을 부여하도록 요청합니다.

  • 거부 정책을 보려면 거부 검토자(roles/iam.denyReviewer)가 필요합니다.
  • 거부 정책을 보고, 만들고, 업데이트하고, 삭제하려면 거부 관리자(roles/iam.denyAdmin)가 필요합니다.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 거부 정책 관리에 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.

필수 권한

  • 거부 정책을 보려면 다음 권한이 필요합니다.
    • iam.denypolicies.get
    • iam.denypolicies.list
  • 거부 정책을 만들고, 업데이트하고, 삭제하려면 다음 권한이 필요합니다.
    • iam.denypolicies.create
    • iam.denypolicies.delete
    • iam.denypolicies.get
    • iam.denypolicies.update

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

거부할 권한 식별

거부 정책을 만들려면 먼저 거부할 권한과 이러한 권한을 거부할 주 구성원을 결정해야 합니다.

모든 IAM 권한의 하위 집합을 거부할 수 있습니다. 거부할 수 있는 권한 목록은 거부 정책에서 지원되는 권한을 참조하세요.

권한 이름에 특별한 형식이 필요한 v2beta REST API로 거부 정책을 관리합니다. 예를 들어 IAM 커스텀 역할 만들기 권한의 이름은 다음과 같이 지정됩니다.

  • v1 API: iam.roles.create
  • v2beta API: iam.googleapis.com/roles.create

연결 지점 식별

각 거부 정책은 조직, 폴더 또는 프로젝트에 연결됩니다. 거부 정책을 사용하려면 거부 정책이 연결된 리소스의 식별자가 필요합니다. 이를 연결 지점이라고 합니다. 이 식별자는 다음 표의 형식 중 하나를 사용합니다.

연결 지점 형식
조직

cloudresourcemanager.googleapis.com/organizations/ORG_ID
ORG_ID를 숫자 조직 ID로 바꿉니다. REST API의 경우 전체 값을 URL로 인코딩합니다.

gcloud CLI의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com/organizations/123456789012

REST API의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com%2Forganizations%2F123456789012

폴더

cloudresourcemanager.googleapis.com/folders/FOLDER_ID
FOLDER_ID를 숫자 폴더 ID로 바꿉니다. REST API의 경우 전체 값을 URL로 인코딩합니다.

gcloud CLI의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com/folders/987654321098

REST API의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com%2Ffolders%2F987654321098

프로젝트

cloudresourcemanager.googleapis.com/projects/PROJECT_ID
PROJECT_ID를 영숫자 또는 숫자 프로젝트 ID로 바꿉니다. REST API의 경우 전체 값을 URL로 인코딩합니다.

gcloud CLI의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com/projects/my-project

REST API의 예시는 다음과 같습니다.
cloudresourcemanager.googleapis.com%2Fprojects%2Fmy-project

거부 정책 만들기

조직, 폴더, 프로젝트에 거부 정책을 추가할 수 있습니다. 이러한 각 리소스는 최대 5개까지 거부 정책을 가질 수 있습니다.

거부 정책에는 다음을 지정하는 거부 규칙이 포함됩니다.

  • 거부할 권한입니다.
  • 이러한 권한이 거부된 주 구성원입니다.
  • 선택사항: 권한 거부에서 제외할 주 구성원입니다.

    예를 들어 그룹에 권한을 거부할 수 있지만 해당 그룹에 속하는 특정 사용자를 제외할 수 있습니다.

  • 선택사항: 리소스의 태그를 기준으로 주 구성원이 권한을 사용할 수 없는 경우를 지정하는 조건 표현식입니다.

거부 정책은 리소스 계층을 통해 상속됩니다. 예를 들어 조직 수준에서 권한을 거부하는 경우 해당 권한이 조직 내의 폴더 및 프로젝트에서 그리고 각 프로젝트 내의 서비스 특정 리소스에서 거부됩니다.

거부 정책은 허용 정책을 재정의합니다. 주 구성원에 특정 권한이 포함된 역할이 부여되었지만 거부 정책에 주 구성원이 해당 권한을 사용할 수 없도록 지정된 경우 주 구성원이 권한을 사용할 수 없습니다.

gcloud

리소스에 대해 거부 정책을 만들려면 정책이 포함된 JSON 파일 만들기로 시작합니다. 거부 정책에는 다음 형식이 사용됩니다.

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },
    {
      "denyRule": DENY_RULE_N
    }
  ]
}

다음 값을 제공합니다.

  • POLICY_NAME: 거부 정책의 표시 이름입니다.
  • DENY_RULE_1, DENY_RULE_2, ...DENY_RULE_N: 정책의 거부 규칙입니다. 각 거부 규칙에는 다음 필드가 포함될 수 있습니다.

    • deniedPermissions: 지정된 주 구성원이 사용할 수 없는 권한 목록입니다. 권한은 거부 정책에서 지원되어야 합니다.
    • deniedPrincipals: 지정된 권한을 사용할 수 없는 주 구성원의 목록입니다. 주 구성원 식별자에 대해 v2beta API 형식을 사용합니다.
    • exceptionPrincipals: 선택사항. 주 구성원이 deniedPrincipals에 포함된 경우에도 지정된 권한을 사용할 수 있는 주 구성원 목록입니다. 예를 들어 이 필드를 사용하여 거부된 그룹에 속하는 특정 사용자에 대해 예외를 설정할 수 있습니다. 주 구성원 식별자에 대해 v2beta API 형식을 사용합니다.
    • denialCondition: 선택사항. 주 구성원이 권한을 사용할 수 없는 경우를 지정하는 조건 표현식입니다. 다음 필드가 포함됩니다.

    거부 규칙 예시는 일반 사용 사례를 참조하세요.

예를 들어 다음 거부 정책에는 lucian@example.com 사용자에 대해 하나의 권한을 거부하는 하나의 거부 규칙이 포함됩니다.

{
  "displayName": "My deny policy.",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

그런 후 gcloud beta iam policies create 명령어를 실행합니다.

gcloud beta iam policies create POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --policy-file=POLICY_FILE

다음 값을 제공합니다.

  • POLICY_ID: 거부 정책의 식별자입니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_FILE: 거부 정책을 포함하는 JSON 파일의 파일 경로입니다.

기본적으로 이 명령어는 성공하더라도 출력을 표시하지 않습니다. 자세한 응답을 출력하려면 명령어에 --format=json 플래그를 추가합니다.

예를 들어 다음 명령어는 policy.json이라는 파일을 사용하여 my-project 프로젝트에 대해 my-deny-policy라는 거부 정책을 만듭니다.

gcloud beta iam policies create my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

REST

policies.createPolicy 메서드는 리소스에 대해 거부 정책을 만듭니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_ID: 거부 정책의 식별자입니다.
  • POLICY_NAME: 거부 정책의 표시 이름입니다.
  • DENY_RULE_1, DENY_RULE_2, ...DENY_RULE_N: 정책의 거부 규칙입니다. 각 거부 규칙에는 다음 필드가 포함될 수 있습니다.

    • deniedPermissions: 지정된 주 구성원이 사용할 수 없는 권한 목록입니다. 권한은 거부 정책에서 지원되어야 합니다.
    • deniedPrincipals: 지정된 권한을 사용할 수 없는 주 구성원의 목록입니다. 주 구성원 식별자에 대해 v2beta API 형식을 사용합니다.
    • exceptionPrincipals: 선택사항. 주 구성원이 deniedPrincipals에 포함된 경우에도 지정된 권한을 사용할 수 있는 주 구성원 목록입니다. 예를 들어 이 필드를 사용하여 거부된 그룹에 속하는 특정 사용자에 대해 예외를 설정할 수 있습니다. 주 구성원 식별자에 대해 v2beta API 형식을 사용합니다.
    • denialCondition: 선택사항. 주 구성원이 권한을 사용할 수 없는 경우를 지정하는 조건 표현식입니다. 다음 필드가 포함됩니다.

    거부 규칙 예시는 일반 사용 사례를 참조하세요.

HTTP 메서드 및 URL:

POST https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies?policyId=POLICY_ID

JSON 요청 본문:

{
  "displayName": "POLICY_NAME",
  "rules": [
    {
      "denyRule": DENY_RULE_1
    },
    {
      "denyRule": DENY_RULE_2
    },

    {
      "denyRule": DENY_RULE_N
    }
  ]
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2beta.PolicyOperationMetadata",
    "createTime": "2021-09-28T19:06:12.455151Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
    "createTime": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-09-28T22:26:21.968687Z"
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

응답은 장기 실행 작업을 식별합니다. 장기 실행 작업의 상태를 모니터링하여 완료되는 시간을 찾아낼 수 있습니다. 자세한 내용은 이 페이지에서 장기 실행 작업의 상태 확인을 참조하세요.

거부 정책 나열

리소스는 최대 5개까지 정책을 포함할 수 있습니다. 리소스에 연결된 모든 거부 정책을 나열한 후 각 거부 정책을 확인하여 각 정책의 거부 규칙을 볼 수 있습니다.

gcloud

리소스의 거부 정책을 나열하려면 gcloud beta iam policies list 명령어를 실행합니다.

gcloud beta iam policies list \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

다음 값을 제공합니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

예를 들어 다음 명령어는 해당 숫자 ID가 123456789012인 조직에 연결된 거부 정책을 나열합니다.

gcloud beta iam policies list \
    --attachment-point=cloudresourcemanager.googleapis.com/organizations/123456789012 \
    --kind=denypolicies \
    --format=json

REST

policies.listPolicies 메서드는 리소스에 대해 거부 정책을 나열합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

HTTP 메서드 및 URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "policies": [
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy",
      "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
      "kind": "DenyPolicy",
      "displayName": "My deny policy.",
      "createTime": "2021-09-28T19:06:12.455151Z",
      "updateTime": "2021-09-28T22:26:21.968687Z"
    },
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-2",
      "uid": "8465d710-ea20-0a08-d92c-b2a3ebf766ab",
      "kind": "DenyPolicy",
      "displayName": "My second deny policy.",
      "createTime": "2021-10-05T19:21:53.595455Z",
      "updateTime": "2021-10-05T19:21:53.595455Z"
    },
    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1067607927478/denypolicies/test-policy-3",
      "uid": "ee9f7c2f-7e8c-b05c-d4e5-e03bfb2954e0",
      "kind": "DenyPolicy",
      "displayName": "My third deny policy.",
      "createTime": "2021-10-05T19:22:26.770543Z",
      "updateTime": "2021-10-05T19:22:26.770543Z"
    }
  ]
}

거부 정책 보기

거부된 권한, 권한을 사용할 수 없는 주 구성원 등 거부 정책을 확인하여 포함된 거부 규칙을 볼 수 있습니다.

gcloud

리소스의 거부 정책을 가져오려면 gcloud beta iam policies get 명령어를 실행합니다.

gcloud beta iam policies get POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

다음 값을 제공합니다.

  • POLICY_ID: 거부 정책의 식별자입니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

예를 들어 다음 명령어는 my-project 프로젝트에 대해 my-deny-policy라는 거부 정책을 가져오고 이를 policy.json이라는 파일에 저장합니다.

gcloud beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get 메서드는 리소스에 대해 거부 정책을 가져옵니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_ID: 거부 정책의 식별자입니다.

HTTP 메서드 및 URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

거부 정책 업데이트

거부 정책을 만든 후에는 여기에 포함된 거부 규칙은 물론 해당 표시 이름을 업데이트할 수 있습니다.

거부 정책을 업데이트하려면 읽기-수정-쓰기 패턴을 사용합니다.

  1. 정책의 현재 버전을 읽습니다.
  2. 필요에 따라 정책의 정보를 수정합니다.
  3. 업데이트된 정책을 작성합니다.

거부 정책 읽기

gcloud

리소스의 거부 정책을 가져오려면 gcloud beta iam policies get 명령어를 실행합니다.

gcloud beta iam policies get POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --format=json

다음 값을 제공합니다.

  • POLICY_ID: 거부 정책의 식별자입니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

예를 들어 다음 명령어는 my-project 프로젝트에 대해 my-deny-policy라는 거부 정책을 가져오고 이를 policy.json이라는 파일에 저장합니다.

gcloud beta iam policies get my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --format=json \
    > ./policy.json

REST

policies.get 메서드는 리소스에 대해 거부 정책을 가져옵니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_ID: 거부 정책의 식별자입니다.

HTTP 메서드 및 URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create"
        ]
      }
    }
  ]
}

거부 정책 수정

거부 정책을 수정하려면 IAM에서 이전에 읽은 정책의 사본을 변경합니다. 표시 이름을 업데이트하거나 거부 규칙을 추가, 변경, 삭제할 수 있습니다. 업데이트된 정책을 작성할 때까지는 변경사항이 적용되지 않습니다.

예를 들어 기존 거부 규칙에 권한을 추가할 수 있습니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
  "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
  "kind": "DenyPolicy",
  "displayName": "My deny policy.",
  "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
  "createTime": "2021-10-05T19:22:26.770543Z",
  "updateTime": "2021-10-05T19:22:26.770543Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principal://goog/subject/lucian@example.com"
        ],
        "deniedPermissions": [
          "iam.googleapis.com/roles.create",
          "iam.googleapis.com/roles.delete"
        ]
      }
    }
  ]
}

업데이트된 거부 정책 작성

로컬로 거부 정책을 수정한 후에는 업데이트된 거부 정책을 IAM에 작성해야 합니다.

각 거부 정책에는 정책 버전을 식별하는 etag 필드가 포함됩니다. etag는 정책을 업데이트할 때마다 변경됩니다. 업데이트된 정책을 작성할 때 요청의 etag는 IAM에 저장된 현재 etag와 일치해야 합니다. 값이 일치하지 않으면 요청이 실패합니다. 이 기능은 동시 변경사항이 서로 덮어쓰지 않도록 방지하는 데 도움이 됩니다.

gcloud

리소스의 거부 정책을 업데이트하려면 gcloud beta iam policies update 명령어를 실행합니다.

gcloud beta iam policies update POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies \
    --policy-file=POLICY_FILE

다음 값을 제공합니다.

  • POLICY_ID: 거부 정책의 식별자입니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_FILE: 거부 정책을 포함하는 JSON 파일의 파일 경로입니다.

기본적으로 이 명령어는 성공하더라도 출력을 표시하지 않습니다. 자세한 응답을 출력하려면 명령어에 --format=json 플래그를 추가합니다.

예를 들어 다음 명령어는 policy.json이라는 파일을 사용하여 my-project 프로젝트에 대해 my-deny-policy라는 거부 정책을 업데이트합니다.

gcloud beta iam policies update my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies \
    --policy-file=policy.json

REST

policies.update 메서드는 거부 정책을 업데이트합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_ID: 거부 정책의 식별자입니다.
  • POLICY: 업데이트된 거부 정책입니다.

    예를 들어 이전 단계에 표시된 정책에 권한을 추가하려면 POLICY를 다음으로 바꿉니다.

    {
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
      "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
      "kind": "DenyPolicy",
      "displayName": "My deny policy.",
      "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
      "createTime": "2021-10-05T19:22:26.770543Z",
      "updateTime": "2021-10-05T19:22:26.770543Z",
      "rules": [
        {
          "denyRule": {
            "deniedPrincipals": [
              "principal://goog/subject/lucian@example.com"
            ],
            "deniedPermissions": [
              "iam.googleapis.com/roles.create",
              "iam.googleapis.com/roles.delete"
            ]
          }
        }
      ]
    }

HTTP 메서드 및 URL:

PUT https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID

JSON 요청 본문:

POLICY

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8b2d0ab2daf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2alpha.PolicyOperationMetadata",
    "createTime": "2021-10-05T22:26:21.968687Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2alpha.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "uid": "6665c437-a3b2-a018-6934-54dd16d3426e",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTgxNTIxNDE3NTYxNjQxODYxMTI=",
    "createTime": "2021-10-05T19:22:26.770543Z",
    "updateTime": "2021-10-05T22:26:21.968687Z",
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create",
            "iam.googleapis.com/roles.delete"
          ]
        }
      }
    ]
  }
}

응답은 장기 실행 작업을 식별합니다. 장기 실행 작업의 상태를 모니터링하여 완료되는 시간을 찾아낼 수 있습니다. 자세한 내용은 이 페이지에서 장기 실행 작업의 상태 확인을 참조하세요.

거부 정책 삭제

더 이상 거부 정책에 규칙을 적용하지 않으려면 거부 정책을 삭제할 수 있습니다.

선택적으로 삭제 중인 정책 버전에 대해 etag를 지정할 수 있습니다. etag를 지정할 경우 IAM에 저장된 현재 etag와 일치해야 합니다. 값이 일치하지 않으면 요청이 실패합니다. 이 기능을 사용하면 해당 정책의 업데이트된 버전 대신 의도된 정책을 삭제하는지 확인할 수 있습니다.

요청에서 etag를 생략하면 IAM이 정책을 무조건적으로 삭제합니다.

gcloud

리소스에서 거부 정책을 삭제하려면 gcloud beta iam policies delete 명령어를 실행합니다.

gcloud beta iam policies delete POLICY_ID \
    --attachment-point=ATTACHMENT_POINT \
    --kind=denypolicies

다음 값을 제공합니다.

  • POLICY_ID: 거부 정책의 식별자입니다.

  • ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

선택적으로 --etag=ETAG 플래그를 추가할 수 있습니다. ETAG를 거부 정책에 대해 현재 etag 값으로 바꿉니다.

기본적으로 이 명령어는 성공하더라도 출력을 표시하지 않습니다. 자세한 응답을 출력하려면 명령어에 --format=json 플래그를 추가합니다.

예를 들어 다음 명령어는 my-project 프로젝트에서 my-deny-policy라는 거부 정책을 삭제합니다.

gcloud beta iam policies delete my-deny-policy \
    --attachment-point=cloudresourcemanager.googleapis.com/projects/my-project \
    --kind=denypolicies

REST

policies.delete 메서드는 리소스에서 거부 정책을 삭제합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • POLICY_ID: 거부 정책의 식별자입니다.
  • ETAG: 선택사항. 정책 버전에 대한 식별자입니다. 존재하는 경우 이 값이 정책의 현재 etag 값과 일치해야 합니다.

HTTP 메서드 및 URL:

DELETE https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/denypolicies/POLICY_ID?etag=ETAG

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/8223fe308bf1ff01",
  "metadata": {
    "@type": "type.googleapis.com/google.iam.v2beta.PolicyOperationMetadata",
    "createTime": "2021-10-05T19:45:00.133311Z"
  },
  "response": {
    "@type": "type.googleapis.com/google.iam.v2beta.Policy",
    "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy",
    "kind": "DenyPolicy",
    "displayName": "My deny policy.",
    "etag": "MTc3NDU4MjM4OTY0MzU5MjQ5OTI=",
    "createTime": "2021-09-28T19:06:12.455151Z",
    "updateTime": "2021-10-05T19:45:00.133311Z",
    "deleteTime": "2021-10-05T19:45:00.133311Z",
    "rules": [
      {
        "denyRule": {
          "deniedPrincipals": [
            "principal://goog/subject/lucian@example.com"
          ],
          "deniedPermissions": [
            "iam.googleapis.com/roles.create"
          ]
        }
      }
    ]
  }
}

응답은 장기 실행 작업을 식별합니다. 장기 실행 작업의 상태를 모니터링하여 완료되는 시간을 찾아낼 수 있습니다. 자세한 내용은 이 페이지에서 장기 실행 작업의 상태 확인을 참조하세요.

장기 실행 작업의 상태 확인

REST API를 사용할 때 거부 정책을 변경하는 메서드는 장기 실행 작업 또는 LRO를 반환합니다. 장기 실행 작업은 요청의 상태를 추적하고 정책 변경이 완료되었는지 여부를 나타냅니다. 장기 실행 작업을 폴링하여 해당 상태를 모니터링할 수 있습니다.

장기 실행 작업을 폴링하려면 현재 상태 가져오기를 시작합니다.

REST

policies.operations.get 메서드는 장기 실행 작업의 상태를 반환합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENCODED_ATTACHMENT_POINT: 거부 정책이 연결된 리소스의 URL 인코딩 식별자입니다. 이 값의 형식을 지정하는 방법은 이 페이지의 연결 지점 식별을 참조하세요.

  • OPERATION_ID: 작업의 식별자입니다. 작업 이름의 일부로 원래 요청에 대한 응답으로 이 식별자가 수신됩니다. 작업 이름의 끝에 16진수 값을 사용합니다. 예를 들면 89cb3e508bf1ff01입니다.

HTTP 메서드 및 URL:

GET https://iam.googleapis.com/v2beta/policies/ENCODED_ATTACHMENT_POINT/operations/OPERATION_ID

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F1234567890123/denypolicies/my-policy/operations/89cb3e508bf1ff01",
  "done": true
}

작업의 done 필드가 없으면 작업을 반복적으로 가져와서 해당 상태를 계속 모니터링합니다. 잘린 지수 백오프를 사용하여 각 요청 간에 지연을 일으킵니다. done 필드가 true로 설정되었으면 작업이 완료되었고 작업 가져오기를 중지할 수 있습니다.

다음 단계