유효한 IAM 정책 보기

IAM의 유효한 정책에서는 리소스 계층 구조의 모든 상위 정책과 하위 정책이 리소스에 상속되는 방식을 설명합니다.

Cloud 애셋 인벤토리를 통한 검색은 허용 정책에만 지원됩니다. 다음과 같은 형태의 액세스 제어는 지원되지 않습니다.

시작하기 전에

  1. Cloud 애셋 인벤토리 명령어를 실행할 프로젝트에서 Cloud 애셋 인벤토리 API를 사용 설정합니다.

    Cloud Asset Inventory API 사용 설정

  2. 계정에 Cloud 애셋 인벤토리 API를 호출할 수 있는 올바른 역할이 있는지 확인합니다. 각 호출 유형에 대한 개별 권한은 권한을 참조하세요.

리소스에 효과적인 정책 보기

gcloud

gcloud asset get-effective-iam-policy \
    --scope=SCOPE_PATH \
    --names=ASSET_NAME_1,ASSET_NAME_2,...

다음 값을 제공합니다.

  • SCOPE_PATH: 다음 값 중 하나를 사용합니다.

    허용되는 값은 다음과 같습니다.

    • projects/PROJECT_ID: 여기서 PROJECT_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 프로젝트의 ID입니다.
    • projects/PROJECT_NUMBER: 여기서 PROJECT_NUMBER는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 프로젝트의 번호입니다.

      Google Cloud 프로젝트 번호를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔에서 시작하기 페이지로 이동합니다.

        시작하기로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다. 프로젝트 이름, 프로젝트 번호, 프로젝트 ID가 시작하기 제목 근처에 표시됩니다.

        리소스가 최대 4,000개까지 표시됩니다. 원하는 프로젝트가 표시되지 않으면 리소스 관리 페이지로 이동하여 해당 프로젝트 이름을 사용하여 목록을 필터링합니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID. 여기서 FOLDER_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 폴더의 ID입니다.

      Google Cloud 폴더 ID를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택합니다.
      4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      여기서 TOP_LEVEL_FOLDER_NAME은 폴더 이름과 부분 또는 전체 문자열이 일치하는 값입니다. 발견된 폴더에 대한 자세한 정보를 보려면 --format 플래그를 삭제합니다.

      이전 명령어는 폴더 내 하위 폴더의 ID를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID. 여기서 ORGANIZATION_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 조직의 ID입니다.

      Google Cloud 조직 ID를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택합니다.
      4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_NAME_#: 쉼표로 구분된 애셋 전체 이름 목록입니다.

배치 하나에서 최대 20개 애셋의 정책을 검색할 수 있습니다.

모든 옵션은 gcloud CLI 참조를 확인하세요.

다음 명령어를 실행하여 ID가 my-organization-id인 조직에서 상속된 my-instance Compute Engine 인스턴스의 효과적인 IAM 정책을 봅니다.

Google Cloud 조직 ID를 찾는 방법

Google Cloud 콘솔

Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔로 이동합니다.

    Google Cloud 콘솔로 이동

  2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
  3. 목록 상자에서 조직을 선택합니다.
  4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

gcloud CLI

다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
gcloud asset get-effective-iam-policy \
    --scope=organizations/my-organization-id \
    --names=//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance

응답 예시

policyResults:
- fullResourceName: //compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance
  policies:
  - attachedResource: //cloudresourcemanager.googleapis.com/projects/my-project
    policy:
      bindings:
      - members:
        - user:alex@example.com
        - user:bola@example.com
        role: roles/cloudkms.admin
      - members:
        - serviceAccount:000000000000-compute@developer.gserviceaccount.com
        role: roles/editor
  - attachedResource: //cloudresourcemanager.googleapis.com/folders/000000000000
    policy:
      bindings:
      - members:
        - user:cruz@example.com
        role: roles/resourcemanager.folderAdmin
      - members:
        - user:dani@example.com
        role: roles/resourcemanager.folderEditor
  - attachedResource: //cloudresourcemanager.googleapis.com/organizations/0000000000000
    policy:
      bindings:
      - members:
        - user:hao@example.com
        role: organizations/0000000000000/roles/CustomProjectAdmin
      - members:
        - serviceAccount:000000000000@cloudservices.gserviceaccount.com
        - user:ira@example.com
        - user:jie@example.com
        role: roles/accesscontextmanager.policyAdmin

REST

HTTP 메서드 및 URL:

POST https://cloudasset.googleapis.com/v1/SCOPE_PATH/effectiveIamPolicies:batchGet

JSON 요청 본문:

{
  "names": [
    "ASSET_NAME_1",
    "ASSET_NAME_2",
    "..."
  ]
}

다음 값을 제공합니다.

  • SCOPE_PATH: 다음 값 중 하나를 사용합니다.

    허용되는 값은 다음과 같습니다.

    • projects/PROJECT_ID: 여기서 PROJECT_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 프로젝트의 ID입니다.
    • projects/PROJECT_NUMBER: 여기서 PROJECT_NUMBER는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 프로젝트의 번호입니다.

      Google Cloud 프로젝트 번호를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 프로젝트 번호를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔에서 시작하기 페이지로 이동합니다.

        시작하기로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택한 후 프로젝트 이름을 검색합니다. 프로젝트 이름, 프로젝트 번호, 프로젝트 ID가 시작하기 제목 근처에 표시됩니다.

        리소스가 최대 4,000개까지 표시됩니다. 원하는 프로젝트가 표시되지 않으면 리소스 관리 페이지로 이동하여 해당 프로젝트 이름을 사용하여 목록을 필터링합니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 프로젝트 번호를 검색할 수 있습니다.

      gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    • folders/FOLDER_ID. 여기서 FOLDER_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 폴더의 ID입니다.

      Google Cloud 폴더 ID를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 폴더 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택합니다.
      4. 폴더 이름을 검색합니다. 폴더 이름 옆에 폴더 ID가 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 조직 수준에 있는 Google Cloud 폴더 ID를 검색할 수 있습니다.

      gcloud resource-manager folders list \
          --organization=$(gcloud organizations describe ORGANIZATION_NAME \
            --format="value(name.segment(1))") \
          --filter='"DISPLAY_NAME":"TOP_LEVEL_FOLDER_NAME"' \
          --format="value(ID)"

      여기서 TOP_LEVEL_FOLDER_NAME은 폴더 이름과 부분 또는 전체 문자열이 일치하는 값입니다. 발견된 폴더에 대한 자세한 정보를 보려면 --format 플래그를 삭제합니다.

      이전 명령어는 폴더 내 하위 폴더의 ID를 반환하지 않습니다. 이렇게 하려면 최상위 폴더의 ID를 사용하여 다음 명령어를 실행합니다.

      gcloud resource-manager folders list --folder=FOLDER_ID
    • organizations/ORGANIZATION_ID. 여기서 ORGANIZATION_ID는 효과적인 IAM 정책을 확인할 수 있는 최상위 수준인 조직의 ID입니다.

      Google Cloud 조직 ID를 찾는 방법

      Google Cloud 콘솔

      Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.

      1. Google Cloud 콘솔로 이동합니다.

        Google Cloud 콘솔로 이동

      2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
      3. 목록 상자에서 조직을 선택합니다.
      4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

      gcloud CLI

      다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

      gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"
  • ASSET_NAME_#: 애셋 전체 이름 배열입니다.

배치 하나에서 최대 20개 애셋의 정책을 검색할 수 있습니다.

모든 옵션은 REST 참조를 확인하세요.

명령어 예시

다음 명령어 중 하나를 실행하여 ID가 my-organization-id인 조직에서 상속된 my-instance Compute Engine 인스턴스의 효과적인 IAM 정책을 봅니다.

Google Cloud 조직 ID를 찾는 방법

Google Cloud 콘솔

Google Cloud 조직 ID를 찾으려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔로 이동합니다.

    Google Cloud 콘솔로 이동

  2. 메뉴 바에서 전환 목록 상자를 클릭합니다.
  3. 목록 상자에서 조직을 선택합니다.
  4. 모두 탭을 클릭합니다. 조직 ID가 조직 이름 옆에 표시됩니다.

gcloud CLI

다음 명령어를 사용하여 Google Cloud 조직 ID를 검색할 수 있습니다.

gcloud organizations describe ORGANIZATION_NAME --format="value(name.segment(1))"

cURL(Linux, macOS, Cloud Shell)

curl -X POST \
     -H "X-HTTP-Method-Override: GET" \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d '{
            "names": [
              "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"
            ]
          }' \
     https://cloudasset.googleapis.com/v1/organizations/my-organization-id/effectiveIamPolicies:batchGet

PowerShell(Windows)

$cred = gcloud auth print-access-token

$headers = @{ 
  "X-HTTP-Method-Override" = "GET";
  "Authorization" = "Bearer $cred"
}


$body = @"
{
  "names": [
    "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/my-instance"
  ]
}
"@

Invoke-WebRequest `
  -Method POST `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body $body `
  -Uri "https://cloudasset.googleapis.com/v1/organizations/my-organization-id/effectiveIamPolicies:batchGet" | Select-Object -Expand Content

응답 예시

{
  "policyResults": [
    {
      "fullResourceName": "//compute.googleapis.com/projects/my-project/zones/us-central1-a/instances/instance-1",
      "policies": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/my-project",
          "policy": {
            "bindings": [
              {
                "role": "roles/cloudkms.admin",
                "members": [
                  "user:alex@example.com",
                  "user:bola@example.com"
                ]
              },
              {
                "role": "roles/editor",
                "members": [
                  "serviceAccount:000000000000-compute@developer.gserviceaccount.com"
                ]
              }
            ]
          }
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/000000000000",
          "policy": {
            "bindings": [
              {
                "role": "roles/resourcemanager.folderAdmin",
                "members": [
                  "user:cruz@example.com"
                ]
              },
              {
                "role": "roles/resourcemanager.folderEditor",
                "members": [
                  "user:dani@example.com"
                ]
              }
            ]
          }
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/000000000000",
          "policy": {
            "bindings": [
              {
                "role": "organizations/1060291660910/roles/CustomProjectAdmin",
                "members": [
                  "user:hao@example.com"
                ]
              },
              {
                "role": "roles/accesscontextmanager.policyAdmin",
                "members": [
                  "serviceAccount:000000000000@cloudservices.gserviceaccount.com",
                  "user:ira@example.com",
                  "user:jie@example.com"
                ]
              }
            ]
          }
        }
      ]
    }
  ]
}