프로젝트에 커스텀 제약조건 적용

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

이 페이지에서는 서비스 및 작업에 커스텀 제약 조건을 만들고 프로젝트 수준에서 적용하는 방법을 자세히 설명합니다. 커스텀 조직 정책에 대한 자세한 내용은 커스텀 조직 정책 만들기 및 관리를 참조하세요.

Cloud Run을 사용하면 Cloud Run Admin API에서 사용자 구성 필드 대부분을 사용하여 원하는 수만큼 커스텀 제약 조건을 작성할 수 있습니다. 예를 들어 서비스이나 작업에서 출시 단계를 알파 또는 베타로 설정하지 못하도록 커스텀 제약 조건을 만들 수 있습니다.

적용되면 요청이 커스텀 제약 조건이 적용되는 정책을 위반하면 gcloud CLI 및 Cloud Run 로그에 오류 메시지가 표시됩니다. 오류 메시지에는 제약 조건 ID와 위반한 커스텀 제약 조건에 대한 설명이 포함됩니다.

시작하기 전에

  • 고객 조직 정책을 만들고 보려면 조직 정책 관리자 역할 roles/orgpolicy.policyAdmin이 있어야 합니다. 필수 역할을 참조하세요.

제한사항

일반적인 제약 조건 맞춤설정

다음 예시에서는 gcloud CLI를 사용하여 일반적인 사용 사례에 맞게 커스텀 제약조건을 지정하는 방법을 보여줍니다. Google Cloud 콘솔 안내는 커스텀 조직 정책 만들기 및 관리를 참조하세요.

인그레스 설정 제한

새 Cloud Run 서비스나 수정된 Cloud Run 서비스의 인그레스 설정을 제한하는 커스텀 제약 조건을 만든 후 프로젝트 수준에서 커스텀 제약 조건을 적용합니다.

Google Cloud CLI를 사용하여 서비스를 '내부'로 설정해야 하는 커스텀 제약 조건을 지정하려면 다음 단계를 수행합니다.

  1. 다음 콘텐츠로 새 ingressConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.ingressInternal
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/ingress' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/ingress'] == 'internal'"
      actionType: ALLOW
      displayName: IngressInternal
      description: Require ingress to be set to internal

    ORGANIZATION_ID를 조직의 ID로 바꿉니다.

  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

    gcloud org-policies set-custom-constraint /ingressConstraint.yaml
  3. 다음 콘텐츠로 새 enforceIngressConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

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

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceIngressConstraint.yaml

최대 메모리 한도 필요

새 Cloud Run 서비스나 수정된 Cloud Run 서비스의 모든 컨테이너에는 특정 값 미만으로 메모리 한도가 설정되어야 합니다.

Google Cloud CLI를 사용하여 서비스 컨테이너에 커스텀 메모리 한도를 적용하려면 다음 단계를 수행합니다.

  1. 다음 콘텐츠로 새 memorylimitConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.memoryLimit
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, 'memory' in container.resources.limits && container.resources.limits['memory'] <= 'MEMORY_LIMIT')"
      actionType: ALLOW
      displayName: memoryLimitCap
      description: Require the container memory limit to be set to <= MEMORY_LIMIT

    다음과 같이 바꿉니다.

    • ORGANIZATION_ID: 조직 ID
    • MEMORY_LIMIT: 설정하려는 메모리 한도
  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

    gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
  3. 다음 콘텐츠로 새 enforceMemorylimitConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

      name: projects/PROJECT_ID/policies/custom.memoryLimit
      spec:
        rules:
          - enforce: true

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml

정식 버전 이외의 출시 단계 방지

Cloud Run 출시 단계가 기본 정식 버전에서 알파 또는 베타로 변경되지 않도록 합니다.

출시 단계가 정식 버전이 아닌 출시 단계로 설정되지 않게 하려면 다음을 수행합니다.

  1. 다음 콘텐츠로 새 launchstageConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.launchStage
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "!('run.googleapis.com/launch-stage' in resource.metadata.annotations)"
      actionType: ALLOW
      displayName: launchStage
      description: Only allow unset launch stage (default is GA).

    ORGANIZATION_ID를 조직의 ID로 바꿉니다.

  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

    gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
  3. 다음 콘텐츠로 새 enforceLaunchstageConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

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

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml

Binary Authorization 필요

Binary Authorizationdefault로 설정해야 합니다.

Binary Authorization을 default로 설정하려면 다음 단계를 수행합니다.

  1. 다음 콘텐츠로 새 binaryauthorizationConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.binaryAuthorization
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "'run.googleapis.com/binary-authorization' in resource.metadata.annotations && resource.metadata.annotations['run.googleapis.com/binary-authorization'] == 'default'"
      actionType: ALLOW
      displayName: binaryAuthorization
      description: Require binaryAuthorization to be set to default.

    ORGANIZATION_ID를 조직의 ID로 바꿉니다.

  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

    gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
  3. 다음 콘텐츠로 새 enforceBinaryauthorizationConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

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

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml

모든 컨테이너에 대한 활성 프로브 요구

livenessProbe.initialDelaySeconds 필드가 값으로 설정되도록 요구하여 서비스에 모든 컨테이너에 대한 활성 프로브가 있어야 한다고 요구합니다.

모든 컨테이너에 대한 활성 프로브를 요구하려면 다음 단계를 수행합니다.

  1. 다음 콘텐츠로 새 livenessprobeConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.livenessProbe
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.all(container, has(container.livenessProbe.initialDelaySeconds))"
      actionType: ALLOW
      displayName: livenessProbe
      description: Require all containers to have a liveness probe configured with initialDelaySeconds.

    ORGANIZATION_ID를 조직의 ID로 바꿉니다.

  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

    gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
  3. 다음 콘텐츠로 새 enforceLivenessprobeConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

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

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml

컨테이너 이미지 프리픽스 및 포트를 통한 사이드카 필요

서비스에 지정된 프리픽스로 시작하는 이미지와 지정된 숫자와 동일한 포트를 사용하는 사이드카 컨테이너가 최소 하나 이상 있어야 합니다.

컨테이너가 설정된 프리픽스로 시작하고 PORT = 8081을 사용하도록 하려면 다음 단계를 수행합니다.

  1. 다음 콘텐츠로 새 requireSidecarConstraint.yaml 파일을 만듭니다.

      name: organizations/ORGANIZATION_ID/customConstraints/custom.requireSidecar
      resourceTypes:
      - run.googleapis.com/Service
      methodTypes:
      - CREATE
      - UPDATE
      condition: "resource.spec.template.spec.containers.exists(container, container.image.startsWith('us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/') && container.ports.exists(port, port.containerPort == 8081))"
      actionType: ALLOW
      displayName: requireSidecar
      description: Require at least one container with an image that starts with "us-docker.pkg.dev/cloud-ops-agents-artifacts/cloud-run-gmp-sidecar/" and uses port 8081

    ORGANIZATION_ID를 조직의 ID로 바꿉니다.

  2. 다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.

      gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
      

  3. 다음 콘텐츠로 새 enforceRequireSidecarConstraint.yaml 파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.

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

    PROJECT_ID를 프로젝트의 ID로 바꿉니다.

  4. 다음 명령어를 실행하여 새 정책을 설정합니다.

    gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml