네트워크 연결에 대한 보안 구성

이 페이지에서는 소비자 네트워크 관리자가 네트워크 연결을 사용하는 VPC 네트워크에서 보안을 관리하는 방법을 설명합니다.

Private Service Connect 인터페이스는 프로듀서 조직에서 만들고 관리하지만 소비자 VPC 네트워크에 있습니다. 소비자 측 보안을 위해서는 소비자 VPC 네트워크의 IP 주소 범위를 기반으로 하는 방화벽 규칙을 사용하는 것이 좋습니다. 이 방식을 사용하면 소비자는 프로듀서의 네트워크 태그를 사용하지 않고 Private Service Connect 인터페이스에서 들어오는 트래픽을 제어할 수 있습니다.

방화벽 규칙과 함께 네트워크 태그를 사용하는 것은 지원되지만 소비자가 태그를 제어하지 않으므로 권장하지 않습니다.

프로듀서-소비자 간 인그레스 제한

예를 들어 소비자가 프로듀서에게 producer-ingress-subnet 액세스 권한을 부여하고 프로듀서가 restricted-subnet에 액세스하지 못하도록 차단하려는 그림 1의 구성 예시를 가정해 보겠습니다.

그림 1. 방화벽 규칙을 사용하면 프로듀서 서브넷의 트래픽이 attachment-subnetproducer-ingress-subnet 서브넷의 VM에만 도달할 수 있습니다.

다음 방화벽 규칙은 제한된 프로듀서 소비자 간 인그레스를 허용합니다.

  1. 우선순위가 낮은 규칙은 네트워크 연결 서브넷의 IP 주소 범위 attachment-subnet에서 들어오는 모든 이그레스 트래픽을 거부합니다.

    gcloud compute firewall-rules create deny-all-egress \
        --network=consumer-vpc \
        --action=DENY \
        --rules=ALL \
        --direction=EGRESS \
        --priority=65534 \
        --source-ranges="10.0.1.48/28" \
        --destination-ranges="0.0.0.0/0"
    
  2. 우선순위가 더 높은 규칙은 attachment-subnet의 IP 주소 범위에서 producer-ingress-subnet 주소 범위에 있는 대상으로의 이그레스를 허용합니다.

    gcloud compute firewall-rules create allow-limited-egress \
        --network=consumer-vpc \
        --action=ALLOW \
        --rules=ALL \
        --direction=EGRESS \
        --priority=1000 \
        --source-ranges="10.0.1.48/28" \
        --destination-ranges="10.10.2.0/24"
    
  3. 인그레스 허용 규칙은 attachment-subnet의 트래픽에 대해 묵시적 인그레스 거부 규칙을 재정의합니다.

    gcloud compute firewall-rules create allow-ingress \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="10.0.1.48/28"
    

소비자-프로듀서 간 이그레스 허용

소비자 네트워크가 프로듀서 네트워크에 대해 트래픽을 시작하도록 하려면 인그레스 방화벽 규칙을 사용하면 됩니다.

소비자가 subnet-1에서 Private Service Connect 연결을 통해 프로듀서 네트워크에 액세스하도록 허용하려는 그림 2의 구성 예시를 가정해 보겠습니다.

그림 2. 인그레스 허용 방화벽 규칙을 통해 subnet-1이 Private Service Connect 연결을 통해 프로듀서 네트워크에 액세스할 수 있지만 subnet-2는 암시적 인그레스 거부 규칙에 의해 차단됩니다(확대하려면 클릭).

다음 방화벽 규칙은 subnet-1만 Private Service Connect 연결을 통해 프로듀서 네트워크에 액세스할 수 있도록 합니다.

gcloud compute firewall-rules create vm-subnet-allow-ingress \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="10.10.2.0/24" \
    --destination-ranges="10.0.1.48/28"

프로듀서 간 보안 구성

프로듀서 애플리케이션이 다른 프로듀서 애플리케이션에 액세스해야 하는 시나리오에서 보안을 위해 VPC 방화벽 규칙을 사용할 수 있습니다.

소비자가 다른 VPC 네트워크에 호스팅되는 두 가지 서로 다른 타사 관리형 서비스를 사용하는 경우를 가정해 보겠습니다. 한 서비스는 데이터베이스이고, 다른 서비스는 분석을 제공합니다. 데이터를 분석하려면 분석 서비스가 데이터베이스 서비스에 연결되어야 합니다. 한 가지 방법은 서비스에서 직접 연결을 만드는 것입니다. 그러나 두 타사 서비스가 직접 연결되면 소비자는 데이터에 대한 제어와 가시성을 잃게 됩니다.

보다 안전한 접근 방식은 그림 3과 같이 Private Service Connect 인터페이스, Private Service Connect 엔드포인트, VPC 방화벽 규칙을 사용하는 것입니다.

그림 3. 데이터베이스 애플리케이션과 바인딩되는 분석 애플리케이션의 트래픽은 소비자 VPC 네트워크를 통해 전달됩니다. VPC 방화벽 규칙은 소스 IP 주소 범위를 기준으로 이그레스 트래픽을 제한합니다(확대하려면 클릭).

이 접근 방식에서 소비자 네트워크는 한 서브넷의 엔드포인트를 통해 데이터베이스 애플리케이션에 연결하고 다른 서브넷의 네트워크 연결을 통해 분석 애플리케이션에 연결합니다. 분석 애플리케이션의 트래픽은 Private Service Connect 인터페이스 및 네트워크 연결을 통과하고 소비자 네트워크를 전환한 후 endpoint-subnet의 엔드포인트를 통해 이그레스하여 데이터베이스 애플리케이션에 도달할 수 있습니다.

소비자 VPC 네트워크에서 VPC 방화벽 규칙은 attachment-subnet의 모든 이그레스 트래픽을 거부합니다. 우선순위가 더 높은 다른 방화벽 규칙은 attachment-subnetconsumer-private-subnet에서 엔드포인트로의 이그레스 트래픽을 허용합니다. 따라서 분석 애플리케이션의 트래픽이 데이터베이스 애플리케이션의 VPC 네트워크에 도달할 수 있으며 이 트래픽은 소비자의 엔드포인트를 통해 이동해야 합니다.

다음 방화벽 규칙은 그림 4에서 설명한 구성을 만듭니다.

  1. 방화벽 규칙이 attachment-subnet의 모든 이그레스 트래픽을 차단합니다.

    gcloud compute firewall-rules create consumer-deny-all-egress \
        --network=consumer-vpc \
        --action=DENY \
        --rules=all \
        --direction=EGRESS \
        --priority=65534 \
        --source-ranges="10.0.1.48/28" \
        --destination-ranges="0.0.0.0/0"
    
  2. 방화벽 규칙은 포트 80에서 attachment-subnetconsumer-private-subnet부터 엔드포인트로 이그레스 TCP 트래픽을 허용합니다.

    gcloud compute firewall-rules create consumer-allow-80-egress \
        --network=intf-consumer-vpc \
        --allow=tcp:80 \
        --direction=EGRESS \
        --source-ranges="10.0.1.48/28,10.10.2.0/24" \
        --destination-ranges="10.0.1.66/32" \
        --priority=1000