액세스 문제해결

Policy Troubleshooter를 사용하면 사용자에게 리소스에 대한 액세스 권한이 있거나 API를 호출할 권한이 없는 이유를 쉽게 파악할 수 있습니다. 이메일, 리소스, 권한을 입력하면 Policy Troubleshooter가 리소스에 적용되는 모든 Identity and Access Management(IAM) 정책을 조사합니다. 그런 다음 주 구성원의 역할에 해당 리소스에 대한 권한이 포함되었는지 여부 및 권한이 포함되었다면 어떠한 정책이 주 구성원을 해당 역할에 결합하는지를 표시합니다.

Cloud Console, gcloud 명령줄 도구 또는 REST API를 사용하여 Policy Troubleshooter에 액세스할 수 있습니다. 간단한 쿼리에서는 Cloud Console을 사용하는 것이 일반적으로 가장 빠릅니다. 더 복잡한 시나리오에서는 gcloud 도구 또는 REST API를 사용하시기 바랍니다.

시작하기 전에

  • Policy Troubleshooter API를 사용 설정합니다.

    API 사용 설정

필수 권한

Policy Troubleshooter는 볼 수 있는 권한이 있는 IAM 정책 및 역할에 따라 리소스에 대한 주 구성원의 액세스를 분석합니다. 리소스에 적용되는 정책을 볼 권한이 없거나 커스텀 역할을 볼 권한이 없는 경우 주 구성원이 액세스 권한을 보유하는지 여부를 알 수 없습니다.

주 구성원의 액세스 문제를 완전히 해결하려면 다음 권한이 포함된 역할이 필요합니다.

  • resourcemanager.projects.getIamPolicy
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.organizations.getIamPolicy
  • iam.roles.get
  • iam.roles.list

최소 권한 원칙을 준수하면서 이러한 권한을 얻으려면 관리자에게 조직 수준의 보안 평가자 역할(roles/iam.securityReviewer)을 부여해 달라고 요청하세요.

또는 관리자가 필요한 권한(커스텀 역할 또는 더 많은 권한이 있는 사전 정의된 역할 등)을 포함하는 다른 역할을 부여할 수 있습니다.

액세스 문제해결

액세스 문제를 해결하려면 다음 정보가 필요합니다.

  • 주 구성원: 확인할 이메일 주소입니다. 이메일 주소는 사용자나 서비스 계정을 참조해야 합니다. 다른 유형의 주 구성원은 지원되지 않습니다.
  • 리소스: 리소스의 전체 이름입니다. 예를 들어 my-project 프로젝트를 확인하려면 //cloudresourcemanager.googleapis.com/projects/my-project를 입력합니다. 다른 리소스 유형은 전체 리소스 이름의 예시를 참조하세요.
  • 권한: 확인할 권한입니다. Cloud Console을 사용하면 입력과 동시에 제안 목록이 표시됩니다. 전체 권한 목록은 권한 참조를 확인하세요.

Console

액세스 문제해결

액세스 문제를 해결하려면 다음을 따르세요.

  1. Cloud Console에서 Policy Troubleshooter 페이지로 이동합니다.

    Policy Troubleshooter로 이동

  2. 확인할 이메일, 리소스 이름, 권한을 입력합니다.

  3. 선택사항: 여러 리소스 및 권한을 확인하려면 다른 쌍 추가를 선택하고 이전 단계를 반복합니다.

  4. API 호출 확인을 클릭합니다.

Policy Troubleshooter 결과 이해

Policy Troubleshooter 결과는 주 구성원이 지정된 리소스에 지정된 권한을 가지고 있는지 여부를 알려줍니다. 또한 리소스에 적용되는 IAM 정책과 해당 정책의 역할 결합도 나열됩니다.

기본적으로 결과는 간단한 뷰에 표시되고 여기에는 지정된 권한이 포함된 역할의 역할 결합만 표시됩니다. 여러 권한의 문제를 해결하는 경우 보기 기준 드롭다운 목록을 사용하여 권한을 전환할 수 있습니다.

간단한 뷰 전환 버튼을 클릭하여 간단한 뷰 사용을 중지할 수 있습니다. 간단한 뷰를 사용 중지하면 리소스에 적용되는 정책의 모든 역할 binding이 표시됩니다.

결과 페이지에는 다음 정보가 포함됩니다.

  • 액세스 요약: 주 구성원의 액세스 권한에 대한 간략한 요약입니다. 이 정보를 통해 주 구성원이 리소스에 대한 권한을 가지고 있는지 확인할 수 있습니다. 다음 예시에서 my-user@example.commy-project에 대한 logging.logs.view 권한을 가집니다.

  • 관련 정책 및 역할 결합: 지정된 리소스에 적용되는 IAM 정책 목록과 각 정책의 역할 결합입니다. 각 역할 결합 옆에는 해당 역할 결합이 주 구성원에게 지정된 권한을 부여하는지 여부를 나타내는 아이콘이 있습니다. 역할 결합을 클릭하여 원시 텍스트를 확인합니다.

    다음 예시에서는 로그 뷰어 역할 binding이 권한을 부여합니다.

  • 관련 역할 binding의 원시 텍스트: 관련 역할 binding 목록에 있는 각 역할 binding의 원시 텍스트입니다. 역할 binding 구조에 대한 자세한 내용은 정책 이해를 참조하세요.

    각 역할 binding에서 행은 다음과 같이 강조표시됩니다.

    • 녹색: 지정된 권한이 포함된 역할을 포함하거나, 지정된 주 구성원을 참조하거나, 지정된 주 구성원이 포함된 그룹을 참조하는 경우 행이 녹색으로 강조표시됩니다.
    • 빨간색: 다른 역할을 포함하거나 다른 주 구성원을 참조하거나 지정된 주 구성원이 포함되지 않은 그룹을 참조하는 경우 행이 빨간색으로 강조표시됩니다.
    • 노란색: 볼 수 있는 권한이 없는 역할을 포함하거나 볼 수 있는 권한이 없는 회원의 그룹이 포함된 경우 행이 노란 색으로 강조표시됩니다.

gcloud

우선 Policy Troubleshooter를 사용하도록 환경이 설정되어 있는지 확인합니다.

Policy Troubleshooter API를 사용 설정합니다.

gcloud services enable policytroubleshooter.googleapis.com --project=project-id

그런 다음 프로젝트를 설정합니다.

gcloud config set project project-id

설정을 완료한 후 Policy Troubleshooter를 사용하여 사용자에게 리소스에 대한 권한이 있는지 여부를 확인할 수 있습니다. 다음 명령어를 실행합니다.

gcloud policy-troubleshoot iam resource --principal-email=email \
    --permission=permission

예를 들어 다음 명령어는 foo@example.commy- project 프로젝트에 대한 resourcemanager.projects.getIamPolicy 권한이 있는지 확인합니다.

gcloud policy-troubleshoot iam //cloudresourcemanager.googleapis.com/projects/my-project \
    --permission=resourcemanager.projects.getIamPolicy --principal-email=foo@example.com

출력은 사용자에게 권한이 있는지 여부 및 그 이유에 대한 설명을 나타내는 YAML입니다. 다음과 같이 나타납니다.

access: GRANTED
explainedPolicies:
- access: GRANTED
  bindingExplanations:
  - access: NOT_GRANTED
    memberships:
      serviceAccount:service-123@compute-system.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
    role: roles/compute.serviceAgent
    rolePermission: ROLE_PERMISSION_NOT_INCLUDED
  - access: GRANTED
    memberships:
      serviceAccount:service@my-project.iam.gserviceaccount.com: MEMBERSHIP_NOT_INCLUDED
      user:foo@example.com: MEMBERSHIP_INCLUDED
    role: roles/owner
    rolePermission: ROLE_PERMISSION_INCLUDED
  fullResourceName: //cloudresourcemanager.googleapis.com/projects/my-project
  policy:
    bindings:
    - members:
      - serviceAccount:service-123@compute-system.iam.gserviceaccount.com
      role: roles/compute.serviceAgent
    - members:
      - serviceAccount:foo@my-project.iam.gserviceaccount.com
      - user:foo@example.com
      role: roles/owner
    etag: BwWAOWEaIEg=
    version: 1
- access: UNKNOWN_INFO_DENIED
policy: {}

REST API

iam.troubleshoot 메서드는 주 구성원이 IAM 권한을 보유하거나 보유하지 않는 이유를 알려줍니다.

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

  • email: 권한 문제를 해결하려는 주 구성원의 이메일 주소입니다.
  • resource: 권한이 부여된 리소스입니다.
  • permission: 문제를 해결하려는 권한입니다.

HTTP 메서드 및 URL:

POST https://policytroubleshooter.googleapis.com/v1/iam:troubleshoot

JSON 요청 본문:

{
  "accessTuple": {
    "principal": "email",
    "fullResourceName": "resource",
    "permission": "permission"
  }
}

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

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

{
  "access": "GRANTED",
  "explainedPolicies": [
    {
      "access": "GRANTED",
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/my-project",
      "policy": {
        "version": 1,
        "etag": "BwWBUZjK9YQ=",
        "bindings": [
          {
            "role": "roles/owner",
            "members": [
              "user:foo@example.com"
            ]
          }
        ]
      },
      "bindingExplanations": [
        {
          "access": "GRANTED",
          "role": "roles/owner",
          "rolePermission": "ROLE_PERMISSION_INCLUDED",
          "rolePermissionRelevance": "HIGH",
          "memberships": {
            "key": "user:foo@example.com",
            "value": {
              "membership": "MEMBERSHIP_INCLUDED",
              "relevance": "HIGH",
            }
          },
        "relevance: HIGH",
        }
      ]
    },
    {
      "access": "UNKNOWN_INFO_DENIED",
      "policy": {}
    }
  ]
}

그룹 멤버십 문제해결

회원을 볼 수 있는 권한이 있는 경우에만 Google 그룹이 제공한 리소스에 대한 액세스 문제를 해결할 수 있습니다.

권한이 없으면 Cloud Console에서 해당 그룹은 노란색으로 강조표시되고, 그룹에 주 구성원이 포함되어 있는지 여부를 알 수 없음을 나타내는 경고가 표시됩니다. gcloud 도구 또는 REST API를 사용하는 경우 응답에 UNKNOWN_INFO_DENIED 또는 ACCESS_TO_INFO_DENIED가 포함됩니다.

그룹 멤버십 문제해결

일반적으로 Google Workspace 최고 관리자와 그룹 관리자에게는 그룹 멤버십을 볼 수 있는 권한이 있습니다. 최고 관리자나 그룹 관리자가 아닌 사용자가 액세스 문제를 해결하도록 허용하려면 groups.read 권한(Admin API 권한 아래에 위치)이 포함된 커스텀 Google Workspace 관리자 역할을 만들고 사용자에게 이 역할을 부여합니다. 그러면 사용자가 개발자 도메인 내 모든 그룹의 멤버십을 보고 더욱 효율적으로 액세스 문제를 해결할 수 있습니다.

조건부 역할 binding 문제해결

조건부 역할 결합 문제를 해결하려면 Policy Troubleshooter에 요청에 대한 추가 컨텍스트가 필요합니다. 예를 들어 날짜/시간 속성을 기반으로 한 조건 문제를 해결하려면 Policy Troubleshooter에 요청 시간이 필요합니다.

이 추가 컨텍스트를 제공하려면 관리자 활동 감사 로그 또는 데이터 액세스 감사 로그에서 직접 문제를 해결할 수 있습니다. 각 감사 로그 항목은 Google Cloud API에 대한 요청 또는 Google Cloud에서 사용자 대신 수행하는 작업에 해당합니다. 감사 로그에서 문제를 해결할 때 Policy Troubleshooter는 요청에 대한 추가 정보(예: 날짜 및 시간)를 자동으로 가져와서 Policy Troubleshooter가 조건부 역할 결합을 분석할 수 있도록 합니다.

이 기능은 Cloud Console에서만 사용할 수 있습니다.

조건부 역할 결합 문제를 해결하려면 다음을 수행합니다.

  1. Cloud Console에서 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 페이지 제목이 기존 로그 뷰어인 경우 업그레이드 드롭다운 목록을 클릭하고 새 로그 탐색기로 업그레이드를 선택합니다.

  3. 관리자 활동 및 데이터 액세스 감사 로그만 보려면 쿼리 빌더에 다음 쿼리를 입력한 다음 쿼리 실행을 클릭합니다.

    logName=("RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Factivity" OR "RESOURCE_TYPE/RESOURCE_ID/logs/cloudaudit.googleapis.com%2Fdata_access")
    

    다음 값을 바꿉니다.

    • RESOURCE_TYPE: 감사 로그를 나열하는 리소스 유형입니다. projects, folders, organizations을 사용합니다.
    • RESOURCE_ID: 리소스 ID입니다.
  4. 문제를 해결할 요청에 해당하는 감사 로그 항목을 찾습니다. 로그 탐색기를 사용하여 특정 로그 항목을 찾는 방법은 로그 탐색기 사용을 참조하세요.

  5. 로그 항목의 요약 열에서 IAM을 클릭한 후 액세스 문제 해결을 클릭합니다.

    Policy Troubleshooter는 로그 항목의 정보를 사용하여 액세스 문제를 해결한 다음 결과를 표시합니다. 추가 컨텍스트는 액세스 요약 바로 아래에 나열됩니다. Policy Troubleshooter 결과 페이지에 대해 자세히 알아보려면 이 페이지의 액세스 문제 해결을 참조하세요.

  6. 선택사항: 조건부 역할 결합이 포함된 다른 요청의 문제를 해결하려면 로그 탐색기 페이지로 돌아가서 이전 단계를 반복합니다.

다음 단계