관리형 제약 조건

관리형 제약 조건은 최신 플랫폼에 빌드된 사전 정의된 조직 정책으로, Compute Engine 리소스를 중앙에서 프로그래매틱 방식으로 제어할 수 있습니다. 여기에는 정책 시뮬레이터 및 드라이런과 같은 안전한 출시 도구를 위한 기본 제공 지원이 포함됩니다.

관리형 제약 조건은 compute.managed.* 접두사로 식별할 수 있으며 기존 compute.* 제약 조건을 직접 대체합니다.

이점

  • 안전한 출시 및 모니터링: 전체 도구로 정책을 구현하고, 더 빠른 변경 관리, 시뮬레이션 및 시험 실행 기능을 사용하여 점진적으로 배포합니다.
  • 일관된 로깅: 로깅 및 오류 메시지의 통일성을 적용하여 중앙 집중식 모니터링을 간소화하고 감사를 간소화합니다.

정책 상속

리소스에 설정된 조직 정책은 리소스 계층 구조에서 해당 리소스의 하위 요소에 상속됩니다. 예를 들어 폴더에 정책을 적용하면 Google Cloud 가 해당 폴더의 모든 프로젝트에 정책을 적용합니다.

가격 책정

사전 정의된 (기존), 관리형, 맞춤 조직 정책을 포함한 조직 정책 서비스는 무료로 제공됩니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인합니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI를 설치합니다. 설치 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

      gcloud init

      외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

    2. Set a default region and zone.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치합니다. 설치 후 다음 명령어를 실행하여 Google Cloud CLI를 초기화합니다.

      gcloud init

      외부 ID 공급업체(IdP)를 사용하는 경우 먼저 제휴 ID로 gcloud CLI에 로그인해야 합니다.

    자세한 내용은 Google Cloud 인증 문서의 REST 사용을 위한 인증을 참조하세요.

  • 조직 ID를 알고 있어야 합니다.
  • 아직 수행하지 않은 경우 gcloud CLI를 설치하고 gcloud init를 실행하여 초기화합니다.
  • 테스트의 기본 프로젝트를 설정합니다.

필요한 역할

관리 제약 조건으로 조직 정책을 관리하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 관리 제약 조건으로 조직 정책을 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

관리 제약 조건으로 조직 정책을 관리하려면 다음 권한이 필요합니다.

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • 제약조건을 테스트하려면 필요한 역할:
    • 프로젝트에 대한 compute.instances.create 권한
    • 커스텀 이미지를 사용하여 VM 만들기: 이미지에 대한 compute.images.useReadOnly 권한
    • 스냅샷을 사용하여 VM 만들기: 스냅샷에 대한 compute.snapshots.useReadOnly 권한
    • 인스턴스 템플릿을 사용하여 VM 만들기: 인스턴스 템플릿에 대한 compute.instanceTemplates.useReadOnly 권한
    • VM에 기존 네트워크 할당: 프로젝트에 대한 compute.networks.use 권한
    • VM의 고정 IP 주소 지정: 프로젝트에 대한 compute.addresses.use 권한
    • 기존 네트워크 사용 시 VM에 외부 IP 주소 할당: 프로젝트에 대한 compute.networks.useExternalIp 권한
    • VM의 서브넷 지정: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.use 권한
    • VPC 네트워크를 사용할 때 VM에 외부 IP 주소 할당: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.useExternalIp 권한
    • VM에 VM 인스턴스 메타데이터 설정: 프로젝트에 대한 compute.instances.setMetadata 권한
    • VM에 태그 설정: VM에 대한 compute.instances.setTags 권한
    • VM에 라벨 설정: VM에 대한 compute.instances.setLabels 권한
    • VM에 사용할 서비스 계정 설정: VM에 대한 compute.instances.setServiceAccount 권한
    • VM의 새 디스크 만들기: 프로젝트에 대한 compute.disks.create 권한
    • 기존 디스크를 읽기 전용 또는 읽기-쓰기 모드로 연결: 디스크에 대한 compute.disks.use 권한
    • 기존 디스크를 읽기 전용 모드로 연결: 디스크에 대한 compute.disks.useReadOnly 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

사용 가능한 관리형 제약 조건

Compute Engine에는 다음과 같은 관리 조직 정책 제약 조건이 제공됩니다.

제약조건 설명
허용되는 VLAN 연결 암호화 설정

이 목록 제약조건은 새 VLAN 연결에 허용되는 암호화 설정을 정의합니다.
기본적으로 VLAN 연결은 모든 암호화 설정을 사용하도록 허용됩니다.
암호화된 VLAN 연결만 만들도록 강제하려면 IPSEC를 허용 값으로 설정합니다.

constraints/compute.managed.allowedVlanAttachmentEncryption
Compute Engine 미리보기 기능 차단

이 제약 조건은 이 제약 조건이 명시적으로 허용되지 않는 한 미리보기 기능이 차단되도록 합니다. 허용으로 설정하면 프로젝트에 대해 개별적으로 사용 설정 또는 중지할 수 있는 미리보기 기능을 제어할 수 있습니다. 프로젝트에서는 사용 설정된 미리보기 기능만 액세스할 수 있습니다. 이후에 정책을 사용 중지해도 이미 설정된 개별 미리보기 기능의 상태는 변경되지 않으며 개별적으로 사용 중지할 수 있습니다. 이 제약 조건은 Compute 알파 API 기능에만 적용됩니다.

constraints/compute.managed.blockPreviewFeatures
VM 중첩 가상화 사용 중지

[공개 미리보기] 이 불리언 제약 조건이 True로 설정된 조직, 프로젝트 또는 폴더에 속한 모든 Compute Engine VM에서 하드웨어 가속 중첩 가상화가 사용 중지됩니다.
기본적으로 하드웨어 가속 중첩 가상화는 CPU가 Intel Haswell 이상인 플랫폼에서 실행되는 모든 Compute Engine VM에 허용됩니다.

constraints/compute.managed.disableNestedVirtualization
VM 직렬 포트 액세스 메타데이터 사용 설정 제한

미리보기: 이 제약 조건은 제약 조건이 적용되는 조직, 프로젝트 또는 폴더 내 Compute Engine VM에 대해 serial-port-enable 메타데이터 키가 true로 설정되는 것을 방지합니다. 기본적으로 이 메타데이터 키를 사용하여 VM, 영역 또는 프로젝트 단위로 직렬 포트 액세스를 사용 설정할 수 있습니다. 특정 VM의 직렬 포트 액세스를 허용하려면 태그와 조건부 규칙을 사용하여 이 정책에서 제외하면 됩니다.
중요: 이 제약 조건을 적용해도 serial-port-enable이 이미 true로 설정된 기존 VM에는 영향을 미치지 않습니다. 메타데이터가 업데이트되지 않는 한 액세스 권한이 유지됩니다.

constraints/compute.managed.disableSerialPortAccess
Stackdriver에 VM 직렬 포트 로깅 사용 중지

[공개 미리보기] 이 제약 조건을 적용하면 Compute Engine VM에서 Stackdriver로의 직렬 포트 로깅이 사용 중지됩니다.
기본적으로 Compute Engine VM의 직렬 포트 로깅이 사용 중지되며, 메타데이터 속성을 사용하여 VM 또는 프로젝트 단위로 선별적으로 사용 설정할 수 있습니다. 직렬 포트 로깅을 중지하면 Google Kubernetes Engine 클러스터와 같이 이 기능을 사용하는 특정 서비스가 올바르게 작동하지 않을 수 있습니다. 이 제약조건을 적용하기 전에 프로젝트의 제품이 직렬 포트 로깅을 사용하지 않는지 확인하세요. 특정 VM 인스턴스가 직렬 포트 로깅을 사용하도록 허용할 수 있습니다. 먼저 태그를 적용하여 인스턴스를 표시한 다음 태그 값을 기반으로 하는 조건부 규칙을 사용하여 인스턴스를 정책 시행 범위에서 적절하게 제외합니다.

constraints/compute.managed.disableSerialPortLogging
영역 전용 DNS 설정이 있는 프로젝트의 전역 내부 DNS (gDNS) 사용을 제한합니다.

[공개 미리보기] 이 제약 조건은 적용 시 gDNS 사용을 제한합니다. 이 제한사항은 gDNS VM 생성과 gDNS를 사용하도록 VM 업데이트를 사용 중지합니다. zDNS 프로젝트를 gDNS로 되돌리는 것은 차단되지 않지만, 이후 인스턴스 API 호출 중에 정책 위반이 적용됩니다.

constraints/compute.managed.disallowGlobalDns
OS 구성 필요

[공개 미리보기] 이 제약 조건이 적용되면 모든 새 프로젝트에서 VM Manager (OS 구성)를 사용 설정해야 합니다. 신규 및 기존 프로젝트에서 이 제약조건을 설정하면 프로젝트, 프로젝트-영역 또는 인스턴스 수준에서 VM Manager를 사용 중지하는 메타데이터 업데이트가 방지됩니다. 특정 VM 인스턴스에서 VM Manager를 사용 중지하도록 허용할 수 있습니다. 먼저 태그를 적용하여 인스턴스를 표시한 다음 태그 값을 기반으로 하는 조건부 규칙을 사용하여 인스턴스를 정책 시행 범위에서 적절하게 제외합니다.

constraints/compute.managed.requireOsConfig
OS 로그인 필요

[공개 미리보기] 이 제약 조건이 적용되면 새로 만든 모든 프로젝트에 OS 로그인을 사용 설정해야 합니다. 신규 및 기존 프로젝트에서 이 제약조건을 설정하면 프로젝트, 프로젝트-리전 또는 인스턴스 수준에서 OS 로그인을 사용 중지하는 메타데이터 업데이트가 방지됩니다. 특정 VM 인스턴스에서 OS 로그인을 사용 중지하도록 허용할 수 있습니다. 먼저 태그를 적용하여 인스턴스를 표시한 다음 태그 값을 기반으로 하는 조건부 규칙을 사용하여 인스턴스를 정책 시행 범위에서 적절하게 제외합니다.

constraints/compute.managed.requireOsLogin
프로토콜 전달 사용을 제한합니다.

이 제약조건을 사용하면 조직에서 만들 수 있는 프로토콜 전달 배포 유형 (내부 또는 외부)을 제한할 수 있습니다. 제약 조건을 구성하려면 허용할 프로토콜 전달 배포 유형의 허용 목록을 지정합니다. 허용 목록에는 다음 값만 포함할 수 있습니다.

  • 내부
  • 외부
. 예를 들어 허용 목록이 INTERNAL로 설정된 경우 사용자는 내부 프로토콜 전달만 설정할 수 있습니다. 즉, 대상 인스턴스와 연결된 모든 전달 규칙은 INTERNAL 부하 분산 스키마로 제한되며 내부 IP 주소만 사용해야 합니다.

constraints/compute.managed.restrictProtocolForwardingCreationForTypes
VM IP 전달 제한

[공개 미리보기] 이 제약 조건은 Compute Engine VM 인스턴스가 IP 전달을 사용 설정할 수 있는지 여부를 정의합니다. 기본적으로 정책이 지정되지 않은 경우 모든 VM이 모든 가상 네트워크에서 IP 전달을 사용 설정할 수 있습니다. 이 제약 조건이 적용되면 IP 전달이 사용 설정된 VM 인스턴스의 생성 또는 업데이트가 거부됩니다. 특정 VM 인스턴스에서 IP 전달을 사용 설정하도록 허용할 수 있습니다. 먼저 태그를 적용하여 인스턴스를 표시한 다음 태그 값을 기반으로 하는 조건부 규칙을 사용하여 인스턴스를 정책 시행 범위에서 적절하게 제외합니다.

constraints/compute.managed.vmCanIpForward
VM 인스턴스의 외부 IP 제한

[공개 미리보기] 이 제약 조건은 Compute Engine VM 인스턴스가 IPv4 외부 IP 주소를 사용할 수 있는지 여부를 정의합니다. 기본적으로 모든 VM 인스턴스에서 외부 IP 주소를 사용할 수 있습니다. 이 제약 조건이 적용되면 IPv4 외부 IP 주소가 있는 VM 인스턴스의 생성 또는 업데이트가 거부됩니다. 이 제약 조건은 IPv6 외부 IP 주소의 사용을 제한하지 않습니다. 특정 VM 인스턴스에서 외부 IPv4 IP 주소를 사용하도록 허용할 수 있습니다. 먼저 태그를 적용하여 인스턴스를 표시한 다음 태그 값을 기반으로 하는 조건부 규칙을 사용하여 인스턴스를 정책 시행 범위에서 적절하게 제외합니다.

constraints/compute.managed.vmExternalIpAccess

계층적 메타데이터 평가

OS 로그인 또는 직렬 포트 액세스와 같은 사전 정의된 메타데이터 키를 사용하는 관리형 제약 조건은 계층적 평가를 지원합니다. Compute Engine이 이러한 제약 조건을 평가할 때는 VM 인스턴스, 프로젝트 또는 영역 수준에서 설정된 메타데이터 값을 확인합니다.

프로젝트 또는 영역 수준에서 메타데이터 값을 설정하면 대규모로 VM 인스턴스를 관리할 수 있습니다. 하지만 제약 조건 적용은 VM 인스턴스 생성 또는 업데이트 API 호출 중에만 발생합니다. 따라서 프로젝트 또는 영역 메타데이터의 변경사항은 인스턴스가 생성되거나 업데이트될 때만 VM 인스턴스의 제약 조건 준수에 영향을 미칩니다.

메타데이터 기반 제약 조건 및 수준

제약조건 메타데이터 키 메타데이터 계층 구조 수준
compute.managed.disableSerialPortAccess serial-port-enable 프로젝트, 영역, 인스턴스
compute.managed.requireOsLogin enable-oslogin 프로젝트, 영역, 인스턴스
compute.managed.disableGuestAttributesAccess enable-guest-attributes 프로젝트, 영역, 인스턴스
compute.managed.requireOsConfig enable-osconfig 프로젝트, 영역, 인스턴스
compute.managed.disallowGlobalDns VmDnsSetting 프로젝트, 인스턴스

안전한 출시: 정책 수명 주기

새 제약 조건을 점진적으로 구현할 때 서비스 중단을 방지하려면 다음 단계에 따라 관리 제약 조건을 구현하는 것이 좋습니다.

정책 시뮬레이터로 분석

정책을 시행하기 전에 정책 시뮬레이터를 사용하여 정책을 위반하는 기존 리소스를 확인하세요. 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 필터 막대에서 제약 조건을 검색한 다음 제약 조건 이름을 클릭하여 정책 세부정보 페이지로 이동합니다.

  3. 변경사항 테스트를 클릭하여 시뮬레이션 보고서를 생성합니다.

  4. 계층적 메타데이터 변경사항이 VM 메타데이터 설정에 대한 제약 조건의 시뮬레이션 보고서에 반영되는 데 몇 시간이 걸릴 수 있습니다.

  5. 보고서를 검토하여 규정을 준수하지 않는 리소스를 재구성하거나 예외를 요청하세요.

테스트 실행으로 검증

테스트 실행 모드는 위반사항을 Cloud Logging에 로깅하지만 제한을 시행하지는 않습니다.

제약 조건을 테스트하려면 다음과 같이 gcloud org-policies set-policy 명령어를 사용합니다.

  1. dryRunSpec을 사용하여 정책 YAML 파일 (예: dry-run-policy.yaml)을 만듭니다.

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    dryRunSpec:
      rules:
      - enforce: true
    

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

  2. 정책을 적용합니다.

    gcloud org-policies set-policy dry-run-policy.yaml
    

전체 시행

정책을 시뮬레이션하고 테스트한 후 리소스에 적용할 수 있습니다. 정책 변경사항이 모든Google Cloud 시스템에 전파되는 데 최대 15분이 걸릴 수 있습니다.

제약 조건 시행 테스트

정책을 설정한 후 gcloud CLI를 사용하여 시행을 확인할 수 있습니다. 예를 들어 compute.managed.requireOsLogin 제약 조건을 테스트하려면 다음 단계를 따르세요.

  1. 기존 정책을 나열하여 구성을 확인합니다.

    gcloud org-policies list --project=PROJECT_ID
    
  2. YAML 파일을 사용하여 시행 정책을 적용합니다.

    gcloud org-policies set-policy enforce_managed_constraint.yaml
    
  3. 변이 API를 호출하여 시행을 확인합니다. 규정을 준수하지 않는 메타데이터로 VM 인스턴스를 만들려고 하면 실패해야 합니다.

    gcloud compute instances create VM_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --metadata=enable-oslogin=false
    

    다음을 바꿉니다.

    • VM_NAME: 새 VM 인스턴스의 이름입니다.
    • MACHINE_TYPE: 유효한 머신 유형(예: e2-micro)
    • IMAGE_FAMILY: 유효한 이미지 계열(예: debian-11)입니다.
    • IMAGE_PROJECT: 이미지 계열의 프로젝트입니다(예: debian-cloud).
  4. 오류 메시지를 확인하세요. 위반된 특정 제약 조건을 나타내는 거부가 표시됩니다. ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]

태그를 사용한 조건부 예외

태그를 사용하여 비즈니스 요구사항에 따라 특정 리소스에 예외를 부여할 수 있습니다. 이 예시에서는 osLoginOptional라는 태그를 사용하여 OS 로그인 요구사항에서 제외된 리소스를 식별합니다. 이 태그를 true 값과 함께 리소스에 바인딩하면 정책이 나머지 환경에 엄격하게 적용되는 동안에도 조직 정책에서 OS 로그인이 사용 설정되지 않은 특정 리소스가 존재하도록 허용합니다.

태그를 사용하여 예외를 부여하려면 다음 단계를 따르세요.

  1. 태그 만들기: gcloud CLI를 사용하여 태그 키와 태그 값을 만듭니다.

    1. 태그 키를 만듭니다.

      gcloud resource-manager tags keys create osLoginOptional \
          --parent=organizations/ORGANIZATION_ID
      
    2. 태그 값을 만듭니다.

      gcloud resource-manager tags values create true \
          --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
      

    ORGANIZATION_ID를 조직 ID로 바꿉니다.

  2. 태그를 리소스에 바인딩합니다. compute.managed.requireOsLogin 제약 조건에서 프로젝트를 제외하려면 gcloud resource-manager tags bindings create 명령어를 사용하여 osLoginOptional=true 태그를 프로젝트에 바인딩합니다.

    gcloud resource-manager tags bindings create \
        --tag-value=ORGANIZATION_ID/osLoginOptional/true \
        --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \
        --location=global
    

    ORGANIZATION_ID를 조직 ID로 바꾸고 PROJECT_ID를 제외하려는 프로젝트의 ID로 바꿉니다.

    태그를 다른 리소스에 바인드하는 방법을 알아보려면 리소스에 태그 바인드를 참고하세요.

  3. 정책 업데이트: 조건부 규칙을 포함하도록 정책 YAML 파일 (예: policy.yaml)을 만들거나 업데이트합니다.

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    spec:
      rules:
      - condition:
          expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')"
        enforce: false
      - enforce: true
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • ORGANIZATION_ID: 조직 ID입니다.
  4. 정책 적용: 다음 gcloud CLI 명령어를 사용하여 구성을 활성화합니다.

    gcloud org-policies set-policy policy.yaml
    

기존 제약 조건에서 마이그레이션

마이그레이션할 때 관리형 제약 조건은 기존 정책의 동작을 개선하지만 정확히 복제하지는 않습니다. 관리형 제약 조건은 리소스를 생성하거나 수정하는 API 요청 중에만 위반사항을 확인하여 예측 가능성을 높입니다. 요청이 제약 조건을 위반하면 API 호출이 명확한 오류와 함께 실패합니다. 이는 작업의 다양한 단계에서 적용되거나 리소스 속성으로 사용되어 적용 동작을 예측하기 어려웠던 기존 정책과 다릅니다.

기존 compute.* 제약 조건에서 최신 compute.managed.*에 상응하는 제약 조건으로 이동할 때는 다음 단계에 따라 의도치 않은 제한 강화가 발생하지 않도록 하세요.

  1. 발견: 새로운 관리형 제약 조건 대안을 식별합니다.
  2. 분석 및 검증: 앞에서 설명한 대로 정책 시뮬레이터와 테스트 실행을 사용합니다.
  3. 관리 제약 조건 적용: 기존 제약 조건과 함께 새 관리 제약 조건을 적용합니다.
  4. 기존 정책을 삭제합니다.
    • Google Cloud 콘솔에서 애셋 인벤토리로 이동하고 orgpolicy.Policy 및 기존 제약 조건 이름으로 필터링하여 기존 제약 조건을 사용하는 모든 정책을 식별합니다.
    • 기존 제약 조건을 사용하는 모든 정책을 삭제합니다. 정책을 삭제하면 해당 정책이 해당 제약 조건에 대해 Google에서 관리하는 기본 동작으로 재설정됩니다.

다음 단계