새 프로젝트의 기본값으로 영역 DNS 설정


이 문서에서는 새 프로젝트에 영역 DNS를 사용하도록 내부 DNS 정책을 업데이트하는 방법을 설명합니다. 영역 DNS는 영역 내에서 중단을 격리하여 애플리케이션 안정성을 개선하고 인스턴스 생성 및 자동 복구와 같은 중요한 서비스의 중단을 방지합니다.

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. Google Cloud 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음 옵션 중 하나를 선택하여 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

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

필요한 역할

조직 전체의 내부 DNS 사용량을 보고 기본 정책을 업데이트하는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.

  • 기본 전역 DNS 정책 확인: 폴더 또는 조직의 조직 정책 관리자 (roles/orgpolicy.policyAdmin)
  • 폴더를 영역 DNS로 마이그레이션할 준비가 되었는지 판단: 폴더 또는 조직에 대한 브라우저(roles/browser) 권한

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

이러한 사전 정의된 역할에는 조직 전체의 내부 DNS 사용량을 보고 기본 정책을 업데이트하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

조직 전체의 내부 DNS 사용량을 확인하고 기본 정책을 업데이트하려면 다음 권한이 필요합니다.

  • 조직 정책 제약조건 설정: orgpolicy.* 권한
  • 폴더를 영역 DNS로 마이그레이션할 준비가 되었는지 판단:
    • resourcemanager.folders.get
    • resourcemanager.folders.list
    • resourcemanager.organizations.get
    • resourcemanager.projects.get
    • resourcemanager.projects.list
  • 전역 DNS 이름과 VM 메타데이터 확인: compute.projects.get

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

구성 개요

기본 내부 DNS 유형을 재정의하도록 조직 정책을 설정하면 새로 생성된 프로젝트에서 기본적으로 영역 DNS를 사용합니다. 조직 정책은 Compute Engine API가 이미 사용 설정된 기존 프로젝트에 영향을 미치지 않습니다. 영역 DNS를 사용하도록 기존 프로젝트를 전환하려면 영역 DNS로 기존 프로젝트 전환을 참고하세요.

조직 수준에서 영역 DNS 정책을 적용하는 것이 좋습니다. 이 접근 방식을 사용하면 조직 내에서 생성된 모든 새 프로젝트가 영역 DNS를 사용하여 안정성과 복원력을 개선할 수 있습니다. 하지만 일부 폴더는 이 조직 전체 정책에서 제외해야 할 수 있습니다. 폴더 내의 새 프로젝트가 영역 DNS와 호환되지 않는 기존 프로젝트를 사용하는 경우 폴더를 제외해야 합니다.

조직 수준에서 영역 DNS 정책을 적용하는 프로세스에는 다음 단계가 포함됩니다.

  1. 프로젝트 및 폴더 목록 수집: 조직 내의 모든 프로젝트 및 연결된 폴더 목록을 컴파일합니다.
  2. 예외 폴더 식별: 1단계에서 확인한 호환되지 않는 프로젝트가 포함된 폴더를 찾습니다. 이러한 폴더는 영역 DNS 정책에서 일시적으로 제외해야 합니다.
  3. 조직 정책 설정: 조직 수준에서 영역 DNS 정책을 적용합니다.
  4. 특정 폴더 제외: 3단계에서 식별된 폴더에 예외를 적용합니다. 이렇게 하면 관리자가 프로젝트 내에서 호환되지 않는 프로젝트를 해결하는 동안 사용자는 전역 DNS를 계속 사용할 수 있습니다.

이 접근 방식을 사용하면 새 프로젝트에서 영역 DNS를 활용하여 안정성을 개선하는 동시에 즉시 이전할 준비가 되지 않은 이전 프로젝트의 기존 종속 항목을 수용할 수 있습니다.

제한사항

조직 전체에서 영역 DNS 이름을 사용 설정하면 다음과 같은 다른 서비스의 인스턴스에 영역 DNS 설정이 적용됩니다.

애플리케이션에서 이러한 서비스를 사용하는지 검토하고 이러한 애플리케이션과 연결된 폴더 및 프로젝트에 대해 쿼리 분석을 사용하여 영역 DNS와의 호환성 문제를 식별합니다.

조직에서 기본값으로 전역 DNS를 사용하는지 확인

조직의 기본 DNS 설정은 다음 두 가지 요인에 따라 다릅니다.

  • 조직 생성일:

    • 2018년 9월 6일 이후에 생성됨: 조직은 기본적으로 영역 DNS를 사용합니다. 추가 작업이 필요하지 않습니다.
    • 2018년 9월 6일 이전에 생성됨: 조직에서 기본적으로 전역 DNS를 사용합니다. 영역 DNS로 이전하는 것이 좋습니다.
  • 조직 정책 제약조건의 존재 및 시행:

    조직이 2018년 9월 6일 전에 생성되었더라도 관리자가 조직 내에서 생성된 모든 새 프로젝트에 영역 DNS를 사용하도록 정책을 적용했을 수 있습니다. 이러한 정책이 있는지 확인하려면 Google Cloud 콘솔 또는 Google Cloud CLI를 사용하면 됩니다.

콘솔

  1. 콘솔에서 IAM 및 관리자>ID 및 조직 페이지로 이동합니다.

    ID 및 조직으로 이동

  2. 조직 가입 날짜를 확인합니다.

    가입 완료 날짜를 보여주는 ID 및 조직 콘솔 페이지의 스크린샷

  3. 조직이 2018년 9월 6일 전에 생성된 경우 조직 정책 제약조건이 새로 생성된 모든 프로젝트의 기본 DNS 유형을 영역 DNS로 설정하는지 확인합니다.

    1. Google Cloud 콘솔에서 IAM 및 관리자>조직 정책 페이지로 이동합니다.
    2. 필터 필드에 constraints/compute.setNewProjectDefaultToZonalDNSOnly를 입력합니다.
    3. 제약조건이 구성된 경우 새 프로젝트의 내부 DNS 설정을 영역 DNS 전용으로 설정 이름을 클릭합니다.
    4. 정책 세부정보 페이지에서 상태를 확인합니다.
      • 상태가 적용됨이면 조직에 생성된 모든 새 프로젝트의 기본 내부 DNS 유형은 영역 DNS입니다.
      • 그렇지 않으면 프로젝트의 기본 DNS 유형은 계속 조직 생성 시간에 따라 결정됩니다.
    5. 조직에 제약조건이 구성되지 않으면 프로젝트의 기본 DNS 유형은 조직 생성일에 따라 결정됩니다.

gcloud

organizations describe 명령어resource-manager org-policies list 명령어를 사용하여 조직의 기본 DNS 유형을 확인합니다.

  1. 조직 creationTime 메타데이터 값을 확인합니다.

    gcloud organizations describe ORGANIZATION_ID
    

    ORGANIZATION_ID를 조직 ID 번호나 조직 도메인 이름으로 바꿉니다.

  2. 조직이 2018년 9월 6일 전에 생성된 경우 조직 정책 제약조건이 새로 생성된 모든 프로젝트의 기본 DNS 유형을 영역 DNS로 설정하도록 구성되어 있는지 확인합니다.

    gcloud resource-manager org-policies list --organization=ORGANIZATION_ID \
       --filter="constraints/compute"
    

    출력에서 constraints/compute.setNewProjectDefaultToZonalDNSOnly를 찾습니다.

    1. 제약조건이 있고 StatusEnforced이면 조직에서 생성된 모든 새 프로젝트는 기본적으로 영역 DNS를 사용합니다.
    2. 제약조건이 없거나 적용되지 않으면 기본 DNS 유형은 첫 번째 단계의 설명대로 조직 생성 날짜에 따라 결정됩니다.

폴더 또는 조직에서 전역 DNS를 사용하는 프로젝트 결정

전역 DNS를 사용하는 프로젝트를 확인하려면 BigQuery를 사용하여 조직의 상대 프로젝트와 해당 메타데이터를 나열하는 테이블을 만드는 것이 좋습니다. 그런 다음 이 표를 사용하여 쿼리를 실행할 수 있습니다.

  1. BigQuery 데이터세트 만들기
  2. 조직의 애셋 메타데이터를 BigQuery 테이블로 내보냅니다.

    1. Cloud Asset Inventory API가 사용 설정되어 있는지 확인합니다.
    2. Cloud Asset Inventory API를 사용하는 데 필요한 권한을 구성합니다.
    3. 다음 gcloud CLI 명령어를 사용하여 compute.googleapis.com/Project 애셋을 내보냅니다.

      gcloud asset export \
         --content-type resource \
         --organization 'ORGANIZATION_ID' \
         --bigquery-table 'projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_NAME' \
         --asset-types='compute.googleapis.com/Project' \
         --output-bigquery-force
      

      다음을 바꿉니다.

      • ORGANIZATION_ID: 조직 ID 번호
      • PROJECT_ID: 프로젝트 ID
      • DATASET_ID: BigQuery 데이터 세트의 이름
      • TABLE_NAME: 메타데이터를 내보내려는 대상 테이블입니다. 테이블이 없으면 BigQuery에서 테이블을 만듭니다.
  3. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

  4. 새 쿼리 작성을 선택합니다.

  5. 쿼리 편집기 텍스트 영역에 다음 GoogleSQL 쿼리를 입력한 다음 실행을 클릭합니다.

    SELECT
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting,
      count(*) as project_count
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    GROUP BY 1
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID
    • DATASET_ID: BigQuery 데이터 세트의 이름
    • TABLE_NAME: 2단계에서 내보낸 메타데이터가 포함된 테이블

    vmDnsSetting 값이 ZONAL_ONLY인 프로젝트에는 영역 DNS가 구성되어 있습니다. 그렇지 않으면 프로젝트는 기본적으로 전역 DNS를 사용합니다.

  6. (선택사항) 각 프로젝트의 vmDnsSetting을 자세히 보려면 다음 GoogleSQL 쿼리를 입력한 다음 실행을 클릭합니다.

    SELECT
      SUBSTR(name,35) as project_id,
      JSON_VALUE(SAFE.PARSE_JSON(resource.data).vmDnsSetting) AS vmDnsSetting
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    

폴더의 이전 준비 상태 확인

이 단계에서는 bash 스크립트와 이전 섹션에서 만든 BigQuery 테이블을 사용하여 폴더의 마이그레이션 준비 상태를 확인합니다.

  • 지난 30일 동안 모든 프로젝트에서 영역 DNS와 호환되지 않는 쿼리를 실행하지 않았으면 폴더가 준비된 것입니다.
  • 폴더를 마이그레이션할 준비가 되지 않으면 스크립트는 폴더를 마이그레이션할 준비가 되지 않는 원인이 되는 폴더의 프로젝트 ID로 응답합니다. 이 결과 목록의 프로젝트는 여전히 영역 DNS와 호환되지 않으며 추가 작업이 필요합니다.

다음 단계를 완료합니다.

  1. 폴더 ID를 가져옵니다. 폴더 ID를 모르는 경우 다음 단계를 따르세요.
    1. Google Cloud 콘솔에서 관리형 리소스 페이지로 이동합니다.
    2. Name:FOLDER_NAME 필터를 적용하여 폴더 ID를 가져옵니다.
  2. 내보낸 compute.Project assets 데이터로 BigQuery 테이블을 쿼리합니다.

    BigQuery 테이블을 만드는 방법에 대한 안내는 폴더 또는 조직에서 전역 DNS를 사용하는 프로젝트 결정을 참고하세요.

    다음 GoogleSQL 쿼리를 입력한 다음 실행을 클릭합니다.

    SELECT
      SUBSTR(name,35) AS project_id,
    FROM PROJECT_ID.DATASET_ID.TABLE_NAME
    WHERE CONTAINS_SUBSTR(ancestors, 'FOLDER_NUMBER')
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID
    • DATASET_ID: BigQuery 데이터 세트의 이름
    • TABLE_NAME: 내보낸 메타데이터가 포함된 테이블
    • FOLDER_NUMBER: 폴더 ID 번호
  3. 프로젝트 ID 목록을 복사하여 파일에 저장합니다.

  4. 다음 bash 스크립트를 실행합니다. 스크립트는 저장된 파일의 프로젝트 ID를 반복하여 폴더를 마이그레이션할 준비가 되었는지 확인합니다.

#!/bin/bash
inaccessible_projects=()
unready_projects=()

for project in $(cat ~/FILENAME | tr '\n' ' '); do
  echo -e "Checking project $project..."
  ERROR=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.error'`
  if ! [[ "$ERROR" -eq "null" ]]; then
    inaccessible_projects+=($project)
    continue
  fi
  QUERY_COUNT=`curl -s --request POST "https://monitoring.googleapis.com/v3/projects/$project/timeSeries:query"   -H "Authorization: Bearer $(gcloud auth print-access-token)"   -H "Accept: application/json"   -H "Content-Type: application/json"   --data '{"query":"fetch compute.googleapis.com/Location | metric '"'"'compute.googleapis.com/global_dns/request_count'"'"' | filter metric.zonal_dns_readiness = '"'"'zonal_dns_risky'"'"' | every 30d | within 30d"}'   --compressed | jq --raw-output '.timeSeriesData[0].pointData[0].values[0].int64Value'`
  if [[ "$QUERY_COUNT" -ne "null" ]] && [[ "$QUERY_COUNT" -ne "0" ]]; then
    unready_projects+=($project)
  fi
done

error_len=${#inaccessible_projects[@]}
unready_len=${#unready_projects[@]}

echo -e "$error_len projects were inaccessible"
echo -e "$unready_len projects were not ready for migration"

if [ $error_len -ne 0 ]; then
  echo "Unable to access the following projects:"
  for project in "${inaccessible_projects[@]}"; do
    echo "$project"
  done
fi
if [ $unready_len -ne 0 ]; then
  echo "The following projects are not ready for migration:"
  for project in "${unready_projects[@]}"; do
    echo "$project"
  done
fi

if (( $error_len + $unready_len > 0 )); then
  echo "This folder is NOT ready for gDNS -> zDNS migration."
else
  echo "This folder is ready for gDNS -> zDNS migration."
fi

FILENAME을 프로젝트 ID 목록을 저장한 파일의 이름으로 바꿉니다.

프로젝트 소유자에게 마이그레이션 준비 상태 분석 결과를 전달합니다.

영역 DNS로 마이그레이션할 준비가 되지 않은 폴더 제외

폴더를 조직 정책에서 제외하려면 다음 단계를 완료하여 폴더 수준에서 정책의 적용 옵션을 Off로 설정합니다.

  1. Google Workspace 또는 Cloud Identity 최고 관리자로 Google Cloud 콘솔에 로그인합니다.
  2. 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  3. 선택을 클릭한 후 조직 정책에서 제외할 폴더를 선택합니다.

    해당 폴더의 조직 정책 제약조건 목록이 Google Cloud 콘솔의 페이지 하나 이상에 표시됩니다.

  4. 영역 DNS를 적용하는 조직 정책 제약조건을 찾으려면 다음 안내를 따르세요.

    1. 필터를 클릭합니다.
    2. 이름을 선택합니다.
    3. 필터 이름을 새 프로젝트의 내부 DNS 설정을 영역 DNS 전용으로 설정으로 지정합니다.
  5. 조직 정책 제약조건 이름을 클릭하여 정책 세부정보 페이지를 엽니다.

  6. 수정을 클릭합니다.

  7. 수정 페이지에서 맞춤설정을 선택합니다.

  8. 적용에서 사용 안함을 선택하여 제약조건 적용을 중지합니다. 즉, 폴더의 모든 프로젝트에 대한 기본 내부 DNS 유형은 조직 생성 날짜에 따라 결정됩니다.

  9. 저장을 클릭합니다.

조직 정책 제약조건 맞춤설정에 대한 자세한 내용은 Resource Manager 문서의 불리언 제약조건에 대한 정책 맞춤설정을 참조하세요.

기본적으로 새 프로젝트에 영역 DNS 적용

다음 단계에 따라 폴더 또는 조직에 대해 조직 정책을 설정합니다.

  1. Google Workspace 또는 Cloud Identity 최고 관리자로 Google Cloud 콘솔에 로그인합니다.

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

    조직 정책으로 이동

  3. 조직 정책을 보려면 폴더 또는 조직을 선택합니다. Google Cloud 콘솔에 사용 가능한 조직 정책 제약조건 목록이 표시됩니다. 목록은 여러 페이지에 걸쳐 표시될 수 있습니다.

  4. 영역 DNS를 시행할 정책을 찾으려면 필터를 클릭하고, 이름을 선택한 후 필터 이름을 새 프로젝트의 내부 DNS 설정을 영역 DNS 전용으로 설정으로 지정합니다.

  5. 정책 이름을 클릭하여 세부정보를 확인합니다.

    정책 세부정보 페이지에서는 제약조건 정보 및 제약조건 적용 방식을 보여줍니다.

    기본적으로 시행은 폴더 또는 조직에 따라 정의되지 않습니다. 하지만 상위 폴더에 정의된 시행이 있으면 해당 시행이 정의된 시행이 포함된 가장 가까운 상위 폴더에서 상속됩니다. 자세한 내용은 계층 구조 평가 이해를 참조하세요.

  6. 조직 정책을 맞춤설정하려면 수정을 클릭합니다.

  7. 수정 페이지에서 맞춤설정을 선택합니다.

  8. 시행에서 사용을 선택합니다.

    이렇게 하면 조직의 모든 새 프로젝트에 대한 기본 내부 DNS 유형이 영역 DNS로 설정됩니다.

  9. 저장을 클릭합니다.

조직 정책 변경을 검사하려면 폴더 또는 조직 아래에 새 프로젝트를 만들고, VM 인스턴스를 생성 및 시작하고, 영역 DNS에 대해 VM이 사용 설정되었는지 여부를 확인합니다.

워크로드에 빌드된 DNS 이름 쿼리를 확인하기 위해 전역 DNS가 필요하면 조직 또는 폴더 수준에서 시행을 사용 중지하여 이 변경사항을 롤백할 수 있습니다.

조직 또는 폴더에 전역 DNS 사용으로 되돌리기

전역 DNS를 사용하도록 조직이나 폴더를 되돌리려면 영역 DNS에 대한 조직 정책의 적용을 중지합니다. 다음 단계를 완료합니다.

  1. 조직 또는 폴더 수준에서 조직 정책 constraints/compute.setNewProjectDefaultToZonalDNSOnly를 사용 중지합니다. 이 정책을 수정하는 방법은 기본적으로 새 프로젝트에 영역 DNS 적용을 참조하세요.

    새 프로젝트의 내부 DNS 설정을 영역 DNS 전용으로 설정 적용을 사용 안함으로 설정합니다.

  2. 전체 조직에 전역 DNS 사용으로 되돌리려면 조직의 폴더 중에서 조직 정책 constraints/compute.setNewProjectDefaultToZonalDNSOnly를 적용하는 폴더가 없는지 확인합니다.

  3. 프로젝트 및 인스턴스에 전역 DNS가 구성되어 있는지 확인하려면 폴더 또는 조직에서 전역 DNS를 사용하는 프로젝트 결정을 참고하세요.

다음 단계