커스텀 제약조건을 사용하여 함수 리소스 관리

조직 관리자는 Cloud Run Functions에 맞춤 제약 조건을 만들 수 있습니다. 조직 정책은 프로젝트, 폴더 또는 조직 수준에서 이러한 맞춤 제약조건을 적용합니다.

조직 정책은 다양한 Google Cloud 서비스에 대한 사전 정의된 제약조건을 제공합니다. 그러나 조직 정책에서 제한되는 특정 필드를 더욱 세부적으로 맞춤설정 가능한 방식으로 제어하려면 커스텀 조직 정책도 만들면 됩니다.

이 페이지에서는 Cloud Functions v2 API를 사용하여 만든 함수에 맞춤 제약 조건을 만들고 프로젝트 수준에서 적용하는 방법을 자세히 설명합니다. 커스텀 조직 정책에 대한 자세한 내용은 커스텀 조직 정책 만들기 및 관리를 참고하세요.

이점

  • 비용 관리: 조직 정책을 사용하여 조직에서 사용할 수 있는 VM 인스턴스, 디스크 크기, 유형을 제한합니다. 또한 VM 인스턴스에 사용되는 머신 계열을 제한할 수 있습니다.
  • 보안, 규정 준수, 거버넌스:
    • 보안 요구사항을 적용하려면 VM에서 특정 방화벽 포트 규칙이 필요합니다.
    • 하드웨어 격리 또는 라이선싱 규정 준수를 지원하기 위해서는 특정 프로젝트 또는 폴더 내에서 모든 VM이 단독 테넌트 노드에서 실행되도록 설정할 수 있습니다.
    • 자동 스크립트를 제어하기 위해서는 커스텀 조직 정책을 사용하여 라벨이 필요한 표현식과 일치하는지 확인할 수 있습니다.

정책 상속

조직 정책이 리소스에 적용되면 리소스의 모든 하위 항목도 조직 정책을 상속합니다. 예를 들어 폴더에 정책을 적용하면 Google Cloud가 폴더의 모든 프로젝트에 정책을 적용합니다. 이 동작 및 이를 변경하는 방법에 대한 자세한 내용은 계층 구조 평가 규칙을 참조하세요.

가격 책정

사전 정의된 조직 정책과 커스텀 조직 정책을 포함한 조직 정책 서비스는 무료로 제공됩니다.

제한사항

맞춤 조직 정책에는 다음과 같은 제한사항이 적용됩니다.

  • 일괄 삽입 API를 사용할 때는 VM 인스턴스 이름에 적용되지 않습니다.
  • Compute Engine 리소스의 CREATE 메서드에만 적용됩니다.
  • Cloud Functions v2 API에서만 사용할 수 있습니다. Cloud Run Functions(1세대)에는 적용할 수 없습니다.
  • Cloud Functions v2 API를 사용할 때만 함수를 보호합니다. Cloud Run Functions는 Cloud Run API에서도 수정할 수 있습니다. 추가 보호를 위해 Cloud Run에 맞춤 제약조건을 적용해야 할 수도 있습니다.

시작하기 전에

필요한 역할

커스텀 제약조건 만들기

커스텀 제약조건은 조직 정책을 적용하는 서비스에서 지원되는 리소스, 메서드, 조건, 작업을 사용하여 YAML 파일에서 정의됩니다. 커스텀 제약조건의 조건은 Common Expression Language(CEL)를 사용하여 정의됩니다. CEL을 사용해서 커스텀 제약 조건에서 조건을 빌드하는 방법은 커스텀 제약 조건 만들기 및 관리의 CEL 섹션을 참조하세요.

최대 인스턴스가 150을 초과하는 모든 함수 생성을 거부하는 맞춤 제약조건을 지정하려면 다음 단계를 따르세요.

  • 다음 콘텐츠로 새 maxInstanceConstraint.yaml 파일을 만듭니다.

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - cloudfunctions.googleapis.com/Function
    methodTypes: 
    - CREATE
    - UPDATE
    condition: resource.serviceConfig.maxInstanceCount > 150
    actionType: DENY
    displayName: Deny functions with max instance count greater than 150
    description: Functions cannot be created with a max instance count greater than 150
    

ORGANIZATION_ID를 조직 ID(예: 123456789)로 바꿉니다.

자세한 내용은 커스텀 제약조건 정의를 참조하세요.

커스텀 제약조건 설정

새 커스텀 제약조건의 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 리소스에 적용하여 불리언 제약조건을 적용할 수 있습니다.

콘솔

  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.cloudFunctionsMaxInstanceLimit입니다.

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

    gcloud org-policies set-policy POLICY_PATH
    

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

커스텀 조직 정책 테스트

최대 인스턴스가 151인 함수를 만들려면 다음 명령어를 실행합니다.

gcloud functions deploy FUNCTION_NAME \
  ...
  --max-instances 151

다음 출력이 표시됩니다.

 Operation denied by custom org policy on resource: ["customConstraints/custom.cloudFunctionsMaxInstanceLimit": "Cloud Functions cannot be created with a max instance count greater than 150."]

Cloud Run Functions 지원 리소스 및 작업

리소스 유형 메서드 유형 API 참조
cloudfunctions.googleapis.com/Function CREATE, UPDATE projects.locations.functions

일반적인 조직 정책 예시

다음 표에서는 유용한 몇 가지 커스텀 조직 정책 문법을 제공합니다.

설명 제약조건 문법
특정 언어로 함수가 생성되지 않도록 방지
    name: organizations/ORGANIZATION_IDcustomConstraints/custom.cloudFunctionRuntimeBlock
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.runtime == "python312"
    action_type: DENY
    display_name: Deny functions using Python 3.12
    description: Functions cannot be created with Python 3.12 as the language runtime
함수가 특정 작업자 풀을 사용하도록 요구
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsWorkerPool
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.workerPool == "WORKER_POOL"
    action_type: DENY
    display_name: Require worker pool
    description: Functions must use a worker pool 
WORKER_POOL을 Cloud Build 워커 풀의 이름으로 바꿉니다.
함수가 모든 컨테이너 이미지를 특정 이미지 저장소에 저장하도록 요구
    name: organizations/ORGANIZATION_ID/customConstraints/custom.cloudFunctionsRepository
    resource_types: cloudfunctions.googleapis.com/Function
    method_types:
      - CREATE
      - UPDATE
    condition: resource.buildConfig.dockerRepository.startsWith("REPO_PATH")
    action_type: DENY
    display_name: Image repository constraint
    description: Functions must push images to a central image repository under REPO_PATH
REPO_PATH를 모든 함수가 컨테이너 이미지를 저장할 이미지 저장소 URL의 URI로 바꿉니다.

다음 단계