조직 정책 분석

이 페이지에서는 조직 정책 설정을 분석하여 어떤 리소스가 어떤 조직 정책에 해당하는지 확인하는 방법을 보여줍니다. 조직 정책용 정책 분석자를 사용하면 분석 쿼리를 만들어 커스텀 및 사전 정의된 조직 정책에 대한 정보를 가져올 수 있습니다.

분석 쿼리는 범위와 제약조건으로 구성됩니다.

  • 제약조건: 제약조건의 리소스 이름을 지정합니다.
  • 범위: 분석 범위를 지정할 조직을 지정합니다. 이 범위에 정의된 제약조건이 있는 모든 조직 정책이 분석에 포함됩니다.

조직 정책에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요. 커스텀 제약조건을 만드는 방법에 대한 자세한 내용은 커스텀 제약조건 만들기 및 관리를 참조하세요.

시작하기 전에

Cloud Asset API 사용 설정

API 사용 설정

쿼리를 전송하는 데 사용되는 프로젝트 또는 조직에서 API를 사용 설정해야 합니다. 이것은 쿼리 범위를 지정하는 리소스와 동일할 필요가 없습니다.

필수 역할 및 권한

조직 정책 분석을 실행하는 데 필요한 권한을 얻으려면 관리자에게 분석을 수행할 조직 리소스에 다음 IAM 역할을 부여해 달라고 요청하세요.

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

이러한 사전 정의된 역할에는 조직 정책 분석을 실행하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.

필수 권한

조직 정책 분석을 실행하려면 다음 권한이 필요합니다.

  • 분석을 수행하려면 다음 안내를 따르세요.
    • cloudasset.assets.analyzeOrgPolicy
    • cloudasset.assets.searchAllResources
    • cloudasset.assets.searchAllIamPolicies
  • 커스텀 제약조건을 보려면 다음 안내를 따르세요. orgpolicy.customConstraints.get

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

구성된 정책 분석

제약조건 및 해당 제약조건이 적용되는 선택적 조건으로부터 조직 정책이 형성됩니다. 정책 분석자를 사용하여 특정 제약조건이 있는 조직 정책 및 해당 정책이 연결된 리소스의 목록을 반환할 수 있습니다.

정책 분석자는 쿼리 범위에서 감지된 각 조직 정책에 대해 결과 항목을 반환합니다. 결과 항목에는 다음 필드가 포함됩니다.

  • consolidatedPolicy: 조직 정책이 연결된 리소스 및 계층 구조 평가 규칙을 기준으로 해당 리소스에 적용되는 유효한 정책입니다.

  • folders: 조직 정책이 연결된 리소스의 상위 항목인 폴더 리소스의 ID입니다.

  • organization: 조직 정책이 연결된 리소스의 상위 항목인 조직 리소스의 ID입니다.

  • policyBundle: 위의 리소스에 연결된 완전히 구성된 조직 정책 및 리소스 계층 구조에서 상위에 정의된 조직 정책입니다.

콘솔

  1. Google Cloud 콘솔에서 정책 분석기 페이지로 이동합니다.

    정책 분석기로 이동

  2. 조직 정책 분석 섹션에서 내 조직의 리소스에 대한 조직 정책 구성 방법이라는 창을 찾고 이 창에서 쿼리 만들기를 클릭합니다.

  3. 쿼리 조직 선택 상자에서 조직 정책을 분석하려는 조직을 선택합니다.

  4. 분석할 제약조건 유형을 선택합니다. 사전 정의된 제약조건의 경우 기본 제공 제약조건을 선택합니다. 커스텀 제약조건의 경우 커스텀 제약조건을 선택합니다.

  5. 분석할 제약조건의 이름을 입력합니다. 분석 중인 제약조건 유형의 프리픽스는 이미 포함됩니다. 예를 들어 사전 정의된 도메인 제한 제약조건의 경우 iam.allowedPolicyMemberDomains를 입력하고 커스텀 제약조건에 대해 disableGkeAutoUpgrade와 같은 해당 이름을 입력합니다.

  6. 쿼리 실행을 클릭합니다. 보고서 페이지에는 사용자가 입력한 쿼리 매개변수와 이 제약조건이 직접 적용되는 모든 리소스의 결과 테이블이 표시됩니다.

gcloud

조직 내에서 조직 정책 제약조건이 적용되는 방식을 분석하려면 gcloud beta asset analyze-org-policies 명령어를 사용합니다.

gcloud beta asset analyze-org-policies \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_POLICIES \
    --filter=FILTER_QUERY

다음을 바꿉니다.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • LIMIT_POLICIES: 조회하려는 결과 항목 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다.

  • FILTER_QUERY: 필터링 표현식과 일치하는 정책만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 유일한 필드는 consolidated_policy.attached_resource입니다. 예를 들어 consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890"은 프로젝트 ID가 1234567890인 프로젝트에 연결된 정책만 반환합니다.

YAML 응답은 다음과 비슷합니다.

샘플 YAML 응답

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - enforce: true
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  reset: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true

REST

조직 내에서 조직 정책 제약조건이 적용되는 방식을 분석하려면 Cloud Asset API의 analyzeOrgPolicies 메서드를 사용합니다.

HTTP 메서드 및 URL:

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicies

JSON 요청 본문:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': 'FILTER_QUERY',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • FILTER_QUERY: 필터링 표현식과 일치하는 정책만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 유일한 필드는 consolidated_policy.attached_resource입니다. 예를 들어 consolidated_policy.attached_resource="//cloudresourcemanager.googleapis.com/projects/1234567890"은 프로젝트 ID가 1234567890인 프로젝트에 연결된 정책만 반환합니다.

  • PAGE_SIZE: 조회하려는 페이지당 결과 항목 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다. 요청에서 이 플래그를 설정하면 총 결과 항목 수가 PAGE_SIZE보다 클 때 nextPageToken 값이 반환됩니다.

  • PAGE_TOKEN: page_size 플래그를 포함하는 최초 요청 이후의 요청에서만 설정해야 합니다. 이전 응답에서 수신된 nextPageToken 값을 사용하여 특정 결과 페이지를 반환할 수 있습니다.

JSON 응답은 다음과 비슷합니다.

샘플 JSON 응답

{
  "orgPolicyResults": [
    {
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012",
        "rules": [
          {
            "values": {
              "allowedValues": [
                "C0265whk2"
              ]
            }
          },
          {
            "values": {
              "allowedValues": [
                "C03kd36xr"
              ]
            }
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C03kd36xr"
                ]
              }
            }
          ],
          "inheritFromParent": true,
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/123456789012"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C0265whk2"
                ]
              }
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
        }
      ]
    },
    {
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
        "rules": [
          {
            "values": {
              "allowedValues": [
                "C0265whk2"
              ]
            }
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123",
          "rules": [
            {
              "values": {
                "allowedValues": [
                  "C0265whk2"
                ]
              }
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/234567890123"
        }
      ]
    }
  ]
  "constraint": {
    "googleDefinedConstraint": {
      "name": "constraints/iam.allowedPolicyMemberDomains",
      "displayName": "Domain restricted sharing",
      "description": "This list constraint defines one or more Cloud Identity or Google Workspace customer IDs whose principals can be added to IAM policies. \u003cbr\u003eBy default, all user identities are allowed to be added to IAM policies. Only allowed values can be defined in this constraint, denied values are not supported. \u003cbr\u003eIf this constraint is active, only principals that belong to the allowed customer IDs can be added to IAM policies.",
      "constraintDefault": "ALLOW",
      "listConstraint": {}
    }
  }
}

컨테이너 분석

이 컨텍스트의 컨테이너는 프로젝트, 폴더, 조직 리소스입니다. 정책 분석자를 사용하면 특정 제약조건이 적용된 조직 정책이 있는 모든 컨테이너 목록을 반환할 수 있습니다. 정책 분석자는 각 컨테이너의 전체 이름 및
계층 구조에서 컨테이너 상위 요소도 반환합니다.

정책 분석자는 쿼리 범위에서 감지된 각 컨테이너에 대해 결과 항목을 반환합니다. 결과 항목에는 다음 필드가 포함됩니다.

  • consolidatedPolicy: 조직 정책이 연결된 컨테이너 및 계층 구조 평가 규칙을 기준으로 해당 컨테이너에 적용되는 유효한 정책입니다.

  • fullResourceName: 컨테이너의 전체 이름입니다.

  • parent: 이 컨테이너의 상위 항목의 전체 리소스 이름입니다.

  • policyBundle: 컨테이너에 직접 구성된 조직 정책(있는 경우) 및 리소스 계층 구조에서 컨테이너 상위에 정의된 조직 정책입니다.

콘솔

  1. Google Cloud 콘솔에서 정책 분석기 페이지로 이동합니다.

    정책 분석기로 이동

  2. 조직 정책 분석 섹션에서 조직 정책 제약조건이 적용된 컨테이너라는 창을 찾고 이 창에서 쿼리 만들기를 클릭합니다.

  3. 쿼리 조직 선택 상자에서 조직 정책을 분석하려는 조직을 선택합니다.

  4. 분석할 제약조건 유형을 선택합니다. 사전 정의된 제약조건의 경우 기본 제공 제약조건을 선택합니다. 커스텀 제약조건의 경우 커스텀 제약조건을 선택합니다.

  5. 분석할 제약조건의 이름을 입력합니다. 분석 중인 제약조건 유형의 프리픽스는 이미 포함됩니다. 예를 들어 사전 정의된 도메인 제한 제약조건의 경우 iam.allowedPolicyMemberDomains를 입력하고 커스텀 제약조건에 대해 disableGkeAutoUpgrade와 같은 해당 이름을 입력합니다.

  6. 쿼리 실행을 클릭합니다. 보고서 페이지에 사용자가 입력한 쿼리 매개변수와 이 제약조건이 적용되거나 상속된 모든 컨테이너의 결과 테이블이 표시됩니다.

gcloud

조직 내에서 조직 정책 제약조건이 컨테이너에 적용되는 방식을 분석하려면 gcloud beta asset analyze-org-policy-governed-containers 명령어를 사용합니다.

gcloud beta asset analyze-org-policy-governed-containers \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_CONTAINERS \
    --filter=FILTER_QUERY

다음을 바꿉니다.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • LIMIT_CONTAINERS: 조회하려는 결과 항목 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다.

  • FILTER_QUERY: 필터링 표현식과 일치하는 컨테이너만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 유일한 필드는 parent입니다. 예를 들어 parent="//cloudresourcemanager.googleapis.com/organizations/012345678901"은 조직 ID가 012345678901인 조직의 하위 요소인 컨테이너만 반환합니다.

YAML 응답은 다음과 비슷합니다.

샘플 YAML 응답

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  rules:
  - values:
      allowedValues:
      - projects/donghe-project1/zones/us-central1-a/instances/instance-1
fullResourceName: //cloudresourcemanager.googleapis.com/projects/donghe-project1
parent: //cloudresourcemanager.googleapis.com/folders/86513245445
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/donghe-project1
  inheritFromParent: true
  rules:
  - values:
      allowedValues:
      - projects/donghe-project1/zones/us-central1-a/instances/instance-1
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  rules:
  - denyAll: true
fullResourceName: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
parent: //cloudresourcemanager.googleapis.com/organizations/474566717491
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  attachedResource: //cloudresourcemanager.googleapis.com/projects/jeffreyai-prj01-on-ipa1
  inheritFromParent: true
  rules:
  - denyAll: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - values:
      allowedValues:
      - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1
fullResourceName: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
parent: //cloudresourcemanager.googleapis.com/folders/666681422980
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-1-364621
  rules:
  - values:
      allowedValues:
      - projects/opa-test-project-1-364621/zones/us-central1-a/instances/instance-1

REST

조직 내에서 조직 정책 제약조건이 컨테이너에 적용되는 방식을 분석하려면 Cloud Asset API의 analyzeOrgPolicyGovernedContainers 메서드를 사용합니다.

HTTP 메서드 및 URL:

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedContainers

JSON 요청 본문:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': '"FILTER_QUERY"',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • FILTER_QUERY: 필터링 표현식과 일치하는 컨테이너만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 유일한 필드는 parent입니다. 예를 들어 parent="//cloudresourcemanager.googleapis.com/organizations/012345678901"은 조직 ID가 012345678901인 조직의 하위 요소인 컨테이너만 반환합니다.

  • PAGE_SIZE: 조회하려는 결과 항목의 페이지 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다. 요청에서 이 플래그를 설정하면 총 결과 항목 수가 PAGE_SIZE보다 클 때 nextPageToken 값이 반환됩니다.

  • PAGE_TOKEN: page_size 플래그를 포함하는 최초 요청 이후의 요청에서만 설정해야 합니다. 이전 응답에서 수신된 nextPageToken 값을 사용하여 특정 결과 페이지를 반환할 수 있습니다.

JSON 응답은 다음과 비슷합니다.

샘플 JSON 응답

{
  "governedContainers": [
    {
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
      "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678",
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980"
        }
      ]
    },
    {
      "fullResourceName": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-1",
      "parent": "//cloudresourcemanager.googleapis.com/folders/513502730678",
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/513502730678"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/666681422980"
        }
      ]
    }
  ]
  "constraint": {
    "googleDefinedConstraint": {
      "name": "constraints/compute.requireOsLogin",
      "displayName": "Require OS Login",
      "description": "This boolean constraint, when set to \u003ccode\u003etrue\u003c/code\u003e, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. \u003cbr\u003eBy default, the OS Login feature is disabled on Compute Engine projects.\u003cbr\u003eGKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.",
      "constraintDefault": "ALLOW",
      "booleanConstraint": {}
    }
  }
}

애셋 분석

이 컨텍스트에서 애셋은 Google Cloud 리소스 또는 Identity and Access Management(IAM) 허용 정책입니다. 정책 분석자를 사용하면 특정 제약조건이 적용된 조직 정책이 있는 모든 애셋 목록을 반환할 수 있습니다. 커스텀 제약조건과 다음과 같은 사전 정의된 제약조건이 지원됩니다.

  • storage.uniformBucketLevelAccess
  • iam.disableServiceAccountKeyCreation
  • iam.allowedPolicyMemberDomains
  • compute.vmExternalIpAccess
  • appengine.enforceServiceAccountActAsCheck
  • gcp.resourceLocations
  • compute.trustedImageProjects
  • compute.skipDefaultNetworkCreation
  • compute.requireOsLogin
  • compute.disableNestedVirtualization

정책 분석자는 각 애셋의 전체 이름, 계층 구조에서 애셋의 상위 요소, 계층 구조에서 해당 애셋 위에 있는 모든 상위 프로젝트, 폴더, 조직 리소스를 반환합니다.

정책 분석자는 쿼리 범위에서 감지된 각 애셋에 대해 결과 항목을 반환합니다.

리소스의 결과 항목에는 다음 필드가 포함됩니다.

  • consolidatedPolicy: 조직 정책이 연결된 리소스 및 계층 구조 평가 규칙을 기준으로 해당 리소스에 적용되는 유효한 정책입니다.

  • folders: 조직 정책이 연결된 리소스를 포함하는 폴더 리소스의 ID입니다.

  • fullResourceName: 리소스의 전체 리소스 이름입니다.

  • organization: 리소스가 포함된 조직의 상대적 리소스 이름입니다.

  • parent: 리소스의 상위 항목에 대한 전체 리소스 이름입니다.

  • project: 리소스가 포함된 프로젝트의 ID입니다.

  • policyBundle: 위의 리소스에 연결된 완전히 구성된 조직 정책 및 리소스 계층 구조에서 상위에 정의된 조직 정책입니다.

허용 정책의 결과 항목에는 다음 필드가 포함됩니다.

  • consolidatedPolicy: 조직 정책이 연결된 리소스 및 계층 구조 평가 규칙을 기준으로 해당 리소스에 적용되는 유효한 정책입니다.

  • attachedResource: 허용 정책이 연결된 리소스의 전체 이름입니다.

  • folders: 허용 정책을 포함하는 폴더의 상대적 리소스 이름입니다.

  • organization: 허용 정책이 포함된 조직의 상대적 리소스 이름입니다.

  • policy: 허용 정책입니다.

  • project: 허용 정책이 포함된 프로젝트의 상대적 리소스 이름입니다.

  • policyBundle: 위의 리소스에 연결된 완전히 구성된 조직 정책 및 리소스 계층 구조에서 상위에 정의된 조직 정책입니다.

콘솔

  1. Google Cloud 콘솔에서 정책 분석기 페이지로 이동합니다.

    정책 분석기로 이동

  2. 조직 정책 분석 섹션에서 조직 정책 제약조건이 적용된 애셋이라는 창을 찾고 이 창에서 쿼리 만들기를 클릭합니다.

  3. 쿼리 조직 선택 상자에서 조직 정책을 분석하려는 조직을 선택합니다.

  4. 분석할 제약조건 유형을 선택합니다. 사전 정의된 제약조건의 경우 기본 제공 제약조건을 선택합니다. 커스텀 제약조건의 경우 커스텀 제약조건을 선택합니다.

  5. 분석할 제약조건의 이름을 입력합니다. 분석 중인 제약조건 유형의 프리픽스는 이미 포함됩니다. 예를 들어 사전 정의된 버킷 수준의 액세스 제약조건의 경우 storage.uniformBucketLevelAccess를 입력하고 커스텀 제약조건의 경우 disableGkeAccess와 같은 해당 이름을 입력합니다.

  6. 쿼리 실행을 클릭합니다. 보고서 페이지에 사용자가 입력한 쿼리 매개변수와 이 제약조건이 적용되거나 상속된 모든 애셋의 결과 테이블이 표시됩니다.

gcloud

조직 정책 제약조건이 조직 내의 애셋에 적용되는 방식을 분석하려면 gcloud beta asset analyze-org-policy-governed-assets 명령어를 사용합니다.

gcloud beta asset analyze-org-policy-governed-assets \
    --constraint=CONSTRAINT_NAME  \
    --scope=organizations/ORGANIZATION_ID \
    --limit=LIMIT_ASSETS \
    --filter=FILTER_QUERY

다음을 바꿉니다.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • LIMIT_ASSETS: 조회하려는 결과 항목 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다.

  • FILTER_QUERY: 필터링 표현식과 일치하는 애셋만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 필드는 governed_resource.folders, governed_resource.project, governed_iam_policy.folders, governed_iam_policy.project입니다. 예를 들어 governed_resource.project="projects/1234567890"은 프로젝트 ID가 1234567890인 프로젝트에 연결된 애셋만 반환합니다.

YAML 응답은 다음과 비슷합니다.

샘플 YAML 응답

---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  rules:
  - enforce: false
governedResource:
  folders:
  - folders/513502730678
  - folders/666681422980
  fullResourceName: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1
  project: projects/892625391619
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  attachedResource: //cloudresourcemanager.googleapis.com/projects/opa-test-project-2
  reset: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  rules:
  - enforce: false
governedResource:
  folders:
  - folders/800636178739
  - folders/408342778736
  fullResourceName: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1
  project: projects/761097189269
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  attachedResource: //cloudresourcemanager.googleapis.com/projects/project2-244918
  rules:
  - enforce: false
- appliedResource: //cloudresourcemanager.googleapis.com/folders/408342778736
  attachedResource: //cloudresourcemanager.googleapis.com/folders/408342778736
  rules:
  - condition:
      description: cond-desc1
      expression: resource.matchTag("474566717491/env", "prod")
      title: cond-title1
    enforce: false
  - enforce: true
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
---
consolidatedPolicy:
  appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true
governedResource:
  fullResourceName: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup/nodePools/default-pool
  organization: organizations/474566717491
  parent: //container.googleapis.com/projects/probe-per-rt-project/zones/us-west1-a/clusters/test-cluster-for-backup
  project: projects/896190383908
policyBundle:
- appliedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  attachedResource: //cloudresourcemanager.googleapis.com/organizations/474566717491
  rules:
  - enforce: true

REST

조직 내에서 조직 정책 제약조건이 애셋에 적용되는 방식을 분석하려면 Cloud Asset API의 analyzeOrgPolicyGovernedAssets 메서드를 사용합니다.

HTTP 메서드 및 URL:

GET https://cloudasset.googleapis.com/v1/organizations/ORGANIZATION_ID:analyzeOrgPolicyGovernedAssets

JSON 요청 본문:

JSON_REQUEST="{
  'constraint': 'CONSTRAINT_NAME',
  'filter': 'FILTER_QUERY',
  'page_size': PAGE_SIZE,
  'page_token': PAGE_TOKEN
}"

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 리소스의 ID입니다. 조직 ID 찾기에 대한 자세한 내용은 조직 만들기 및 관리를 참조하세요.

  • CONSTRAINT_NAME: 분석할 조직 정책 제약조건의 이름입니다. 제약조건 목록은 조직 정책 제약조건을 참조하세요.

  • FILTER_QUERY: 필터링 표현식과 일치하는 애셋만 표시하는 필터 쿼리입니다. 필터링에 사용할 수 있는 필드는 governed_resource.folders, governed_resource.project, governed_iam_policy.folders, governed_iam_policy.project입니다. 예를 들어 governed_resource.project="projects/1234567890"은 프로젝트 ID가 1234567890인 프로젝트에 연결된 애셋만 반환합니다.

  • PAGE_SIZE: 조회하려는 결과 항목의 페이지 수입니다. 항목을 무제한으로 보려면 unlimited를 입력합니다. 요청에서 이 플래그를 설정하면 총 결과 항목 수가 PAGE_SIZE보다 클 때 nextPageToken 값이 반환됩니다.

  • PAGE_TOKEN: page_size 플래그를 포함하는 최초 요청 이후의 요청에서만 설정해야 합니다. 이전 응답에서 수신된 nextPageToken 값을 사용하여 특정 결과 페이지를 반환할 수 있습니다.

JSON 응답은 다음과 비슷합니다.

샘플 JSON 응답

{
  "governedAssets": [
    {
      "governedResource": {
        "fullResourceName": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1/nodePools/default-pool",
        "parent": "//container.googleapis.com/projects/opa-test-project-2/zones/us-central1-c/clusters/opa-test-project-2-cluster-1",
        "project": "projects/892625391619",
        "folders": [
          "folders/513502730678",
          "folders/666681422980"
        ],
        "organization": "organizations/474566717491"
      },
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2",
          "reset": true,
          "appliedResource": "//cloudresourcemanager.googleapis.com/projects/opa-test-project-2"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491"
        }
      ]
    },
    {
      "governedResource": {
        "fullResourceName": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool",
        "parent": "//container.googleapis.com/projects/project2-244918/zones/us-central1-c/clusters/cluster-1",
        "project": "projects/761097189269",
        "folders": [
          "folders/800636178739",
          "folders/408342778736"
        ],
        "organization": "organizations/474566717491"
      },
      "consolidatedPolicy": {
        "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918",
        "rules": [
          {
            "enforce": false
          }
        ],
        "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918"
      },
      "policyBundle": [
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918",
          "rules": [
            {
              "enforce": false
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/projects/project2-244918"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736",
          "rules": [
            {
              "enforce": false,
              "condition": {
                "expression": "resource.matchTag(\"474566717491/env\", \"prod\")",
                "title": "cond-title1",
                "description": "cond-desc1"
              }
            },
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/folders/408342778736"
        },
        {
          "attachedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491",
          "rules": [
            {
              "enforce": true
            }
          ],
          "appliedResource": "//cloudresourcemanager.googleapis.com/organizations/474566717491"
        }
      ]
    }
  ]
  "constraint": {
    "customConstraint": {
      "name": "organizations/474566717491/customConstraints/custom.disableGkeAutoUpgrade",
      "resourceTypes": [
        "container.googleapis.com/NodePool"
      ],
      "methodTypes": [
        "CREATE",
        "UPDATE"
      ],
      "condition": "resource.management.autoUpgrade == false",
      "actionType": "ALLOW",
      "displayName": "Disable GKE auto upgrade",
      "description": "Only allow GKE NodePool resource create or updates if AutoUpgrade is not enabled"
    }
  }
}

다음 단계