인그레스 및 이그레스 규칙

이 페이지에서는 VPC 서비스 제어의 인그레스 규칙과 이그레스 규칙을 설명합니다. VPC 서비스 제어는 인그레스 규칙과 이그레스 규칙을 사용하여 서비스 경계로 보호되는 리소스와 클라이언트의 액세스를 허용합니다.

인그레스이그레스 규칙 블록은 다양한 ID와 리소스에 허용되는 액세스의 방향을 지정합니다. 인그레스 및 이그레스 규칙은 하나 이상의 경계 브리지가 필요했던 이전의 사용 사례를 대체하여 간소화할 수 있습니다.

서비스 경계에 인그레스 및 이그레스 정책을 적용하는 방법은 인그레스 및 이그레스 정책 구성을 참조하세요.

인그레스 및 이그레스 규칙에서 ID 그룹 및 서드 파티 ID를 구성할 수 있습니다. 사용 사례는 인그레스 및 이그레스 규칙에서 ID 그룹 및 서드 파티 ID 사용 예시를 참고하세요.

안전한 데이터 교환 사용 사례 및 샘플 목록은 인그레스 및 이그레스 규칙을 사용한 안전한 데이터 교환을 참조하세요.

컨텍스트 인식 액세스 사용 사례 및 샘플의 목록은 인그레스 규칙을 사용한 컨텍스트 인식 액세스를 참조하세요.

인그레스 및 이그레스 규칙의 이점

  1. 인그레스 및 이그레스 규칙을 사용하면 Google Cloud 서비스 API를 사용하여 조직 안팎의 데이터를 안전하고 효율적으로 교환할 수 있습니다.
  2. 또한 인그레스 및 이그레스 규칙으로 다음과 같은 API 요청의 컨텍스트에 따라 경계의 Google Cloud 리소스에 대한 액세스 권한을 부여할 수 있습니다.
    1. 소스 네트워크, IP 주소 또는 기기에 따라 사용할 수 있는 ID 유형이나 ID를 제한합니다.
    2. 소스 네트워크, IP 주소, 기기, ID 유형에 따라 액세스할 수 있는 Google Cloud API 및 메서드를 제한합니다.
  3. 데이터 교환을 실행하는 데 사용되는 정확한 서비스, 메서드, Google Cloud 프로젝트, VPC 네트워크, ID를 제한하여 유출 위험을 최소화합니다.
  4. 사용자가 관리하지 않는 외부 데이터 세트와 이미지에 대한 읽기 전용 액세스 권한을 부여합니다.
  5. 권한이 낮은 세그먼트의 클라이언트가 권한이 더 많은 세그먼트의 Google Cloud 리소스에 액세스하지 못하도록 막고 반대 방향의 액세스는 허용합니다.
  6. 하나 이상의 경계 브리지가 필요했던 이전의 구성을 간소화합니다.

인그레스 및 이그레스 정의

참고: 인그레스 및 이그레스의 정의는 리소스에서 호출하는 작업과 관계가 없습니다. 즉, 정의에서는 데이터 이동 방향이 아닌 요청 방향을 나타냅니다.

  • 인그레스: 서비스 경계 외부의 API 클라이언트가 서비스 경계 내의 리소스에 액세스하는 것을 의미합니다. 예를 들면 다음과 같습니다.

    • 서비스 경계 외부의 Cloud Storage 클라이언트에서 경계 내에 있는 Cloud Storage 리소스에 대한 Cloud Storage 읽기, 쓰기 또는 복사 작업을 호출합니다.
  • 이그레스: 서비스 경계 내부의 API 클라이언트 또는 리소스와 서비스 경계 외부의 리소스가 관련된 액세스를 의미합니다. 예를 들면 다음과 같습니다.

    • 서비스 경계 내에 있는 Compute Engine 클라이언트에서 이미지 리소스가 경계 외부에 있는 Compute Engine create 작업을 호출합니다.
    • 경계 내부 또는 외부에 있는 Cloud Storage 클라이언트에서 한 버킷은 경계 내에, 다른 버킷은 경계 외부에 있는 copy 명령어를 호출합니다.

정책 모델

인그레스 또는 이그레스 규칙은 fromto 블록으로 구성됩니다. 각 항목의 의미는 다음과 같습니다.

  • from은 API 클라이언트의 속성을 의미합니다.
  • to는 Google Cloud 서비스 및 리소스의 속성을 의미합니다.

인그레스 규칙과 이그레스 규칙 여러 개가 서비스 경계와 연결될 수 있습니다. Google Cloud 서비스 호출은 다음 시맨틱스를 기준으로 허용되거나 거부됩니다.

  • 필요한 인그레스 규칙 조건이 충족되면 경계 외부의 클라이언트에서 경계 내 Google Cloud 리소스로 보내는 요청이 허용됩니다.
  • 필요한 이그레스 규칙의 조건이 충족되면 경계 내부의 클라이언트에서 경계 밖의 Google Cloud 리소스로 보내는 요청이 허용됩니다.
  • 클라이언트가 충족하는 인그레스 규칙(클라이언트가 경계 내에 있지 않은 경우)과 외부 리소스가 충족하는 이그레스 규칙이 있을 경우 경계 내부의 Google Cloud 리소스와 경계 외부의 Google Cloud 리소스가 관련된 API 호출이 허용됩니다.

인그레스 규칙에서 허용하는 API 요청 예시

  • 경계 내부에 있는 Cloud Storage 버킷의 객체를 로컬 머신으로 다운로드하는 경계 외부의 Cloud Storage 클라이언트(예: gcloud storage cp 명령어 사용)
  • 경계 내부의 BigQuery 데이터 세트를 쿼리하기 위해 경계 내부의 프로젝트에서 BigQuery 작업을 사용하는 경계 외부의 BigQuery 클라이언트(예: bq query 명령어 사용)
  • 경계 내부의 Cloud Storage 버킷에 쓰며 경계 외부에 있는 VPC 네트워크의 Compute Engine VM

이그레스 규칙에서 허용하는 API 요청 예시

  • 경계 외부의 Cloud Storage 버킷과 경계 내부의 버킷 사이에 객체를 복사하는 경계 내부의 Cloud Storage 클라이언트(예: gcloud storage cp 명령어 사용)
  • 경계 내부의 BigQuery 데이터 세트를 쿼리하기 위해 경계 외부의 프로젝트에서 BigQuery 작업을 사용하는 경계 내부의 BigQuery 클라이언트(예: bq query 명령어 사용)

인그레스 및 이그레스 규칙 조합에서 허용하는 API 요청 예시

  • 경계 외부의 Cloud Storage 버킷과 경계 내부의 버킷 사이에 객체를 복사하는 경계 외부의 Cloud Storage 클라이언트(예: gcloud storage cp 명령어 사용)
  • 경계 내부의 BigQuery 데이터 세트를 쿼리하기 위해 경계 외부의 프로젝트에서 BigQuery 작업을 사용하는 경계 외부의 BigQuery 클라이언트(예: bq query 명령어 사용)
  • 경계 내부의 Cloud KMS 키를 사용하여 경계 외부에 Compute Engine 디스크를 만드는 경계 외부의 Compute Engine 클라이언트

BigQuery 및 Compute Engine 예시에서는 BigQuery 작업 또는 Compute Engine 디스크가 경계 외부에 있기 때문에 인그레스 규칙으로 충분하지 않습니다. 경계 내부의 Google Cloud 리소스(BigQuery 데이터 세트 또는 Cloud KMS 키)와 경계 외부의 리소스(BigQuery 작업 또는 Compute Engine 디스크)와 관련있는 API 요청을 허용하는 이그레스 규칙이 필요합니다.

여러 서비스 경계가 포함된 API 요청

액세스된 리소스 및/또는 API 클라이언트가 서로 다른 서비스 경계에 속하는 경우 모든 관련 경계의 정책이 API 요청을 허용해야 합니다. 예를 들어 서비스 경계 A 내의 Cloud Storage 클라이언트 및 a 버킷과 서비스 경계 B 내의 버킷 b를 고려합니다. 이 예시에서 Cloud Storage 클라이언트가 a 버킷에서 b 버킷으로 객체를 복사하고 b 버킷에서 a 버킷으로 객체를 복사하려면 다음과 같은 인그레스 및 이그레스 규칙이 필요합니다.

  • Cloud Storage 버킷 b에 대한 액세스를 허용하는 경계 A의 이그레스 규칙
  • Cloud Storage 버킷 a에 대한 액세스를 허용하는 경계 B의 이그레스 규칙
  • 경계 B 외부에 있는 Cloud Storage 클라이언트에 대한 액세스를 허용하는 경계 B의 인그레스 규칙

인그레스 규칙 참조

Google Cloud 콘솔, JSON 파일 또는 YAML 파일을 사용하여 인그레스 규칙을 구성할 수 있습니다. 다음 샘플에서는 .yaml 형식을 사용합니다.

- ingressFrom:
    identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
    *OR*
    identities:
    - PRINCIPAL_IDENTIFIER
    sources:
    - resource: RESOURCE
      *OR*
    - accessLevel: ACCESS_LEVEL
  ingressTo:
    operations:
    - serviceName: SERVICE
      methodSelectors:
      - method: METHOD
      *OR*
      - permission: PERMISSION
    resources:
    - projects/PROJECT
  • - ingressFrom: - (필수) 경계 외부의 허용되는 소스 및 ID를 나열하는 from 블록을 시작합니다.

  • identityType: - (이 속성이나 identities 속성을 사용해야 함) 이 속성은 지정된 sources(네트워크 원본)에서 사용할 수 있는 ID 유형을 정의합니다. 사용 가능한 값은 ANY_IDENTITY, ANY_USER_ACCOUNT, ANY_SERVICE_ACCOUNT입니다. ANY_IDENTITY는 모든 ID를 허용합니다. ANY_USER_ACCOUNT는 모든 실제 사용자를 허용합니다. ANY_SERVICE_ACCOUNT는 모든 서비스 계정을 허용합니다.

    이 속성은 조직을 기반으로 ID를 제한하지 않습니다. 예를 들어 ANY_SERVICE_ACCOUNT는 모든 조직의 서비스 계정을 허용합니다.

  • identities: - (이 속성이나 identityType 속성을 사용해야 함) 이 속성은 경계의 리소스에 액세스할 수 있는 서비스 계정, 사용자 계정, Google 그룹, 타사 ID 목록을 시작합니다.

  • PRINCIPAL_IDENTIFIER: 경계 리소스에 대해 액세스 권한을 제공하려는 사용자 계정, 서비스 계정, Google 그룹, 서드 파티 ID (미리보기)를 지정합니다. IAM v1 API 주 구성원 식별자에 지정된 형식을 사용합니다. 예를 들어 group:GROUP_NAME@googlegroups.com 형식을 사용하여 Google 그룹을 지정합니다.

    VPC 서비스 제어는 IAM v1 API 주 구성원 식별자에서 user, serviceAccount, group, principal (미리보기), principalSet(미리보기) 접두사로 시작하는 v1 ID만 지원합니다.

  • sources: - (필수) 이 속성은 네트워크 원본 목록을 나타냅니다. 목록의 각 값은 액세스 수준 또는 Google Cloud 프로젝트입니다. accessLevel 속성을 *로 설정하면 인그레스 정책은 모든 네트워크 출처에서 액세스를 허용합니다. 이 속성을 Google Cloud 프로젝트에 설정하면 인그레스 정책은 프로젝트에 속한 VPC 네트워크의 액세스를 허용합니다.

    연결된 프로젝트가 영구적으로 삭제되면 이 값이 삭제될 수 있습니다. 하지만 이 값을 삭제해도 오류가 발생하지 않습니다. 문제를 해결하는 동안 항상 이 값이 존재하는지 확인하세요.

  • - resource: - (이 속성이나 accessLevel 속성을 사용함) 액세스 권한을 제공할 경계 외부의 프로젝트 또는 VPC 네트워크를 지정합니다. 프로젝트를 지정하려면 projects/PROJECT_NUMBER 형식을 사용합니다. VPC 네트워크를 지정하려면 //compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME 형식을 사용합니다.

  • - accessLevel: - (이 속성이나 resource 속성을 사용해야 함) 액세스 권한이 부여되는 경계 외부의 액세스 수준을 지정합니다. accessLevel 속성을 *로 설정하면 인그레스 정책은 모든 네트워크 출처에서 액세스를 허용합니다.

  • ingressTo: - (필수) 경계 내에 지정된 Google Cloud 리소스에서 허용되는 서비스 작업을 나열하는 to 블록을 시작합니다.

  • operations: - (필수) from 블록 조건을 충족하는 클라이언트의 액세스가 허용되는 서비스 및 작업/메서드 목록의 시작을 표시합니다.

  • - serviceName: - (필수) 이 필드는 유효한 서비스 이름이거나 *로 설정하여 모든 서비스에 대한 액세스를 허용할 수 있습니다. 예를 들어 bigquery.googleapis.com은 유효한 serviceName입니다. 사용 가능한 서비스 목록은 지원되는 제품을 참조하세요.

  • methodSelectors: - (serviceName*가 아닌 경우 필수) from 블록 조건을 충족하는 클라이언트의 액세스가 허용되는 메서드 목록의 시작 부분입니다. 서비스에서 제한될 수 있는 메서드 및 권한 목록은 지원되는 서비스 메서드 제한사항을 참조하세요.

  • - method: - (이 속성이나 permission 속성을 사용해야 함) 이 필드는 유효한 서비스 메서드이거나 *로 설정하여 지정된 서비스의 모든 메서드에 대한 액세스를 허용할 수 있습니다.

  • - permission: - (이 속성이나 method 속성을 사용해야 함) 이 필드는 유효한 서비스 권한이어야 합니다. 권한이 필요한 작업에 경계 내 리소스에 대한 액세스 권한이 허용됩니다.

    리소스에 대한 요청에 여러 권한이 필요한 경우 인그레스 규칙이 작동하려면 같은 작업에서 필요한 모든 권한을 지정해야 합니다. 예를 들어 BigQuery 리소스에 대한 요청에 bigquery.jobs.createbigquery.tables.create 권한이 필요한 경우 동일한 작업에서 이 두 권한을 모두 지정해야 합니다. 또한 Google Cloud 콘솔을 사용하여 동일한 리소스에 권한을 여러 번 지정하면 동일한 작업에서 권한이 생성되지 않습니다. 이 문제를 방지하려면 리소스에 대한 모든 권한을 한 번에 지정합니다.

  • resources: - (필수) 이 속성은 경계 외부의 클라이언트가 액세스할 수 있는 서비스 경계에 있는 Google Cloud 리소스의 목록을 지정합니다. 이 필드를 *로 설정하여 경계 내부에 있는 Google Cloud 리소스에 대한 인그레스 액세스를 허용할 수 있습니다.

제대로 작동하는 인그레스 규칙을 만들려면 다음 속성을 지정해야 합니다.

  • sources 속성. accessLevel 또는 resource(Google Cloud 프로젝트 또는 VPC 네트워크)를 지정하거나 accessLevel 속성을 *로 설정해야 합니다.
  • identityType 또는 identities 속성
  • resources 속성
  • serviceName 속성

인그레스 정책 파일 구성을 완료했으면 인그레스 및 이그레스 정책 업데이트를 참조하여 인그레스 정책 파일을 서비스 경계에 적용합니다.

서비스 경계에서 여러 인그레스 규칙을 구성하는 경우 VPC 서비스 제어는 요청이 인그레스 규칙 중 하나의 조건을 충족하는 경우 요청을 허용합니다.

이그레스 규칙 참조

Google Cloud 콘솔, JSON 파일 또는 YAML 파일을 사용하여 이그레스 규칙을 구성할 수 있습니다. 다음 샘플에서는 .yaml 형식을 사용합니다.

- egressTo:
    operations:
    - serviceName: SERVICE_NAME
      methodSelectors:
      - method: METHOD
      *OR*
      - permission: PERMISSION
    resources:
    - projects/PROJECT
    *OR*
    externalResources:
    - EXTERNAL_RESOURCE_PATH
  egressFrom:
    identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
    *OR*
    identities:
    - PRINCIPAL_IDENTIFIER
    sources:
    - accessLevel: ACCESS_LEVEL
    sourceRestriction: RESTRICTION_STATUS
  • - egressTo: - (필수) 경계 외부의 지정된 프로젝트에 포함된 Google Cloud 리소스에 허용되는 서비스 작업을 나열하는 to 블록을 시작합니다.

  • operations: - (필수) from 블록 조건을 충족하는 클라이언트의 액세스가 허용되는 서비스 및 작업/메서드 목록의 시작을 표시합니다.

  • - serviceName: - (필수) 이 필드는 유효한 서비스 이름이거나 *로 설정하여 모든 서비스에 대한 액세스를 허용할 수 있습니다. 사용 가능한 서비스 목록은 지원되는 제품을 참조하세요.

  • methodSelectors: - (serviceName*가 아닌 경우 필수) from 블록 조건을 충족하는 클라이언트의 액세스가 허용되는 메서드 목록의 시작 부분입니다. 서비스에서 제한될 수 있는 메서드 및 권한 목록은 지원되는 서비스 메서드 제한사항을 참조하세요.

  • - method: - (이 속성이나 permission 속성을 사용해야 함) 이 필드는 유효한 서비스 메서드이거나 지정된 서비스의 모든 메서드에 대한 액세스를 허용하기 위해 *로 설정할 수 있습니다.

  • - permission: - (이 속성이나 method 속성을 사용해야 함) 이 필드는 유효한 서비스 권한이어야 합니다. 이 권한이 필요한 작업에 경계 외부의 지정된 리소스에 대한 액세스가 허용됩니다.

    리소스에 대한 요청에 여러 권한이 필요한 경우 이그레스 규칙이 작동하려면 동일한 작업에서 필요한 모든 권한을 지정해야 합니다. 예를 들어 BigQuery 리소스에 대한 요청에 bigquery.jobs.createbigquery.tables.create 권한이 필요한 경우 동일한 작업에서 이 두 권한을 모두 지정해야 합니다. 또한 Google Cloud 콘솔을 사용하여 동일한 리소스에 권한을 여러 번 지정하면 동일한 작업에서 권한이 생성되지 않습니다. 이 문제를 방지하려면 리소스에 대한 모든 권한을 한 번에 지정합니다.

  • resources: - 이 속성은 경계 내에 있는 클라이언트가 액세스할 수 있는 프로젝트에서 지정한 Google Cloud 리소스의 목록입니다. 이 필드를 *로 설정하여 모든 Google Cloud 리소스에 대한 이그레스 액세스를 허용할 수 있습니다.

  • externalResources: - 이 속성은 BigQuery Omni 리소스를 지정하는 데만 사용됩니다. 이 속성은 BigQuery Omni에서 지원하며 경계 내부의 클라이언트가 액세스할 수 있는 외부 리소스 목록입니다. Amazon S3 또는 Azure Blob Storage 리소스만 지정할 수 있습니다. Amazon S3에서 지원되는 형식은 s3://BUCKET_NAME입니다. Azure Storage에서 지원되는 형식은 azure://myaccount.blob.core.windows.net/CONTAINER_NAME입니다.

  • egressFrom: - (필수) 경계 내부의 허용되는 소스 및 ID를 나열하는 from 블록을 시작합니다.

  • identityType: - (이 속성이나 identities 속성을 사용해야 함) 이 속성은 경계 외부의 지정된 리소스에 액세스하는 데 사용할 수 있는 ID 유형을 정의합니다. 사용 가능한 값은 ANY_IDENTITY, ANY_USER_ACCOUNT, ANY_SERVICE_ACCOUNT입니다. ANY_IDENTITY는 모든 ID를 허용합니다. ANY_USER_ACCOUNT는 모든 실제 사용자를 허용합니다. ANY_SERVICE_ACCOUNT는 모든 서비스 계정을 허용합니다.

    이 속성은 조직을 기반으로 ID를 제한하지 않습니다. 예를 들어 ANY_SERVICE_ACCOUNT는 모든 조직의 서비스 계정을 허용합니다.

  • identities: - (이 속성이나 identityType 속성을 사용해야 함) 이 속성은 경계 외부의 지정된 리소스에 액세스할 수 있는 서비스 계정, 사용자 계정, Google 그룹, 타사 ID 목록을 시작합니다.

  • PRINCIPAL_IDENTIFIER: 경계 외부의 지정된 리소스에 액세스할 수 있는 사용자 계정, 서비스 계정, Google 그룹 또는 서드 파티 ID (미리보기)를 지정합니다. IAM v1 API 주 구성원 식별자에 지정된 형식을 사용합니다. 예를 들어 group:GROUP_NAME@googlegroups.com 형식을 사용하여 Google 그룹을 지정합니다.

    VPC 서비스 제어는 IAM v1 API 주 구성원 식별자에서 user, serviceAccount, group, principal (미리보기), principalSet(미리보기) 접두사로 시작하는 v1 ID만 지원합니다.

  • sources: - (필수) 이 속성은 네트워크 출처 목록을 지정합니다. 속성 값은 액세스 수준 목록일 수 있습니다. 지정된 sources를 기반으로 액세스 제한을 적용하려면 sourceRestriction 속성을 SOURCE_RESTRICTION_ENABLED로 설정합니다.

  • - accessLevel: - (필수) 경계 내부의 리소스가 경계 외부의 리소스에 액세스하도록 허용하는 액세스 수준을 하나 이상 지정합니다. 이러한 액세스 수준이 경계와 동일한 액세스 정책에서 가져온 것인지 확인합니다. accessLevel 속성을 *로 설정하면 이그레스 정책은 모든 네트워크 출처에서 액세스를 허용합니다.

  • sourceRestriction: - (sources 속성을 사용하는 경우 필요) 이 속성을 사용하면 지정된 sources를 기반으로 액세스 제한을 적용할 수 있습니다. 이러한 액세스 제한을 적용하려면 sourceRestriction 속성을 SOURCE_RESTRICTION_ENABLED로 설정합니다.

    이러한 액세스 제한을 사용 중지하려면 sourceRestriction 속성을 SOURCE_RESTRICTION_DISABLED로 설정합니다.

    sourceRestriction 속성에 값을 설정하지 않으면 VPC 서비스 제어는 sources 속성을 무시하고 액세스 제한을 적용하지 않습니다.

이그레스 정책 파일 구성을 완료했으면 인그레스 및 이그레스 정책 업데이트를 참조하여 이그레스 정책 파일을 서비스 경계에 적용합니다.

서비스 경계에서 여러 이그레스 규칙을 구성하는 경우 VPC 서비스 제어는 이그레스 규칙 중 하나의 조건을 충족하는 요청을 허용합니다.

테스트 실행 모드를 사용하여 인그레스/이그레스 정책 테스트

서비스의 모든 메서드에 대한 액세스 권한을 부여하지 않을 경우 허용할 정확한 메서드 목록을 파악하기가 어려울 수 있습니다. 서비스에 지정된 메서드가 별도의 Google Cloud 서비스에서 다른 메서드를 호출할 수 있기 때문입니다. 예로는 쿼리를 실행하도록 Cloud Storage 버킷에서 테이블을 로드하는 BigQuery가 있습니다.

허용할 올바른 메서드 세트를 결정하려면 VPC 서비스 제어 테스트 실행 모드를 사용하면 됩니다. 먼저 인그레스 정책이나 이그레스 정책이 없는 테스트 실행 모드에서 경계를 사용 설정하고 감사 로그에서 호출된 메서드 목록을 수집합니다. 그런 다음 모든 위반이 중단될 때까지 테스트 실행 모드에서 이 메서드를 인그레스/이그레스 정책에 계속해서 추가하면 됩니다. 모든 위반이 중단되었을 때 구성을 테스트 실행 모드에서 시행 모드로 이전합니다.

지원되지 않는 기능

다음 기능은 현재 인그레스 및 이그레스 규칙에 지원되지 않습니다.

  1. 프로젝트 대신 라벨별로 Google Cloud 리소스를 식별합니다.
  2. 모든 서비스가 메서드별 인그레스/이그레스 규칙을 지원하지 않습니다. 지원되는 서비스 메서드 제한사항을 참조하세요.
  3. ANY_SERVICE_ACCOUNTANY_USER_ACCOUNT ID 유형은 다음 작업을 허용하는 데 사용할 수 없습니다.

제한사항

인그레스 및 이그레스 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.

다음 단계

  • Codelab을 완료하여 인그레스 및 이그레스 위반을 수정하는 방법을 알아보세요.