조직 관리자는 Cloud Run 서비스 및 작업에 커스텀 제약 조건을 만들 수 있습니다. 조직 정책은 프로젝트, 폴더 또는 조직 수준에서 이러한 커스텀 제약 조건을 적용합니다.
이 페이지에서는 서비스 및 작업에 커스텀 제약 조건을 만들고 프로젝트 수준에서 적용하는 방법을 자세히 설명합니다. 커스텀 조직 정책에 대한 자세한 내용은 커스텀 조직 정책 만들기 및 관리를 참조하세요.
Cloud Run을 사용하면 Cloud Run Admin API에서 사용자 구성 필드 대부분을 사용하여 원하는 수만큼 커스텀 제약 조건을 작성할 수 있습니다. 예를 들어 서비스이나 작업에서 출시 단계를 알파 또는 베타로 설정하지 못하도록 커스텀 제약 조건을 만들 수 있습니다.
적용되면 요청이 커스텀 제약 조건이 적용되는 정책을 위반하면 gcloud CLI 및 Cloud Run 로그에 오류 메시지가 표시됩니다. 오류 메시지에는 제약 조건 ID와 위반한 커스텀 제약 조건에 대한 설명이 포함됩니다.
시작하기 전에
- 고객 조직 정책을 만들고 보려면 조직 정책 관리자 역할
roles/orgpolicy.policyAdmin
이 있어야 합니다. 필수 역할을 참조하세요.
제한사항
- Cloud Run Admin API v1 필드 사양을 사용하여 Cloud Run 커스텀 제약 조건을 지정해야 합니다.
- 라벨 및 최상위 필드는 지원되지 않습니다.
일반적인 제약 조건 맞춤설정
다음 예시에서는 gcloud CLI를 사용하여 일반적인 사용 사례에 맞게 커스텀 제약조건을 지정하는 방법을 보여줍니다. Google Cloud 콘솔 안내는 커스텀 조직 정책 만들기 및 관리를 참조하세요.
- 인그레스 설정 제한
- 최대 메모리 한도 필요
- 정식 버전 이외의 출시 단계 방지
- Binary Authorization 필요
- 모든 컨테이너에 대한 활성 프로브 요구
- 컨테이너 이미지 프리픽스 및 포트를 통한 사이드카 필요
인그레스 설정 제한
새 Cloud Run 서비스나 수정된 Cloud Run 서비스의 인그레스 설정을 제한하는 커스텀 제약 조건을 만든 후 프로젝트 수준에서 커스텀 제약 조건을 적용합니다.
Google Cloud CLI를 사용하여 서비스를 '내부'로 설정해야 하는 커스텀 제약 조건을 지정하려면 다음 단계를 수행합니다.
다음 콘텐츠로 새
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로 바꿉니다.
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /ingressConstraint.yaml
다음 콘텐츠로 새
enforceIngressConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/ingressInternal spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceIngressConstraint.yaml
최대 메모리 한도 필요
새 Cloud Run 서비스나 수정된 Cloud Run 서비스의 모든 컨테이너에는 특정 값 미만으로 메모리 한도가 설정되어야 합니다.
Google Cloud CLI를 사용하여 서비스 컨테이너에 커스텀 메모리 한도를 적용하려면 다음 단계를 수행합니다.
다음 콘텐츠로 새
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: 설정하려는 메모리 한도
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /memorylimitConstraint.yaml
다음 콘텐츠로 새
enforceMemorylimitConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/custom.memoryLimit spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceMemorylimitConstraint.yaml
정식 버전 이외의 출시 단계 방지
Cloud Run 출시 단계가 기본 정식 버전에서 알파 또는 베타로 변경되지 않도록 합니다.
출시 단계가 정식 버전이 아닌 출시 단계로 설정되지 않게 하려면 다음을 수행합니다.
다음 콘텐츠로 새
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로 바꿉니다.
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /launchstageConstraint.yaml
다음 콘텐츠로 새
enforceLaunchstageConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/launchStage spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceLaunchstageConstraint.yaml
Binary Authorization 필요
Binary Authorization을 default
로 설정해야 합니다.
Binary Authorization을 default
로 설정하려면 다음 단계를 수행합니다.
다음 콘텐츠로 새
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로 바꿉니다.
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /binaryauthorizationConstraint.yaml
다음 콘텐츠로 새
enforceBinaryauthorizationConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/binaryAuthorization spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceBinaryauthorizationConstraint.yaml
모든 컨테이너에 대한 활성 프로브 요구
livenessProbe.initialDelaySeconds
필드가 값으로 설정되도록 요구하여 서비스에 모든 컨테이너에 대한 활성 프로브가 있어야 한다고 요구합니다.
모든 컨테이너에 대한 활성 프로브를 요구하려면 다음 단계를 수행합니다.
다음 콘텐츠로 새
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로 바꿉니다.
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /livenessprobeConstraint.yaml
다음 콘텐츠로 새
enforceLivenessprobeConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/livenessProbe spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceLivenessprobeConstraint.yaml
컨테이너 이미지 프리픽스 및 포트를 통한 사이드카 필요
서비스에 지정된 프리픽스로 시작하는 이미지와 지정된 숫자와 동일한 포트를 사용하는 사이드카 컨테이너가 최소 하나 이상 있어야 합니다.
컨테이너가 설정된 프리픽스로 시작하고 PORT = 8081
을 사용하도록 하려면 다음 단계를 수행합니다.
다음 콘텐츠로 새
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로 바꿉니다.
다음 명령어를 실행하여 커스텀 제약 조건을 추가합니다.
gcloud org-policies set-custom-constraint /requireSidecarConstraint.yaml
다음 콘텐츠로 새
enforceRequireSidecarConstraint.yaml
파일을 만들어 이전 단계에서 만든 커스텀 제약 조건을 적용하는 새 정책을 지정합니다.name: projects/PROJECT_ID/policies/requireSidecar spec: rules: - enforce: true
PROJECT_ID를 프로젝트의 ID로 바꿉니다.
다음 명령어를 실행하여 새 정책을 설정합니다.
gcloud org-policies set-policy /enforceRequireSidecarConstraint.yaml