이 페이지에서는 조직 정책 서비스를 사용하여 GKE 클러스터가 하나 이상의 지속적 검증(CV) 검사 기반 플랫폼 정책을 사용하도록 요구하는 방법을 보여줍니다. 커스텀 제약조건에서 필수 검사 기반 플랫폼 정책을 지정합니다. 그 다음 조직 정책에 커스텀 제약조건을 시행합니다.
비용
이 가이드에서는 다음 Google Cloud 서비스를 사용합니다.
- Binary Authorization. 단, 미리보기 단계 중에 CV를 무료로 사용할 수 있습니다.
- 조직 정책 및 제약조건은 무료로 제공됩니다.
시작하기 전에
- Binary Authorization을 사용 설정합니다.
- 검사 기반 플랫폼 정책이 포함된 CV와 하나 이상의 CV 검사 기반 플랫폼 정책을 설정합니다.
필요한 역할
제약조건을 만들고 조직 정책을 시행하는 데 필요한 권한을 얻으려면 관리자에게 Google Cloud 조직의 조직 정책 관리자(roles/orgpolicy.policyAdmin
) IAM 역할을 부여해 달라고 요청하세요.
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.
CV 커스텀 제약조건 만들기
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
조직 정책 페이지에서
커스텀 제약조건을 클릭합니다.진행하라는 메시지가 표시되면 상위 조직으로 전환을 클릭합니다. 조직에 대한 자세한 내용은 조직 정책 서비스 소개를 참조하세요.
제약조건 세부정보에서 필드에 다음 정보를 입력합니다.
표시 이름: 제약조건의 표시 이름입니다(예:
Require a Binary Authorization continuous validation policy for all GKE clusters
). 저장 후 표시 이름을 사용하여 제약조건을 조회할 수 있습니다. 표시 이름 필드의 최대 길이는 200자(영문 기준)입니다.제약조건 ID: 제약조건에 대한 제약조건 ID입니다(예:
RequireBinAuthzCVPolicy
).설명(선택사항): 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대한 사용자 친화적인 설명입니다. 설명 필드의 최대 길이는 2,000자(영문 기준)입니다.
시행에서 다음을 수행합니다.
리소스 유형에
container.googleaips.com/Cluster
를 입력합니다.시행 방법에서 생성 및 업데이트 시 시행을 선택합니다.
조건 필드에 표현식을 입력합니다. 이 필드의 최대 길이는 1000자(영문 기준)입니다. 커스텀 제약조건은 조건이
true
로 평가될 때 시행됩니다. 조건은 Common Expression Language(CEL) 구문의 표현식과 같습니다. 표현식을 and(&&
) 및 or(||
)과 조합하여 복잡한 조건을 만들 수 있습니다. CEL은 C와 같은 표현식 언어입니다. CEL의 구문과 시맨틱스에 대한 자세한 내용은 https://github.com/google/cel-spec을 참조하세요. 조건을 입력하려면 다음을 수행합니다.조건 수정을 클릭합니다.
CV 플랫폼 정책이 있는지 확인하는 표현식을 입력합니다. 다음 조건에서는 CV 플랫폼 정책 바인딩이 존재하고 플랫폼 정책에 특정 이름이 있어야 합니다.
resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
다음을 바꿉니다.
PROJECT_ID
: 플랫폼 정책의 프로젝트 ID입니다. 프로젝트는 동일한 조직에 있어야 합니다.POLICY_ID
: 플랫폼 정책의 정책 ID입니다.
다음 조건에서는 두 개의 CV 플랫폼 정책 바인딩이 존재하고 각 바인딩에 특정 플랫폼 정책 이름이 있어야 합니다.
resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
PROJECT_ID1
: 첫 번째 플랫폼 정책의 프로젝트 ID입니다. 프로젝트는 동일한 조직에 있어야 합니다.POLICY_ID1
: 첫 번째 플랫폼 정책의 정책 ID입니다.PROJECT_ID2
: 두 번째 플랫폼 정책의 프로젝트 ID입니다.POLICY_ID2
: 두 번째 플랫폼 정책의 정책 ID입니다.저장을 클릭합니다.
작업에서 허용을 선택합니다.
커스텀 제약조건을 만들려면 제약조건 만들기를 클릭합니다.
gcloud
커스텀 제약조건에 대한 YAML 파일을 만듭니다.
name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_ID resource_types: container.googleapis.com/Cluster method_types: - CREATE - UPDATE condition: >- CONDITION action_type: ACTION display_name: DISPLAY_NAME description: DESCRIPTION
다음을 바꿉니다.
ORGANIZATION_ID
: 조직 ID(예:123456789
)CONSTRAINT_ID
: 제약조건 ID(예:RequireBinAuthzCVPolicy
)CONDITION
: CV 플랫폼 정책이 있는지 확인하는 표현식을 입력합니다. 이 필드의 최대 길이는 1000자(영문 기준)입니다. 커스텀 제약조건은 조건이true
로 평가될 때 시행됩니다. 조건은 Common Expression Language(CEL) 구문의 표현식과 같습니다. 표현식을 and(&&
) 및 or(||
)과 조합하여 복잡한 조건을 만들 수 있습니다. CEL은 C와 같은 표현식 언어입니다. CEL의 구문과 시맨틱스에 대한 자세한 내용은 https://github.com/google/cel-spec을 참조하세요. 다음 조건에서는 CV 플랫폼 정책 바인딩이 존재하고 플랫폼 정책에 특정 이름이 있어야 합니다.resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
다음을 바꿉니다.
PROJECT_ID
: 플랫폼 정책의 프로젝트 ID입니다. 프로젝트는 동일한 조직에 있어야 합니다.POLICY_ID
: 플랫폼 정책의 정책 ID입니다.
다음 조건에서는 두 개의 CV 플랫폼 정책 바인딩이 존재하고 각 바인딩에 특정 플랫폼 정책 이름이 있어야 합니다.
resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
PROJECT_ID1
: 첫 번째 플랫폼 정책의 프로젝트 ID입니다. 프로젝트는 동일한 조직에 있어야 합니다.POLICY_ID1
: 첫 번째 플랫폼 정책의 정책 ID입니다.PROJECT_ID2
: 두 번째 플랫폼 정책의 프로젝트 ID입니다.POLICY_ID2
: 두 번째 플랫폼 정책의 정책 ID입니다.ACTION
:condition
이 충족될 때 수행할 작업입니다.ALLOW
또는DENY
일 수 있습니다.DISPLAY_NAME
: 제약조건의 사용자 친화적인 이름입니다(예:Require a Binary Authorization continuous validation policy for all GKE clusters
). 표시 이름 필드의 최대 길이는 200자(영문 기준)입니다.DESCRIPTION
: 정책을 위반할 때 오류 메시지로 표시할 제약조건에 대한 사용자 친화적인 설명입니다. 설명 필드의 최대 길이는 2,000자(영문 기준)입니다.
커스텀 제약조건을 적용합니다.
gcloud org-policies set-custom-constraint CUSTOM_CONSTRAINT_PATH
CUSTOM_CONSTRAINT_PATH
를 커스텀 제약조건 정의의 경로로 바꿉니다.커스텀 제약조건이 있는지 확인합니다.
gcloud org-policies list-custom-constraints \ --organization=ORGANIZATION_ID
출력은 다음과 비슷합니다.
CUSTOM_CONSTRAINT: custom.RequireBinAuthzCVPolicy ACTION_TYPE: ALLOW METHOD_TYPES: CREATE,UPDATE RESOURCE_TYPES: container.googleapis.com/Cluster DISPLAY_NAME: This cluster requires the continuous validation policy: projects/my-project/platforms/gke/policies/my-policy
생성한 커스텀 제약조건을 시행하려면 조직 정책을 만듭니다.
조직 정책을 사용하여 커스텀 제약조건 시행
새 커스텀 제약조건을 시행하려면 제약조건을 참조하는 조직 정책을 만든 후 조직 정책을 시행합니다.
콘솔
제약조건을 시행하려면 다음을 수행합니다.
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
프로젝트 선택 도구를 선택하고 조직을 선택합니다.
목록에서 제약조건을 검색하여 선택합니다.
제약조건에 대한 정책 세부정보 페이지에서 정책 관리를 클릭합니다.
정책 수정 페이지에서 상위 정책 재정의를 선택합니다.
규칙 추가를 클릭합니다.
시행에서 사용을 선택합니다.
선택사항: 변경사항 테스트를 클릭하여 이 조직 정책의 효과를 시뮬레이션합니다. 자세한 내용은 정책 시뮬레이터로 조직 정책 변경사항 테스트를 참조하세요.
조직 정책을 완료하고 적용하려면 정책 설정을 클릭합니다.
gcloud
YAML 정책 정의 파일을 만듭니다.
name: organizations/ORGANIZATION_ID/policies/custom.CONSTRAINT_ID spec: rules: - enforce: true
다음을 바꿉니다.
ORGANIZATION_ID
: 조직 IDCONSTRAINT_ID
: 제약조건 ID
정책을 시행합니다.
gcloud org-policies set-policy ORG_POLICY_PATH
ORG_POLICY_PATH
를 정책 정의 파일의 경로로 바꿉니다.정책이 있는지 확인합니다.
gcloud org-policies list \ --organization=ORGANIZATION_ID
ORGANIZATION_ID
를 조직 ID로 바꿉니다.인수 목록은
gcloud org-policies list
를 참조하세요.출력은 다음과 비슷합니다.
CONSTRAINT: custom.RequireBinAuthzCVPolicy LIST_POLICY: - BOOLEAN_POLICY: SET ETAG: CN622LIGEIDXnpMB-
정책이 적용되는 데 최대 15분이 소요될 수 있습니다.
CV 검사 기반 플랫폼 정책에 여러 제약조건을 시행하려면 다음을 수행합니다.
- CV 검사 기반 정책당 하나의 커스텀 제약조건을 만듭니다.
- 이 섹션에 설명된 대로 각 커스텀 제약조건으로 조직 정책을 업데이트합니다.
커스텀 제약조건 삭제
Google Cloud 콘솔 또는 Google Cloud CLI를 사용하여 커스텀 제약조건을 삭제할 수 있습니다.
콘솔
Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.
페이지 상단의 프로젝트 선택 도구를 선택합니다.
프로젝트 선택 도구에서 조직을 선택합니다.
목록에서 제약조건을 검색하여 선택합니다.
제약조건 세부정보에서
삭제를 클릭합니다.제약조건 삭제를 확인하기 위해 삭제를 클릭합니다.
gcloud
커스텀 제약조건을 삭제하려면 org-policies delete-custom-constraint
gcloud CLI 명령어를 사용합니다.
gcloud org-policies delete-custom-constraint custom.CONSTRAINT_ID \
--organization=ORGANIZATION_ID
다음을 바꿉니다.
ORGANIZATION_ID
: 조직 ID(예:123456789
)CONSTRAINT_NAME
: 커스텀 제약조건의 이름
출력은 다음과 비슷합니다.
Deleted custom constraint [organizations/123456789/customConstraints/CONSTRAINT_NAME]
커스텀 제약조건을 삭제하면 해당 제약조건을 사용하여 생성된 모든 정책이 계속 존재하지만 무시됩니다. 삭제된 커스텀 제약조건과 동일한 이름으로 다른 커스텀 제약조건을 만들 수 없습니다.
다음 단계
- 조직 정책 제약조건 알아보기
- 이미지 최신 상태 검사 사용
- 단순 서명 증명 검사 사용
- Sigstore 서명 확인 사용
- SLSA 검사 사용
- 신뢰할 수 있는 디렉터리 검사 사용
- 취약점 검사 사용
- CV 로그 보기