거부 정책 문제 해결

이 페이지에서는 거부 정책을 사용하는 경우 Identity and Access Management(IAM)에서 '권한 거부됨' 액세스 문제를 해결하는 방법을 설명합니다.

주 구성원이 리소스에 액세스할 수 없는 이유를 찾으려면 일반적으로 정책 문제해결 도구를 사용합니다. 하지만 정책 문제 해결 도구는 거부 정책을 평가하지 않습니다. 따라서 주 구성원이 거부 정책으로 인해 액세스가 거부된 경우 정책 문제 해결 도구에서 주 구성원이 액세스가 거부된 이유를 알 수 없습니다. 거부 정책이 적용되는지 여부를 확인하려면 조직 관리자나 거부 관리자에게 문의하세요.

이 문제를 해결하려면 해당 프로젝트, 폴더, 조직의 허용 정책과 거부 정책을 모두 가져오면 됩니다. 그러면 거부 정책을 검토하고 주 구성원에 대한 액세스가 거부되었는지 여부를 확인할 수 있습니다.

시작하기 전에

거부 정책을 검토하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청합니다.

  • 조직의 거부 검토자(roles/iam.denyReviewer)
  • 프로젝트가 포함된 폴더(있는 경우)의 폴더 IAM 관리자(roles/resourcemanager.folderIamAdmin)
  • 조직의 조직 역할 뷰어(roles/iam.organizationRoleViewer)
  • 프로젝트의 역할 뷰어(roles/iam.roleViewer)

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

허용 및 거부 정책 검토

해당 프로젝트, 폴더, 조직의 허용 정책과 거부 정책을 모두 가져오려면 --include-deny 플래그와 함께 gcloud beta projects get-ancestors-iam-policy 명령어를 사용합니다.

gcloud

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

gcloud beta projects get-ancestors-iam-policy 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows(PowerShell)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

Windows(cmd.exe)

gcloud beta projects get-ancestors-iam-policy PROJECT_ID --include-deny --format=json

응답에는 프로젝트, 프로젝트의 상위 폴더, 조직의 허용 정책과 거부 정책이 포함됩니다. 다음 예시에서는 조직 1234567890123 및 프로젝트 my-project의 허용 정책과 프로젝트 my-project의 거부 정책을 보여줍니다.

[
  {
    "id": "1234567890123",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/iam.denyAdmin"
        },
        {
          "members": [
            "user:raha@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwXW6Eab7TI=",
      "version": 1
    },
    "type": "organization"
  },
  {
    "id": "my-project",
    "policy": {
      "bindings": [
        {
          "members": [
            "group:cloud-admins@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwXXjOM7L6M=",
      "type": "project"
    }
  },
  {
    "id": "my-project",
    "policy": {
      "createTime": "2022-02-14T21:46:35.865279Z",
      "displayName": "My deny policy",
      "etag": "MTgyMzg2ODcwNTEyMjMxMTM3Mjg=",
      "kind": "DenyPolicy",
      "name": "policies/cloudresourcemanager.googleapis.com%2Fprojects%2F123456789012/denypolicies/my-deny-policy",
      "rules": [
        {
          "denyRule": {
            "deniedPermissions": [
              "iam.googleapis.com/serviceAccounts.create"
            ],
            "deniedPrincipals": [
              "principal://goog/subject/raha@example.com"
            ]
          },
          "description": "Prevent service account creation"
        }
      ],
      "uid": "c83e3dc3-d8a6-6f51-4018-814e9f200b05",
      "updateTime": "2022-02-14T21:46:35.865279Z"
    },
    "type": "project"
  }
]

이 예시에서 사용자 raha@example.com은 조직에서 서비스 계정 관리자 역할(roles/iam.serviceAccountAdmin)을 부여받았지만 프로젝트에는 raha@example.comiam.googleapis.com/serviceAccounts.create 권한을 사용하지 못하도록 하는 거부 정책이 있습니다. 따라서 raha@example.commy-project 프로젝트에 서비스 계정을 만들려고 시도하면 요청이 거부됩니다.