Google Cloud 조직 정책을 사용하면 조직 리소스를 중앙에서 프로그래매틱 방식으로 제어할 수 있습니다. 조직 정책 관리자는 Google Cloud 리소스 계층 구조에서Google Cloud 리소스 및 이러한 리소스의 하위 요소에 적용되는 제약 조건이라는 제한사항 집합인 조직 정책을 정의할 수 있습니다. 조직, 폴더, 프로젝트 수준에서 조직 정책을 적용할 수 있습니다.
조직 정책은 다양한Google Cloud 서비스에 대한 사전 정의된 제약 조건을 제공합니다. 그러나 조직 정책으로 보다 세밀하게 제어하려면 커스텀 조직 정책을 만들면 됩니다.
이 페이지에서는 커스텀 조직 정책을 보고, 만들고, 관리하는 방법을 설명합니다. 커스텀 조직 정책은 조직 정책으로 제한되는 특정 필드에 대해 보다 세부적이고 맞춤설정 가능한 제어를 제공하기 위해 관리자에 의해 생성됩니다.
시작하기 전에
- 조직 정책 및 제약 조건의 정의 및 작동 방식에 대한 자세한 내용은 조직 정책 서비스 소개를 참고하세요.
필요한 역할
조직 정책을 관리하는 데 필요한 권한을 얻으려면 관리자에게 조직에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.
-
조직 정책 관리자 (
roles/orgpolicy.policyAdmin
) -
Google Cloud API를 사용 설정하려면 다음 단계를 따르세요.
서비스 사용량 소비자 (
roles/serviceusage.serviceUsageConsumer
)
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
조직 정책 관리자 역할 바인딩에 IAM 조건을 추가하여 조직 정책 관리를 위임할 수 있습니다. 주 구성원이 조직 정책을 관리할 수 있는 리소스를 제어하려면 특정 태그를 기반으로 역할 바인딩을 조건부로 설정하면 됩니다. 자세한 내용은 제약 조건 사용을 참고하세요.
커스텀 제약조건
커스텀 제약조건은 제약조건이 적용되는 리소스, 메서드, 조건, 작업을 지정하는 YAML 파일로 생성됩니다. 이것들은 조직 정책을 시행하는 서비스에 따라 달라집니다. 커스텀 제약조건의 조건은 Common Expression Language(CEL)를 사용하여 정의됩니다.
커스텀 제약조건 설정
Google Cloud 콘솔이나 Google Cloud CLI를 사용하여 커스텀 제약조건을 만들고 조직 정책에 사용하도록 설정할 수 있습니다.
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
페이지 상단의 프로젝트 선택 도구를 선택합니다.
프로젝트 선택 도구에서 조직 정책을 설정할 리소스를 선택합니다.
커스텀 제약조건을 클릭합니다.
표시 이름 상자에 제약조건에 대해 사람이 읽을 수 있는 이름을 입력합니다. 이 이름은 오류 메시지에 사용되며 식별 및 디버깅에 사용할 수 있습니다. 오류 메시지에 노출될 수 있으므로 표시 이름에 개인 식별 정보 또는 민감한 정보를 사용하지 마세요. 이 필드의 최대 길이는 200자(영문 기준)입니다.
제약조건 ID 상자에 새 커스텀 제약조건에 사용하려는 이름을 입력합니다. 커스텀 제약조건은
custom.
으로 시작해야 하며 대문자, 소문자 또는 숫자만 포함할 수 있습니다(예:custom.disableGkeAutoUpgrade
). 이 필드의 최대 길이는 접두사를 제외하고 70자입니다(예:organizations/123456789/customConstraints/custom
). 오류 메시지에 노출될 수 있으므로 제약조건 ID에 개인 식별 정보 또는 민감한 정보를 포함하지 마세요.설명 상자에 사람이 읽을 수 있는 제약조건 설명을 입력합니다. 이 설명은 정책이 위반되었을 때 오류 메시지로 사용됩니다. 정책 위반이 발생한 이유와 정책 위반을 해결하는 방법을 포함합니다. 오류 메시지에 노출될 수 있으므로 설명에 개인 식별 정보 또는 민감한 정보를 포함하지 마세요. 이 필드의 최대 길이는 2,000자(영문 기준)입니다.
리소스 유형 상자에서 제한하려는 객체 및 필드가 포함된 Google CloudREST 리소스 이름을 선택합니다(예:
container.googleapis.com/NodePool
). 대부분의 리소스 유형은 리소스당 최대 20개의 맞춤 제약 조건을 가질 수 있습니다. 이미 최대 수의 커스텀 제약조건이 있는 리소스에 대해 커스텀 제약조건을 만들려고 하면 작업이 실패합니다.적용 방법 아래에서 REST
CREATE
메서드에 제약조건을 적용할지 또는CREATE
및UPDATE
메서드 모두에 제약조건을 적용할지를 선택합니다. 제약조건을 위반하는 리소스에UPDATE
메서드를 사용하여 제약조건을 적용하면 위반을 해결하지 않는 한 조직 정책에 의해 해당 리소스의 변경사항이 차단됩니다.모든 Google Cloud 서비스가 두 메서드를 모두 지원하지는 않습니다. 각 서비스에 지원되는 메서드를 보려면 지원되는 서비스에서 해당 서비스를 찾으세요.
조건을 정의하려면
조건 수정을 클릭합니다.조건 추가 패널에서 지원되는 서비스 리소스를 참조하는 CEL 조건을 만듭니다(예:
resource.management.autoUpgrade == false
). 이 필드의 최대 길이는 1000자(영문 기준)입니다. CEL 사용법에 대한 자세한 내용은 Common Expression Language를 참조하세요. 커스텀 제약조건에 사용할 수 있는 서비스 리소스에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참조하세요.저장을 클릭합니다.
작업에서 조건이 충족될 경우 평가된 메서드를 허용하거나 거부할지를 선택합니다.
거부 작업은 조건이 true로 평가되면 리소스를 만들거나 업데이트하는 작업이 차단됨을 의미합니다.
허용 작업은 조건이 true로 평가되는 경우에만 리소스를 만들거나 업데이트하는 작업이 허용됨을 의미합니다. 조건에 명시적으로 나열된 경우를 제외한 다른 모든 사례는 차단됩니다.
제약조건 만들기를 클릭합니다.
각 필드에 값을 입력하면 이 커스텀 제약조건에 해당하는 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개의 맞춤 제약 조건을 가질 수 있습니다. 이미 최대 수의 커스텀 제약조건이 있는 리소스에 대해 커스텀 제약조건을 만들려고 하면 작업이 실패합니다. 커스텀 제약조건에 사용할 수 있는 서비스 리소스에 대한 자세한 내용은 커스텀 제약조건 지원 서비스를 참고하세요.METHOD1,METHOD2
: 제약조건을 시행할 RESTful 메서드 목록입니다.CREATE
또는CREATE
와UPDATE
일 수 있습니다. 제약 조건을 위반하는 리소스에UPDATE
메서드를 사용하여 제약 조건을 적용하면 해당 리소스에 대한 모든 변경사항이 조직 정책에 의해 차단됩니다.
모든 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 명령어를 다시 사용하여 커스텀 제약 조건을 업데이트할 수 있습니다. 커스텀 제약조건의 버전 관리가 없으므로 기존 커스텀 제약조건을 덮어씁니다. 커스텀 제약조건이 이미 시행된 경우 업데이트된 커스텀 제약조건이 즉시 적용됩니다.
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
페이지 상단의 프로젝트 선택 도구를 선택합니다.
프로젝트 선택 도구에서 조직 정책을 업데이트할 리소스를 선택합니다.
조직 정책 페이지의 목록에서 수정할 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.
제약조건 수정을 클릭합니다.
표시 이름, 설명, 적용 방법, 조건, 작업을 변경합니다. 제약조건을 만든 다음에는 제약조건 ID 또는 리소스 유형을 변경할 수 없습니다.
변경사항 저장을 클릭합니다.
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
또는CREATE
와UPDATE
일 수 있습니다. 제약 조건을 위반하는 리소스에UPDATE
메서드를 사용하여 제약 조건을 적용하면 해당 리소스에 대한 모든 변경사항이 조직 정책에 의해 차단됩니다.
모든 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를 사용하여 커스텀 제약조건을 삭제할 수 있습니다.
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
페이지 상단의 프로젝트 선택 도구를 선택합니다.
프로젝트 선택 도구에서 조직 정책을 삭제할 리소스를 선택합니다.
조직 정책 페이지의 목록에서 삭제할 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.
삭제를 클릭합니다.
제약조건 삭제를 확인하기 위해 삭제를 클릭합니다.
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 리소스에 적용하여 제약 조건을 적용할 수 있습니다.콘솔
- Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
- 프로젝트 선택 도구에서 조직 정책을 설정할 프로젝트를 선택합니다.
- 조직 정책 페이지의 목록에서 제약조건을 선택하여 해당 제약조건의 정책 세부정보 페이지를 봅니다.
- 이 리소스의 조직 정책을 구성하려면 정책 관리를 클릭합니다.
- 정책 수정 페이지에서 상위 정책 재정의를 선택합니다.
- 규칙 추가를 클릭합니다.
- 적용 섹션에서 이 조직 정책 적용을 사용 설정할지 여부를 선택합니다.
- (선택사항) 태그로 조직 정책을 조건부로 만들려면 조건 추가를 클릭합니다. 조건부 규칙을 조직 정책에 추가하면 비조건부 규칙을 최소 하나 이상 추가해야 합니다. 그렇지 않으면 정책을 저장할 수 없습니다. 자세한 내용은 태그를 사용하여 조직 정책 설정을 참조하세요.
- 변경사항 테스트를 클릭하여 조직 정책의 효과를 시뮬레이션합니다. 기존 관리형 제약조건에는 정책 시뮬레이션을 사용할 수 없습니다. 자세한 내용은 정책 시뮬레이터로 조직 정책 변경사항 테스트를 참조하세요.
- 조직 정책을 완료하고 적용하려면 정책 설정을 클릭합니다. 정책이 적용되는 데 최대 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".
맞춤 제약 조건 문제 해결
다음 섹션에서는 맞춤 제약 조건 생성과 관련된 일반적인 문제를 설명하고 이러한 문제의 해결 방법을 소개합니다.
메서드 유형 오류
맞춤 제약 조건은 적용할 메서드 목록(일반적으로 CREATE
또는 CREATE
및 UPDATE
모두)으로 생성됩니다. 리소스에서 지원하지 않는 메서드 유형(예: Compute Engine 이미지 리소스의 UPDATE
메서드)을 지정하면 맞춤 제약 조건을 저장할 수 없습니다.
평가되지 않은 태그
조직, 폴더 또는 프로젝트 리소스의 태그는 맞춤 제약 조건으로 지원됩니다. 태그를 지원하는 서비스에 대한 자세한 내용은 서비스별 문서를 참고하세요.
교차 서비스 제한
Compute Engine과 같은 일부 서비스에는 많은 관련 리소스가 포함됩니다. 위반이 발생하면 커스텀 제약 조건이 다른 서비스에 적용되더라도 커스텀 조직 정책 위반에 대한 오류 메시지가 표시됩니다.
예를 들어 Compute Engine 리소스에 대한 맞춤 제약 조건으로 인해 Dataproc 작업이 차단될 수 있습니다.
CEL 오류 문제 해결
조직 정책 서비스는 만든 조건을 컴파일하고 검증하여 조건이 문법상 올바르지 않으면 오류를 반환합니다. 커스텀 제약 조건을 만들거나 저장할 수 없는 경우 잘못된 CEL 구문 오류가 발생한 것일 수 있으며, 이 오류를 먼저 해결해야 합니다.
Google Cloud 콘솔에서 잘못된 CEL 문법 오류는
오류 아이콘으로 플래그 지정됩니다. 이 아이콘을 강조 표시하면 문법 오류에 대해 자세한 정보가 포함된 도움말이 표시됩니다.특정 조건은 컴파일될 수 있지만 Google Cloud에서 제약 조건을 시행하려고 하면 오류가 발생할 수 있습니다. 예를 들어 존재하지 않는 목록 색인 또는 맵 키에 액세스하려고 시도하는 조건으로 제약조건을 설정하면 제약조건이 실패하고 적용 시 오류가 반환됩니다. 그리고 리소스를 만들려는 모든 시도를 차단합니다.
다음 섹션에서는 일반적인 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()
를 사용합니다.
지원되는 서비스
각 서비스는 서비스 리소스에 대한 조직 정책을 시행하는 데 사용할 수 있는 커스텀 제약조건 필드 집합을 정의합니다. 커스텀 제약조건을 지원하는 서비스 목록은 커스텀 제약조건 지원 서비스를 참조하세요.
조직 정책 스캐너 설정에 대한 자세한 내용은 조직 정책 취약점 발견 항목을 참조하세요.
리소스에 필수 태그 적용
커스텀 조직 정책을 사용하여 리소스에 필수 태그를 적용할 수 있습니다. 필수 태그를 적용하면 조직의 태그 지정 정책을 준수하는 리소스만 만들 수 있습니다. 즉, 리소스는 정책에 지정된 필수 태그 키의 태그 값과 바인딩됩니다. 자세한 내용은 태그를 적용하는 맞춤 제약 조건 설정을 참고하세요.
다음 단계
- 제약조건에 대해 자세히 알아보기
- 정책을 맞춤설정하는 데 사용할 수 있는 추가 옵션 알아보기
- 태그를 기반으로 조직 정책을 설정하는 방법 알아보기
- GitHub에서 맞춤 조직 정책 라이브러리를 확인하세요.
- 구성 검사기로 조직 정책 검증 모니터링 알아보기