맞춤 조직 정책 만들기 및 관리

Google Cloud 조직 정책을 사용하면 조직 리소스를 중앙에서 프로그래매틱 방식으로 제어할 수 있습니다. 조직 정책 관리자Google Cloud 리소스 계층 구조에서 Google Cloud 리소스 및 이러한 리소스의 하위 요소에 적용되는 제약조건이라는 제한사항 집합인 조직 정책을 정의할 수 있습니다. 또한, 조직, 폴더, 프로젝트 수준에서 조직 정책을 시행하는 것이 가능합니다.

조직 정책은 다양한 Google Cloud 서비스에 대한 사전 정의된 제약조건을 제공합니다. 그러나 조직 정책으로 보다 세밀하게 제어하려면 커스텀 조직 정책을 만들면 됩니다.

이 페이지에서는 커스텀 조직 정책을 보고, 만들고, 관리하는 방법을 설명합니다. 커스텀 조직 정책은 조직 정책으로 제한되는 특정 필드에 대해 보다 세부적이고 맞춤설정 가능한 제어를 제공하기 위해 관리자에 의해 생성됩니다.

시작하기 전에

조직 정책 및 제약조건의 정의 및 작동 방식에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.

필요한 역할

조직 정책을 관리하는 데 필요한 권한을 얻으려면 관리자에게 조직의 조직 정책 관리자(roles/orgpolicy.policyAdmin) IAM 역할을 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

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

필수 권한

조직 정책을 관리하려면 다음 권한이 필요합니다.

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

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

커스텀 제약조건

커스텀 제약조건은 제약조건이 적용되는 리소스, 메서드, 조건, 작업을 지정하는 YAML 파일로 생성됩니다. 이것들은 조직 정책을 시행하는 서비스에 따라 달라집니다. 커스텀 제약조건의 조건은 Common Expression Language(CEL)를 사용하여 정의됩니다.

커스텀 제약조건 설정

커스텀 제약조건을 만들고 Google Cloud 콘솔 또는 Google Cloud CLI를 사용해서 조직 정책에 사용하도록 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 페이지 상단의 프로젝트 선택 도구를 선택합니다.

  3. 프로젝트 선택 도구에서 조직 정책을 설정할 리소스를 선택합니다.

  4. 커스텀 제약조건을 클릭합니다.

  5. 표시 이름 상자에 제약조건에 대해 사용자 친화적인 이름을 입력합니다. 이 필드의 최대 길이는 200자(영문 기준)입니다. 오류 메시지에 노출될 수 있으므로 표시 이름에 개인 식별 정보 또는 민감한 정보를 사용하지 마세요.

  6. 제약조건 ID 상자에 새 커스텀 제약조건에 사용하려는 이름을 입력합니다. 커스텀 제약조건은 custom.으로 시작해야 하며 대문자, 소문자 또는 숫자만 포함할 수 있습니다(예: custom.disableGkeAutoUpgrade). 이 필드의 최대 길이는 프리픽스를 제외하고 70자입니다(예: organizations/123456789/customConstraints/custom.). 오류 메시지에 노출될 수 있으므로 제약조건 ID에 개인 식별 정보 또는 민감한 정보를 포함하지 마세요.

  7. 설명 상자에 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대해 사용자 친화적인 설명을 입력합니다. 이 필드의 최대 길이는 2,000자(영문 기준)입니다. 오류 메시지에 노출될 수 있으므로 설명에 개인 식별 정보 또는 민감한 정보를 포함하지 마세요.

  8. 리소스 유형 상자에서 제한하려는 객체 및 필드가 포함된 Google Cloud REST 리소스 이름을 선택합니다(예: container.googleapis.com/NodePool). 리소스 유형별 커스텀 제약조건은 최대 20개입니다. 이미 20개의 커스텀 제약조건이 있는 리소스 유형에 대해 커스텀 제약조건을 만들려고 하면 작업이 실패합니다.

  9. 적용 방법 아래에서 REST CREATE 메서드에 제약조건을 적용할지 또는 CREATEUPDATE 메서드 모두에 제약조건을 적용할지를 선택합니다. 모든 Google Cloud 서비스가 두 메서드를 모두 지원하지는 않습니다. 각 서비스에 지원되는 메서드를 보려면 지원되는 서비스에서 해당 서비스를 찾으세요.

  10. 조건을 정의하려면 조건 수정을 클릭합니다.

    1. 조건 추가 패널에서 지원되는 서비스 리소스를 참조하는 CEL 조건을 만듭니다(예: resource.management.autoUpgrade == false). 이 필드의 최대 길이는 1000자(영문 기준)입니다. CEL 사용법에 대한 자세한 내용은 Common Expression Language를 참조하세요. 커스텀 제약조건에 사용할 수 있는 서비스 리소스에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참조하세요.

    2. 저장을 클릭합니다.

  11. 작업에서 위 조건이 충족될 경우 평가된 메서드를 허용하거나 거부할지를 선택합니다.

    거부 작업은 조건이 true로 평가될 때 리소스를 만들거나 업데이트하는 작업이 차단됨을 의미합니다.

    허용 작업은 조건이 true로 평가되는 경우에만 리소스를 만들거나 업데이트하는 작업이 허용됨을 의미합니다. 조건에 명시적으로 나열된 경우를 제외한 다른 모든 사례는 차단됩니다.

  12. 제약조건 만들기를 클릭합니다.

각 필드에 값을 입력하면 이 커스텀 제약조건에 해당하는 YAML 구성이 오른쪽에 표시됩니다.

gcloud

Google Cloud CLI를 사용하여 커스텀 제약조건을 만들려면 커스텀 제약조건에 대해 YAML 파일을 만듭니다.

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 ID(예: 123456789)

  • CONSTRAINT_NAME: 새 커스텀 제약조건에 사용하려는 이름입니다. 커스텀 제약조건은 custom.으로 시작해야 하며 대문자, 소문자 또는 숫자만 포함할 수 있습니다(예: custom.disableGkeAutoUpgrade). 이 필드의 최대 길이는 프리픽스를 제외하고 70자입니다(예: organizations/123456789/customConstraints/custom.).

  • RESOURCE_NAME: 제한하려는 객체 및 필드가 포함된 Google Cloud REST 리소스의 정규화된 이름입니다. 예를 들면 container.googleapis.com/NodePool입니다. 리소스 유형별 커스텀 제약조건은 최대 20개입니다. 이미 20개의 커스텀 제약조건이 있는 리소스 유형에 대해 커스텀 제약조건을 만들려고 하면 작업이 실패합니다. 커스텀 제약조건에 사용할 수 있는 서비스 리소스에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참조하세요.

  • METHOD1,METHOD2: 제약조건을 시행할 RESTful 메서드 목록입니다. CREATE 또는 CREATEUPDATE일 수 있습니다. 모든 Google Cloud 서비스가 두 메서드를 모두 지원하지는 않습니다. 각 서비스에 지원되는 메서드를 보려면 지원되는 서비스에서 해당 서비스를 찾으세요.

  • CONDITION: 지원되는 서비스 리소스를 참조하는 CEL 조건입니다(예: "resource.management.autoUpgrade == false"). 이 필드의 최대 길이는 1000자(영문 기준)입니다. CEL 사용법에 대한 자세한 내용은 Common Expression Language를 참조하세요.

  • ACTION: condition이 충족될 때 수행할 작업입니다. ALLOW 또는 DENY일 수 있습니다.

    거부 작업은 조건이 true로 평가되면 리소스를 만들거나 업데이트하는 작업이 차단됨을 의미합니다.

    허용 작업은 조건이 true로 평가되면 리소스를 만들거나 업데이트하는 작업이 허용됨을 의미합니다. 즉, 조건에 명시적으로 나열된 경우를 제외한 다른 모든 사례도 차단됩니다.

  • DISPLAY_NAME: 제약조건에 대한 사용자 친화적인 이름. 이 필드의 최대 길이는 200자(영문 기준)입니다.

  • DESCRIPTION: 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대한 사용자 친화적인 설명입니다. 이 필드의 최대 길이는 2,000자(영문 기준)입니다.

새 커스텀 제약조건의 YAML 파일을 만든 후에는 조직에서 조직 정책에 사용할 수 있도록 설정해야 합니다. 커스텀 제약조건을 설정하려면 gcloud org-policies set-custom-constraint 명령어를 사용합니다.

gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH를 커스텀 제약조건 파일의 전체 경로로 바꿉니다. 예를 들면 /home/user/customconstraint.yaml입니다. 완료되면 Google Cloud 조직 정책 목록에서 조직 정책으로 커스텀 제약조건을 사용할 수 있습니다. 커스텀 제약조건이 존재하는지 확인하려면 gcloud org-policies list-custom-constraints 명령어를 사용합니다.
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID를 조직 리소스 ID로 바꿉니다. 자세한 내용은 조직 정책 보기를 참조하세요.

커스텀 제약조건 업데이트

Google Cloud 콘솔에서 제약조건을 수정하거나 새 YAML 파일을 만들고 set-custom-constraint gcloud CLI 명령어를 다시 사용하여 커스텀 제약조건을 업데이트할 수 있습니다. 커스텀 제약조건의 버전 관리가 없으므로 기존 커스텀 제약조건을 덮어씁니다. 커스텀 제약조건이 이미 시행된 경우 업데이트된 커스텀 제약조건이 즉시 적용됩니다.

콘솔

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 페이지 상단의 프로젝트 선택 도구를 선택합니다.

  3. 프로젝트 선택 도구에서 조직 정책을 업데이트할 리소스를 선택합니다.

  4. 조직 정책 페이지의 목록에서 수정할 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.

  5. 제약조건 수정을 클릭합니다.

  6. 표시 이름, 설명, 적용 방법, 조건, 작업을 변경합니다. 제약조건을 만든 다음에는 제약조건 ID 또는 리소스 유형을 변경할 수 없습니다.

  7. 변경사항 저장을 클릭합니다.

gcloud

Google Cloud CLI를 사용하여 기존 커스텀 제약조건을 수정하려면 변경하려는 항목이 포함된 새 YAML 파일을 만듭니다.

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 ID(예: 123456789)

  • CONSTRAINT_NAME: 새 커스텀 제약조건에 사용하려는 이름입니다. 커스텀 제약조건은 custom.으로 시작해야 하며 대문자, 소문자 또는 숫자만 포함할 수 있습니다(예: custom.disableGkeAutoUpgrade). 이 필드의 최대 길이는 프리픽스를 제외하고 70자입니다(예: organizations/123456789/customConstraints/custom.).

  • RESOURCE_NAME: 제한하려는 객체 및 필드가 포함된 Google Cloud REST 리소스의 정규화된 이름입니다. 예를 들면 container.googleapis.com/NodePool입니다. 커스텀 제약조건에 사용할 수 있는 서비스 리소스에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참조하세요.

  • METHOD1,METHOD2: 제약조건을 시행할 RESTful 메서드 목록입니다. CREATE 또는 CREATEUPDATE일 수 있습니다. 모든 Google Cloud 서비스가 두 메서드를 모두 지원하지는 않습니다. 각 서비스에 지원되는 메서드를 보려면 지원되는 서비스에서 해당 서비스를 찾으세요.

  • CONDITION: 지원되는 서비스 리소스를 참조하는 CEL 조건입니다(예: "resource.management.autoUpgrade == false"). 이 필드의 최대 길이는 1000자(영문 기준)입니다. CEL 사용법에 대한 자세한 내용은 Common Expression Language를 참조하세요.

  • ACTION: condition이 충족될 때 수행할 작업입니다. ALLOW 또는 DENY일 수 있습니다.

  • DISPLAY_NAME: 제약조건에 대한 사용자 친화적인 이름. 이 필드의 최대 길이는 200자(영문 기준)입니다.

  • DESCRIPTION: 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대한 사용자 친화적인 설명입니다. 이 필드의 최대 길이는 2,000자(영문 기준)입니다.

새 커스텀 제약조건의 YAML 파일을 만든 후에는 조직에서 조직 정책에 사용할 수 있도록 설정해야 합니다. 커스텀 제약조건을 설정하려면 gcloud org-policies set-custom-constraint 명령어를 사용합니다.

gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH를 커스텀 제약조건 파일의 전체 경로로 바꿉니다. 예를 들면 /home/user/customconstraint.yaml입니다. 완료되면 Google Cloud 조직 정책 목록에서 조직 정책으로 커스텀 제약조건을 사용할 수 있습니다. 커스텀 제약조건이 존재하는지 확인하려면 gcloud org-policies list-custom-constraints 명령어를 사용합니다.
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID를 조직 리소스 ID로 바꿉니다. 자세한 내용은 조직 정책 보기를 참조하세요.

커스텀 제약조건 삭제

Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 커스텀 제약조건을 삭제할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 페이지 상단의 프로젝트 선택 도구를 선택합니다.

  3. 프로젝트 선택 도구에서 조직 정책을 삭제할 리소스를 선택합니다.

  4. 조직 정책 페이지의 목록에서 삭제할 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.

  5. 삭제를 클릭합니다.

  6. 제약조건 삭제를 확인하기 위해 삭제를 클릭합니다.

gcloud

커스텀 제약조건을 삭제하려면 org-policies delete-custom-constraint gcloud CLI 명령어를 사용합니다.

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_NAME \
  --organization=ORGANIZATION_ID

다음을 바꿉니다.

  • ORGANIZATION_ID: 조직 ID(예: 123456789)

  • CONSTRAINT_NAME: 커스텀 제약조건의 이름. 예를 들면 custom.disableGkeAutoUpgrade입니다.

출력은 다음과 비슷합니다.

Deleted custom constraint [organizations/123456789/customConstraints/custom.disableGkeAutoUpgrade]

커스텀 제약조건을 삭제하면 해당 제약조건을 사용하여 생성된 모든 정책이 계속 존재하지만 무시됩니다. 삭제된 커스텀 제약조건과 동일한 이름으로 다른 커스텀 제약조건을 만들 수 없습니다.

조직 정책 변경사항 테스트 및 분석

조직 정책에 대한 모든 변경사항을 테스트하고 테스트 실행하여 환경 상태와 변경사항이 환경에 미치는 영향을 더 잘 이해하는 것이 좋습니다.

조직 정책에 대한 정책 시뮬레이터를 사용하면 제약조건과 조직 정책이 현재 환경에 미치는 영향을 파악할 수 있습니다. 이 도구를 사용하면 프로덕션 환경에 적용하기 전에 모든 리소스 구성을 검토하여 위반이 발생하는 위치를 확인할 수 있습니다. 자세한 안내는 정책 시뮬레이터로 조직 정책 변경사항 테스트를 참고하세요.

현재 효과를 파악한 후 테스트 실행 모드에서 조직 정책을 만들어 향후 30일 동안 정책의 영향과 잠재적 위반사항을 파악할 수 있습니다. 테스트 실행 모드의 조직 정책은 정책 위반이 감사 로그로 작성되지만 위반 작업이 거부되지 않는 조직 정책 유형입니다. Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 커스텀 제약조건에 대해 테스트 실행 모드에서 조직 정책을 만들 수 있습니다. 자세한 안내는 테스트 실행 모드의 조직 정책 만들기를 참고하세요.

커스텀 조직 정책 적용

커스텀 제약조건은 설정된 다음 사전 정의된 불리언 제약조건과 동일하게 작동합니다. Google Cloud는 사용자 요청이 허용되는지 평가할 때 먼저 커스텀 제약조건을 확인합니다. 커스텀 조직 정책 중 하나라도 요청을 거부하면 요청이 거부됩니다. 그러면 Google Cloud가 해당 리소스에 적용된 사전 정의된 조직 정책을 확인합니다.

불리언 제약조건을 참조하는 조직 정책을 만들고 해당 조직 정책을 Google Cloud 리소스에 적용하여 불리언 제약조건을 적용할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 프로젝트 선택 도구에서 조직 정책을 설정할 프로젝트를 선택합니다.
  3. 조직 정책 페이지의 목록에서 제약조건을 선택하여 해당 제약조건의 정책 세부정보 페이지를 봅니다.
  4. 이 리소스의 조직 정책을 구성하려면 정책 관리를 클릭합니다.
  5. 정책 수정 페이지에서 상위 정책 재정의를 선택합니다.
  6. 규칙 추가를 클릭합니다.
  7. 시행 섹션에서 이 조직 정책 시행을 사용 설정할지 여부를 선택합니다.
  8. 선택사항: 태그로 조직 정책을 조건부로 만들려면 조건 추가를 클릭합니다. 조건부 규칙을 조직 정책에 추가하면 비조건부 규칙을 최소 하나 이상 추가해야 합니다. 그렇지 않으면 정책을 저장할 수 없습니다. 자세한 내용은 태그를 사용하여 조직 정책 설정을 참조하세요.
  9. 커스텀 제약조건인 경우 변경사항 테스트를 클릭하여 이 조직 정책의 효과를 시뮬레이션할 수 있습니다. 자세한 내용은 정책 시뮬레이터로 조직 정책 변경사항 테스트를 참조하세요.
  10. 조직 정책을 완료하고 적용하려면 정책 설정을 클릭합니다. 정책이 적용되는 데 최대 15분이 소요됩니다.

gcloud

불리언 제약조건을 시행하는 조직 정책을 만들려면 제약조건을 참조하는 정책 YAML 파일을 만듭니다.

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

다음을 바꿉니다.

  • PROJECT_ID: 제약조건을 시행할 프로젝트
  • CONSTRAINT_NAME: 커스텀 제약조건에 대해 정의된 이름. 예를 들면 custom.disableGkeAutoUpgrade입니다.

제약조건이 포함된 조직 정책을 시행하려면 다음 명령어를 실행합니다.

    gcloud org-policies set-policy POLICY_PATH
    

POLICY_PATH를 조직 정책 YAML 파일의 전체 경로로 바꿉니다. 정책이 적용되는 데 최대 15분이 소요됩니다.

제약조건 예시

Google에서 제공하는 사전 정의된 제약조건과 비슷한 커스텀 제약조건을 정의할 수 있습니다. 일반적인 커스텀 제약조건 YAML 파일은 다음과 비슷합니다.

name: organizations/1234567890123/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 to be created or updated if AutoUpgrade is not enabled where this custom constraint is enforced.

Common Expression Language

조직 정책 서비스는 Common Expression Language(CEL)를 사용하여 커스텀 제약조건에 대한 조건을 평가합니다. CEL은 표현식 평가를 위한 공통 시맨틱스를 구현하는 오픈소스 비튜링 완전 언어입니다.

커스텀 제약조건을 지원하는 각 서비스는 특정 리소스 집합과 이러한 리소스 필드를 사용할 수 있도록 설정합니다. 사용 가능한 필드는 강력하게 유형화된 필드이며 커스텀 제약조건으로 직접 참조할 수 있습니다.

필드 유형을 기반으로 서비스 리소스 필드를 참조하는 CEL 조건을 구성할 수 있습니다. 조직 정책 서비스는 CEL 데이터 유형, 표현식, 매크로의 하위 집합을 지원합니다. 아래 섹션에서는 사용 가능한 데이터 유형 및 이와 함께 작동하는 공통 표현식과 매크로 목록을 보여줍니다.

각 서비스에 사용할 수 있는 표현식과 매크로에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참조하세요.

다음 JSON 예시는 커스텀 제약조건을 사용하여 참조할 수 있는 각 잠재적 필드 유형을 보여줍니다.

{
  integerValue: 1
  stringValue: "A text string"
  booleanValue: true
  nestedValue: {
    nestedStringValue: "Another text string"
  }
  listValue: [foo, bar]
  mapValue["costCenter"] == "123"
}

모든 CEL 표현식에 대해 조건이 true로 평가될 때 커스텀 제약조건이 적용됩니다. 표현식을 and(&&) 및 or(||)과 조합하여 복잡한 쿼리를 만들 수 있습니다. 커스텀 제약조건에 대한 YAML 또는 JSON 파일을 만들 때 전체 쿼리를 큰따옴표(")로 묶습니다.

정수

위 예시에서 integerValue와 같은 정수 필드를 사용하여 조건에 비교 연산자를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

resource.integerValue == 1
resource.integerValue > 5
resource.integerValue < 10

문자열

위 예시의 stringValue와 같은 문자열 필드는 문자열 리터럴, 정규 표현식, CEL 표현식을 사용하여 평가될 수 있습니다. 예를 들면 다음과 같습니다.

resource.stringValue == "abc"
// stringValue is exactly "abc".

resource.stringValue.matches("dev$")
// stringValue matches a regular expression, which specifies the string ends
// with the word "dev".

resource.stringValue.startsWith("startValue")
// stringValue starts with "startValue".

resource.stringValue.endsWith("endValue")
// stringValue ends with "endValue".

resource.stringValue.contains("fooBar")
// stringValue contains "fooBar".

위 예시에서 nestedStringValue와 같은 중첩 필드는 전체 경로를 사용하여 참조되어야 합니다. 예를 들면 다음과 같습니다.

resource.nestedValue.nestedStringValue == "foo"
// nestedValue contains the object nestedStringValue, which has a value of "foo".

불리언

위 예시에서 booleanValue와 같은 불리언 필드에는 true 또는 false 불리언 값이 포함됩니다.

목록

위 예시에서 listValue와 같은 목록 필드는 목록의 크기, 목록의 콘텐츠, 특정 요소가 목록 내에 존재하는지 여부에 따라 평가될 수 있습니다.

예를 들면 다음과 같습니다.

resource.listValue.size() >= 1 && resource.listValue[0] == "bar"
// listValue has size greater than or equal to one, and the first element is "bar".

resource.listValue.exists(value, value == "foo")
// listValue has at least one element that is exactly "foo".

resource.listValue.all(value, value.contains("foo"))
// listValue is a list of values that are all exactly "foo".

지도

위 예시에서 mapValue와 같은 맵 필드는 특정 요소의 존재 여부와 값을 기반으로 평가할 수 있는 키-값 쌍입니다.

예를 들면 다음과 같습니다.

has(resource.mapValue.foo) && resource.mapValue.foo == "bar"
// mapValue contains the key "foo", and that key has the value "bar".

CEL 오류 문제 해결

잘못된 표현식 또는 유형 불일치로 생성된 조건은 커스텀 제약조건을 설정하려고 시도할 때 오류를 반환합니다. 예를 들어 문자열을 정수와 비교하는 다음과 같은 잘못된 커스텀 제약조건을 살펴보겠습니다.

name: organizations/1234567890123/customConstraints/custom.badConfig
resourceTypes:
- dataproc.googleapis.com/Cluster
methodTypes:
- CREATE
- UPDATE
condition: "resource.config.masterConfig.numInstances == 'mismatch'"
actionType: ALLOW
displayName: Number of instances is a string
description: Demonstrate that type mismatches cause an error.

Google Cloud CLI를 사용하여 제약조건을 설정하려고 시도하면 오류가 발생합니다.

ERROR: (gcloud.org-policies.set-custom-constraint) INVALID_ARGUMENT: Custom constraint condition [resource.config.masterConfig.numInstances == "mismatch"] is invalid. Error: ERROR: <input>:1:15: found no matching overload for '_==_' applied to '(int, string)' (candidates: (%A0, %A0))
 | resource.config.masterConfig.numInstances == "mismatch"
 | ..........................................^.

Google Cloud 콘솔에서 잘못된 CEL 문법 오류는 오류 아이콘으로 플래그 지정됩니다. 이 아이콘을 강조 표시하면 문법 오류에 대해 자세한 정보가 포함된 도움말이 표시됩니다.

조직 정책 서비스는 만든 조건을 컴파일하고 검증하여 조건이 문법상 올바르지 않으면 오류를 반환합니다. 그러나 컴파일되는 특정 조건이 있지만 Google Cloud가 제약조건을 시행하려고 하면 오류가 발생합니다. 예를 들어 존재하지 않는 목록 색인 또는 맵 키에 액세스하려고 시도하는 조건으로 제약조건을 설정하면 제약조건이 실패하고 적용 시 오류가 반환됩니다. 그리고 리소스를 만들려는 모든 시도를 차단합니다.

목록 또는 맵 요소에 의존하는 조건을 만들 때는 조건이 모든 경우에 유효한지 확인하는 검사로 조건을 시작하는 것이 좋습니다. 예를 들어 특정 목록 요소를 참조하기 전에 list.size()를 확인하거나 맵 요소를 참조하기 전에 has()를 사용합니다.

지원되는 서비스

각 서비스는 서비스 리소스에 대한 조직 정책을 시행하는 데 사용할 수 있는 커스텀 제약조건 필드 집합을 정의합니다. 커스텀 제약조건을 지원하는 서비스 목록은 커스텀 제약조건 지원 서비스를 참조하세요.

조직 정책 스캐너 설정에 대한 자세한 내용은 조직 정책 취약점 발견 항목을 참조하세요.

다음 단계