태그를 사용한 조직 정책 설정

태그를 사용하면 리소스에 특정 태그가 있는지 여부에 따라 조건부로 정책을 허용하거나 거부할 수 있습니다. 태그 및 조직 정책의 조건부 적용을 사용하면 계층 구조 리소스에 대한 중앙 집중식 제어가 가능합니다.

시작하기 전에

태그의 정의와 작동 방식에 대한 자세한 내용은 태그 개요를 참조하세요.

태그를 사용하는 방법에 대한 자세한 안내는 태그 만들기 및 관리를 참조하세요.

태그를 사용한 조직 정책 설정

태그를 사용하여 조직 정책을 적용할 위치를 결정하려면 조직 정책 YAML 파일에 조건을 지정해야 합니다. 조건을 특정 태그 키-값 쌍과 일치하도록 설정할 수 있습니다. 이때 특정 태그 값을 적용할 조직 정책에 설정해야 합니다.

대부분의 조직 정책은 리소스가 생성되거나 업데이트될 때 평가 및 시행됩니다. 태그가 만들어지기 전에 리소스에 태그를 연결할 수 없으므로 조건부 조직 정책은 리소스에 대한 태그를 평가할 수 없으며 상위 리소스에서 상속된 태그에 대해서만 평가할 수 있습니다.

조직, 폴더, 프로젝트 리소스에 대한 태그가 평가됩니다. 리소스 계층 구조에서 프로젝트 아래의 대부분의 리소스는 Cloud Run 서비스와 같은 특정 예외를 제외하고 조직 정책에 의해 평가되지 않습니다. 특정 조직 정책 제약조건에 대한 자세한 내용은 조직 정책 제약조건을 참조하세요.

목록 정책 예시

다음 예시에서는 gcp.resourceLocations 제약조건을 적용하는 조직 정책 파일을 설정하는 방법을 보여줍니다. 이 조직 정책에서는 동일한 정책 파일 내에 설정된 조건부 값과 비조건부 값을 모두 사용합니다.

Console

조직 정책을 설정하려면 다음을 수행합니다.

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

    조직 정책으로 이동

  2. 프로젝트 선택 도구에서 조직 정책을 설정할 프로젝트를 선택합니다.

  3. 조직 정책 페이지의 목록에서 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.

  4. 이 리소스의 조직 정책을 업데이트하려면 정책 관리를 클릭합니다.

  5. 정책 수정 페이지에서 상위 정책 재정의를 선택합니다.

  6. 정책 시행에서 시행 옵션을 선택합니다.

    • 조직 정책을 병합하고 평가하려면 상위 요소와 병합을 선택합니다. 상속과 리소스 계층 구조에 대한 자세한 내용은 계층 구조 평가 이해를 참조하세요.

    • 상위 리소스에서 상속된 정책을 재정의하려면 바꾸기를 선택합니다.

  7. 규칙 추가를 클릭합니다.

  8. 정책 값에서 이 조직 정책을 통해 모든 값을 허용할지 아니면 모든 값을 거부할지 또는 커스텀 값 집합을 지정해야 할지를 선택합니다.

    • 정책이 수락하는 특정 값은 정책이 적용되는 서비스에 따라 다릅니다. 제약조건 및 제약조건이 수락하는 값 목록은 조직 정책 제약조건을 참조하세요.
  9. 필요에 따라 태그로 조직 정책을 조건부로 만들려면 조건 추가를 클릭합니다.

    1. 제목 필드에 조건의 이름을 입력합니다.

    2. 설명 필드에 조건 설명을 입력합니다. 설명에서는 필요한 태그와 태그가 리소스에 미치는 영향에 대한 컨텍스트를 제공합니다.

    3. 조건 작성 도구를 사용하여 제약조건이 적용되도록 특정 태그가 필요한 조건을 만들 수 있습니다.

      1. 조건 유형 상자에서 태그를 선택합니다.

      2. 조건 연산자를 선택합니다. 전체 태그를 일치시키려면 일치 연산자를 사용합니다. 태그 키와 태그 값을 일치시키려면 ID 일치 연산자를 사용합니다.

      3. 일치 연산자를 선택했으면 태그의 네임스페이스 값을 입력합니다. 일치 ID 연산자를 선택했으면 키와 값 ID를 입력합니다.

      4. 추가를 클릭하면 조건을 여러 개 만들 수 있습니다. 다른 조건을 추가하는 경우 And로 전환하여 조건부 논리가 모두 필요하도록 설정할 수 있습니다. Or로 전환하면 조건 중 하나만 참이 되도록 조건부 논리를 설정할 수 있습니다.

      5. 조건 필드 오른쪽에 있는 큰 X를 클릭하여 표현식을 삭제할 수 있습니다.

      6. 조건 수정을 완료했으면 저장을 클릭합니다.

      다음 그림에서는 조건이 포함된 조직 정책 구성 예시를 보여줍니다.

      조직 정책 조건 UI 예시

    4. 조건 편집기를 사용하여 프로그래매틱 방식으로 조건부 표현식을 만드는 데 사용할 수 있습니다. 또한 현재 조건 집합의 프로그래매틱 방식의 렌더링이 표시됩니다.

      1. 조건 편집기를 사용하여 ! 논리 연산자를 적용할 수 있습니다. 예를 들어 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 쿼리에서 조직 정책 제약조건을 us-west1 태그가 없는 모든 리소스에 적용합니다.
  10. 정책을 시행하려면 정책 설정을 클릭합니다.

gcloud

조직 정책을 설정하려면 다음 명령어를 실행하세요.

gcloud org-policies set-policy POLICY_PATH

여기에서 POLICY_PATH는 조직 정책 JSON 파일의 전체 경로이며 다음과 유사합니다.

{
  "name":"RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations",
  "spec":{
    "rules":[
       {
        // As there is no condition specified, this allowedValue is enforced
        // unconditionally.
        "values":{
          "allowedValues": ["us-east1-locations"]
        },
      },
     {
        // This condition applies to the values block.
        "condition":{
          "expression":"resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
        },
        "values":{
          "allowedValues": ["us-west1-locations"]
        }
      }
    ]
  }
}

각 항목의 의미는 다음과 같습니다.

  • RESOURCE_TYPEorganizations, folders 또는 projects입니다.

  • RESOURCE_IDRESOURCE_TYPE에 지정된 리소스 유형에 따라 조직 ID, 폴더 ID, 프로젝트 ID 또는 프로젝트 번호입니다.

  • ORGANIZATION_ID는 태그 키의 상위 조직입니다.

위의 조직 정책의 경우 리소스 및 모든 하위 리소스에는 us-east1-locationsallowedValues만 사용하여 gcp.resourceLocations 제약조건이 적용됩니다. location: us-west1 태그가 있는 이러한 리소스에는 us-east1-locationsus-west1-locationsallowedValues를 사용하여 gcp.resourceLocations 제약조건이 적용됩니다.

이러한 방식으로 단일 조직 정책의 제약조건에 조건부 값과 비조건부 값을 모두 적용할 수 있습니다.

불리언 정책 예시

다음 예시에서는 compute.disableSerialPortAccess 제약조건을 적용하는 조직 정책 파일을 설정하는 방법을 보여줍니다. 이 조직 정책에서는 모든 직렬 포트가 리소스에 액세스할 수 있도록 지정하지만 조건을 사용하여 일치하는 태그가 있는 리소스에만 직렬 포트가 액세스하도록 제한합니다.

Console

조직 정책을 설정하려면 다음을 수행합니다.

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

    조직 정책으로 이동

  2. 프로젝트 선택 도구에서 조직 정책을 설정할 프로젝트를 선택합니다.

  3. 조직 정책 페이지의 목록에서 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.

  4. 이 리소스의 조직 정책을 업데이트하려면 정책 관리를 클릭합니다.

  5. 정책 수정 페이지에서 상위 정책 재정의를 선택합니다.

  6. 규칙 추가를 클릭합니다.

  7. 시행에서 이 조직 정책 시행을 사용 설정할지 여부를 선택합니다.

  8. 필요에 따라 태그로 조직 정책을 조건부로 만들려면 조건 추가를 클릭합니다. 조건부 규칙을 조직 정책에 추가하면 비조건부 규칙을 최소 하나 이상 추가해야 합니다. 그렇지 않으면 정책을 저장할 수 없습니다.

    1. 제목 필드에 조건의 이름을 입력합니다.

    2. 설명 필드에 조건 설명을 입력합니다. 설명에서는 필요한 태그와 태그가 리소스에 미치는 영향에 대한 컨텍스트를 제공합니다.

    3. 조건 작성 도구를 사용하여 제약조건이 적용되도록 특정 태그가 필요한 조건을 만들 수 있습니다.

      1. 조건 유형 상자에서 태그를 선택합니다.

      2. 조건 연산자를 선택합니다. 전체 태그를 일치시키려면 일치 연산자를 사용합니다. 태그 키와 태그 값을 일치시키려면 ID 일치 연산자를 사용합니다.

      3. 일치 연산자를 선택했으면 태그의 네임스페이스 값을 입력합니다. 일치 ID 연산자를 선택했으면 키와 값 ID를 입력합니다.

      4. 추가를 클릭하면 조건을 여러 개 만들 수 있습니다. 다른 조건을 추가하는 경우 And로 전환하여 조건부 논리가 모두 필요하도록 설정할 수 있습니다. Or로 전환하면 조건 중 하나만 참이 되도록 조건부 논리를 설정할 수 있습니다.

      5. 조건 필드 오른쪽에 있는 큰 X를 클릭하여 표현식을 삭제할 수 있습니다.

      6. 조건 수정을 완료했으면 저장을 클릭합니다.

      7. 조건이 적용된 조직 정책에 비조건부 규칙이 하나만 있어야 합니다. 규칙 추가를 클릭하고 이 조직 정책 시행을 기본적으로 사용 설정할지 여부를 설정합니다.

      다음 그림에서는 조건이 포함된 조직 정책 구성 예시를 보여줍니다.

      조직 정책 조건 UI 예시

    4. 조건 편집기를 사용하여 프로그래매틱 방식으로 조건부 표현식을 만드는 데 사용할 수 있습니다. 또한 현재 조건 집합의 프로그래매틱 방식의 렌더링이 표시됩니다.

      1. 조건 편집기를 사용하여 ! 논리 연산자를 적용할 수 있습니다. 예를 들어 !resource.matchTag('ORGANIZATION_ID/location', 'us-west1') 쿼리에서 조직 정책 제약조건을 us-west1 태그가 없는 모든 리소스에 적용합니다.
  9. 조직 정책을 완료하고 적용하려면 저장을 클릭합니다.

gcloud

조직 정책을 설정하려면 다음 명령어를 실행하세요.

gcloud org-policies set-policy POLICY_PATH

여기에서 POLICY_PATH는 조직 정책 JSON 파일의 전체 경로이며 다음과 유사합니다.

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess",
  "spec": {
    "rules": [
      {
        "condition": {
          "expression": "resource.matchTag(\"ORGANIZATION_ID/disableSerialAccess\", \"yes\")"
        },
        "enforce": true
      },
      {
        "enforce": false
      }
    ]
  }
}

각 항목의 의미는 다음과 같습니다.

  • RESOURCE_TYPEorganizations, folders 또는 projects입니다.

  • RESOURCE_ID는 조직 ID, 폴더 ID, 프로젝트 ID 또는 프로젝트 번호입니다.

  • ORGANIZATION_ID는 태그 키의 상위 조직입니다.

위 조직 정책의 경우 리소스와 모든 하위 리소스에는 gcp.disableSerialPortAccess 제약조건이 적용됩니다. disableSerialAccess: yes 태그가 있는 모든 리소스는 조직 정책에 의해 거부됩니다. disableSerialAccess: yes 태그가 없는 리소스에는 제약조건이 적용되지 않습니다.

조직 정책에 조건부 제약조건 추가

태그를 사용하여 연결된 태그를 기준으로 조직 정책 제약조건을 조건부로 리소스에 추가할 수 있습니다. 동일한 조직 정책 내에서 여러 조건을 추가하면 조직 정책을 적용할 리소스를 세분화하여 제어할 수 있습니다.

Common Expression Language(CEL)는 조건식을 지정하는 데 사용되는 표현식 언어입니다. 조건식은 논리 연산자(&&, ||, !)로 결합된 문 하나 이상으로 구성됩니다. 자세한 내용은 CEL 사양언어 정의를 참조하세요.

리소스에 적용된 태그를 기반으로 리소스를 만들 수 있는 위치를 제한하는 조직 정책을 고려하세요. 이렇게 하려면 gcp.resourceLocations 제약조건을 적용하는 조직 정책을 만들고 조건을 사용하여 시행을 특정 리소스로만 좁히세요.

먼저 임시 파일 /tmp/policy.yaml을 만들어 조직 정책을 포함합니다.

name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
    rules:
    - condition:
        expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
      values:
        allowedValues:
        - in:us-east1-locations
    - condition:
        expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
      values:
        allowedValues:
        - in:us-west1-locations
    - values:
        deniedValues:
        - in:asia-south1-locations

ORGANIZATION_ID는 태그 키의 상위 조직입니다.

위 예시에서 location: us-east 태그가 연결된 모든 리소스는 us-east1-locations 값 그룹 내 위치로 제한됩니다. location: us-west 태그가 연결된 모든 리소스는 us-west1-locations 값 그룹 내 위치로 제한됩니다. 조직의 모든 리소스는 asia-south1-locations 값 그룹 내 위치에서 차단됩니다.

그런 다음 set-policy 명령어를 사용하여 정책을 설정합니다.

gcloud org-policies set-policy /tmp/policy.yaml

태그가 지정되지 않은 리소스 제한

태그 및 조건부 조직 정책을 사용하여 특정 태그를 사용하지 않는 모든 리소스를 제한할 수 있습니다. 서비스를 제한하는 리소스에 대해 조직 정책을 설정하고 태그가 있는 상태에서 조건부로 만들면 태그가 지정되지 않은 경우 해당 리소스의 하위 리소스를 사용할 수 없습니다. 이렇게 하려면 사용할 수 있도록 거버넌스 계획에 따라 리소스를 설정해야 합니다.

태그가 지정되지 않은 조직, 폴더, 프로젝트 리소스를 제한하려면 조직 정책을 만들 때 조건부 쿼리에 ! 논리 연산자를 사용하면 됩니다.

예를 들어 sqladmin=enabled 태그가 있는 프로젝트에서만 sqladmin.googleapis.com을 사용하도록 허용하려면 sqladmin=enabled 태그가 없는 프로젝트에서 sqladmin.googleapis.com을 거부하는 조직 정책을 만들면 됩니다.

  1. 리소스에 적절한 거버넌스가 적용되었는지 여부를 식별하는 태그를 만듭니다. 예를 들어 키가 sqlAdmin이고 값이 enabled인 태그를 만들어 이 리소스가 Cloud SQL Admin API의 사용을 허용하도록 지정할 수 있습니다. 예를 들면 다음과 같습니다.

    태그 키 및 값 만들기

  2. 새로 생성된 태그의 이름을 클릭합니다. 다음 단계에서 조건을 만들려면 태그 키 경로 아래에 나열된 태그 키의 네임스페이스 이름이 필요합니다.

  3. 조직 리소스 수준에서 리소스 서비스 사용량 제한 조직 정책을 만들어 Cloud SQL Admin API에 대한 액세스를 거부합니다. 예를 들면 다음과 같습니다.

    리소스를 제한하는 조직 정책 만들기

  4. 위 조직 정책에 조건을 추가하고 거버넌스 태그가 없으면 정책이 시행되도록 지정합니다. 논리 NOT 연산자는 조건 작성 도구에서 지원되지 않으므로 이 조건은 조건 편집기에서 빌드해야 합니다. 예를 들면 다음과 같습니다.

    조건부 조직 정책 빌드

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

이제 개발자가 해당 프로젝트에서 Cloud SQL Admin API를 사용하려면 먼저 sqlAdmin=enabled 태그를 프로젝트에 연결하거나 프로젝트에서 상속해야 합니다.

조직 정책 상속

태그를 사용하여 사용 설정된 조직 정책 목록 제약조건은 상속의 일반 규칙에 따라 기존 조직 정책과 병합됩니다. 이 조건부 규칙은 조건이 true인 경우에만 적용됩니다.

태그를 사용하여 사용 설정된 조직 정책 불리언 제약조건은 기존 조직 정책보다 우선 적용됩니다. 또한 불리언 정책은 true 또는 false의 두 가지 상태만 가질 수 있으므로 여러 태그가 서로 충돌하지 않도록 모든 조건문은 비조건문의 반대여야 합니다.

예를 들어 disableSerialPortAccess 제약조건을 시행하는 조직 정책을 생각해 보세요. 우선 적용되는 조건이 없는 경우에 사용되는 값인 비조건부 값은 true입니다. 따라서 이 정책에 대한 다른 조건문은 false로 설정해야 충돌하지 않습니다.

다음 단계

태그 사용 방법에 대한 자세한 내용은 태그 생성 및 관리 페이지를 참조하세요.

조직 정책 제약조건을 만들고 관리하는 방법에 대한 자세한 내용은 제약조건 사용을 참조하세요.