리소스 위치 제한 구성

Cloud Composer 1 | Cloud Composer 2

이 페이지에서는 Cloud Composer에서 저장한 데이터가 지정한 위치에 유지되도록 리소스 위치 제한을 구성하는 방법을 보여줍니다.

위치 제한 작동 방식

Cloud Composer의 위치 제한은 Cloud Composer 환경이 생성된 프로젝트에 적용되는 조직 정책에 따라 결정됩니다. 이 정책은 프로젝트 내에서 할당되거나 조직에서 상속됩니다.

위치 제한이 사용 설정되면 정책에서 금지하는 리전에서 환경을 만들 수 없습니다. 리전이 거부 목록에 있거나 허용 목록에 없으면 이 리전에 환경을 만들 수 없습니다.

환경 생성을 사용 설정하려면 정책에서 이 리전 내의 특정 영역이 아닌 전체 리전을 허용해야 합니다. 예를 들어 이 리전에 Cloud Composer 환경을 만들려면 정책에서 europe-west3 리전을 허용해야 합니다.

Cloud Composer는 다음을 수행할 때 위치 제한사항을 확인합니다.

  • 환경 생성
  • 환경 업그레이드(작업 중에 추가 리소스가 생성되는 경우)
  • 환경 업데이트(Cloud Composer 종속 항목에 위치 제한을 적용하지 않는 이전 환경의 경우)

위치 제한사항을 확인하는 것 외에도 Cloud Composer가 다음을 수행합니다.

  • 사용자가 맞춤설정한 Airflow 이미지를 리전 Artifact Registry 저장소에 저장합니다.
  • US 멀티 리전이 정책에 의해 명시적으로 금지되는 경우 Cloud Build는 사용 중지됩니다. 이 경우 사용자가 맞춤설정한 Airflow 이미지가 GKE 클러스터에 빌드됩니다.

리소스 위치 제한에 따라 비공개 IP 환경에 Python 종속 항목 설치

프로젝트에 대해 리소스 위치 제한사항을 설정하는 경우 Cloud Build를 사용해서 Python 패키지를 설치할 수 없습니다. 따라서 공개 인터넷에서 저장소에 직접 액세스할 수 없습니다.

위치 제한사항에 따라 US 멀티 리전이 허용되지 않는 경우 비공개 IP 환경에 Python 종속 항목을 설치하려면 다음 옵션 중 하나를 사용합니다.

  • VPC 네트워크에서 호스팅되는 비공개 PyPI 저장소를 사용합니다.

  • VPC 네트워크의 프록시 서버를 사용하여 공개 인터넷의 PyPI 저장소에 연결합니다. Cloud Storage 버킷의 /config/pip/pip.conf 파일에 프록시 주소를 지정합니다.

  • 보안 정책이 외부 IP 주소에서 VPC 네트워크에 액세스할 수 있도록 허용하는 경우 Cloud NAT를 구성할 수 있습니다.

  • Cloud Storage 버킷에서 dags 폴더에 Python 종속 항목을 저장하여 이를 로컬 바이너리로 설치합니다. 종속 항목 트리가 클 때는 좋은 방법이 아닐 수 있습니다.

Cloud Composer 로그의 위치 제한

Cloud Composer 로그에 민감한 정보가 포함된 경우 Cloud Composer 로그를 리전별 Cloud Storage 버킷으로 리디렉션해야 할 수 있습니다. 이렇게 하려면 로그 싱크를 사용합니다. 로그를 Cloud Storage 버킷으로 리디렉션한 후에는 로그가 Cloud Logging으로 전송되지 않습니다.

gcloud

  1. 새 Cloud Storage 버킷을 만듭니다.

    gsutil mb -l LOCATION gs://BUCKET_NAME
    

    다음과 같이 바꿉니다.

    • LOCATION을 환경이 위치한 리전으로 바꿉니다.
    • BUCKET_NAME을 버킷 이름으로 대체합니다. 예를 들면 composer-logs-us-central1-example-environment입니다.
  2. 새 로그 싱크를 만듭니다.

    gcloud logging sinks create \
    composer-log-sink-ENVIRONMENT_NAME \
    storage.googleapis.com/BUCKET_NAME \
    --log-filter "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    다음과 같이 바꿉니다.

    • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
    • BUCKET_NAME을 버킷 이름으로 대체합니다.
    • LOCATION을 환경이 위치한 리전으로 바꿉니다.
  3. 이전 명령어의 결과에 서비스 계정 번호가 포함됩니다. 이 서비스 계정에 스토리지 객체 생성자 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NUMBER@gcp-sa-logging.iam.gserviceaccount.com" \
    --role='roles/storage.objectCreator' \
    --condition=None
    

    다음과 같이 바꿉니다.

    • PROJECT_ID프로젝트 ID로 바꿉니다.
    • SA_NUMBER를 이전 단계에서 gcloud logging sinks create 명령어로 제공된 서비스 계정 번호로 바꿉니다.
  4. Monitoring에서 환경의 로그를 제외합니다.

    gcloud logging sinks update _Default \
    --add-exclusion name=ENVIRONMENT_NAME-exclusion,filter=\
    "resource.type=cloud_composer_environment AND \
    resource.labels.environment_name=ENVIRONMENT_NAME AND \
    resource.labels.location=LOCATION"
    

    다음과 같이 바꿉니다.

    • ENVIRONMENT_NAME을 환경 이름으로 바꿉니다.
    • LOCATION을 환경이 위치한 리전으로 바꿉니다.

다음 단계