이 페이지에서는 방화벽 규칙을 다루기 위한 명령어를 설명하고 몇 가지 사용 예를 제공합니다.
시작하기 전에
기본 네트워크에 대한 묵시적 규칙 및 시스템 생성 규칙과 같은 방화벽 규칙에 대한 자세한 내용은 방화벽 규칙 개요를 참조하세요.
방화벽 규칙을 구성하기 전에 Google Cloud에서 사용되는 방화벽 구성요소에 익숙해지도록 방화벽 규칙 구성요소를 검토하세요.
방화벽 규칙 만들기
방화벽 규칙은 네트워크 수준에서 정의되며 네트워크가 만들어진 위치에만 적용됩니다. 그러나 각각에 대해 선택한 이름은 프로젝트에 고유해야 합니다.
방화벽 규칙을 만들 때 방화벽 규칙 로깅을 사용 설정할 수 있습니다. 로깅을 사용 설정한 경우 메타데이터 필드를 생략하여 스토리지 비용을 절약할 수 있습니다. 자세한 내용은 방화벽 규칙 로깅 사용을 참조하세요.
Console
- Google Cloud Console의 방화벽 페이지로 이동합니다.
방화벽 페이지로 이동 - 방화벽 규칙 만들기를 클릭합니다.
- 방화벽 규칙의 이름을 입력합니다.
이 이름은 프로젝트에 고유해야 합니다. - (선택사항) 방화벽 규칙 로깅을 사용 설정할 수 있습니다.
- 로그 > 사용을 클릭합니다.
- 메타데이터를 생략하려면 로그 세부정보를 펼치고 메타데이터 포함을 선택 해제합니다.
- 방화벽 규칙의 네트워크를 지정합니다.
- 규칙의 우선순위를 지정합니다.
숫자가 작을수록 우선순위가 높아집니다. - 트래픽 방향에서 인그레스 또는 이그레스를 선택합니다.
- 일치 시 작업에서 허용 또는 거부를 선택합니다.
- 규칙의 대상을 지정합니다.
- 규칙을 네트워크의 모든 인스턴스에 적용하려면
All instances in the network
를 선택합니다. - 네트워크(대상) 태그별로 선택한 인스턴스에 규칙을 적용하려면
Specified target tags
를 선택한 다음 대상 태그 필드에 규칙이 적용해야 하는 태그를 입력합니다. - 연결된 서비스 계정별로 선택한 인스턴스에 규칙을 적용하려면
Specified service account
를 선택하고 서비스 계정 범위 아래에서 서비스 계정이 현재 프로젝트에 있는지 다른 계정에 있는지 표시한 다음 대상 서비스 계정 필드에서 서비스 계정 이름을 선택하거나 입력합니다.
- 규칙을 네트워크의 모든 인스턴스에 적용하려면
- 인그레스 규칙의 경우 소스 필터를 지정합니다.
IP ranges
를 선택하고 소스 IP 범위 필드에 CIDR 블록을 입력하여 수신 트래픽의 소스를 IP 주소 범위별로 정의합니다. 모든 네트워크의 소스에0.0.0.0/0
을 사용합니다.- 네트워크 태그로 소스를 제한하려면
Source tags
를 선택한 다음 소스 태그 필드에 네트워크 태그를 입력합니다. 소스 태그의 개수에 대한 제한은 VPC 할당량 및 제한을 참조하세요. 소스 태그별 필터링은 대상이 서비스 계정으로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요. - 서비스 계정별로 소스를 제한하려면
Service account
를 선택하고 서비스 계정 범위 아래에서 서비스 계정이 현재 프로젝트에 있는지 아니면 다른 프로젝트에 있는지를 지정하고 소스 서비스 계정 필드에서 서비스 계정 이름을 선택하거나 입력합니다. 소스 서비스 계정별 필터링은 대상이 네트워크 태그로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요. - 원하는 경우 보조 소스 필터를 지정합니다. 보조 소스 필터는 기본 소스 필터와 동일한 필터 기준을 사용할 수 없습니다. 소스 IP 범위는 소스 태그 또는 소스 서비스 계정과 함께 사용할 수 있으며, 유효한 소스 세트는 소스 범위 IP 주소와 네트워크 태그(또는 서비스 계정)로 식별된 인스턴스의 통합입니다.
- 소스 태그와 소스 서비스 계정은 함께 사용할 수 없습니다.
- 이그레스 규칙의 경우 대상 필터를 지정합니다.
IP ranges
를 선택하고 대상 IP 범위 필드에 CIDR 블록을 입력하여 발신 트래픽의 대상을 IP 주소 범위별로 정의합니다. 모든 곳을 나타내려면0.0.0.0/0
을 사용합니다.
규칙을 적용할 프로토콜 및 포트를 정의합니다.
모든 프로토콜 및 대상 포트에 규칙을 적용할 수 있도록 하려면 작업에 따라
Allow all
또는Deny all
을 선택합니다.특정 프로토콜 및 대상 포트를 정의합니다.
- TCP 프로토콜과 대상 포트를 포함하려면 tcp를 선택합니다.
all
또는20-22, 80, 8080
등의 쉼표로 구분된 대상 포트 목록을 입력합니다. - UDP 프로토콜과 대상 포트를 포함하려면 udp를 선택합니다.
all
또는67-69, 123
등의 쉼표로 구분된 대상 포트 목록을 입력합니다. icmp
또는sctp
등의 프로토콜을 포함하려면 기타 프로토콜을 선택합니다.
- TCP 프로토콜과 대상 포트를 포함하려면 tcp를 선택합니다.
(선택사항) 방화벽 규칙을 만들고, 적용 상태를 사용 중지됨으로 설정하여 규칙을 시행하지 않을 수 있습니다. 규칙 사용 중지를 클릭한 다음 사용 중지됨을 선택합니다.
만들기를 클릭합니다.
gcloud
방화벽 규칙을 만들기 위한 gcloud
명령어는 다음과 같습니다.
gcloud compute firewall-rules create NAME \ [--network NETWORK; default="default"] \ [--priority PRIORITY;default=1000] \ [--direction (ingress|egress|in|out); default="ingress"] \ [--action (deny | allow )] \ [--target-tags TAG[,TAG,...]] \ [--target-service-accounts=IAM_SERVICE_ACCOUNT[,IAM_SERVICE_ACCOUNT,...]] \ [--source-ranges CIDR_RANGE[,CIDR_RANGE,...]] \ [--source-tags TAG,TAG,] \ [--source-service-accounts=IAM_SERVICE_ACCOUNT[,IAM_SERVICE_ACCOUNT,...]] \ [--destination-ranges CIDR_RANGE[,CIDR_RANGE,...]] \ [--rules (PROTOCOL[:PORT[-PORT]],[PROTOCOL[:PORT[-PORT]],...]] | all ) \ [--disabled | --no-disabled] \ [--enable-logging | --no-enable-logging] \ [--logging-metadata LOGGING_METADATA]
매개변수를 다음과 같이 사용합니다. 각 항목에 대한 자세한 내용은 SDK 참조 문서에서 볼 수 있습니다.
--network
규칙의 네트워크입니다. 생략할 경우default
네트워크에 규칙이 생성됩니다. 기본 네트워크가 없거나 특정 네트워크에 규칙을 만들려는 경우 이 필드를 사용해야 합니다.--priority
규칙의 우선순위를 나타내는 숫자 값입니다. 숫자가 작을수록 우선순위가 높아집니다.--direction
트래픽의 방향(ingress
또는egress
)입니다.--action
일치 시 작업(allow
또는deny
)입니다.--rules
플래그와 함께 사용해야 합니다.- 세 가지 방법 중 하나로 대상을 지정합니다.
- 인그레스 규칙의 경우 소스를 지정합니다.
- 인그레스 소스가 모든 곳(
0.0.0.0/0
)이어야 하는 경우--source-ranges
,source-tags
,--source-service-accounts
를 생략합니다. --source-ranges
소스 IP 주소 범위를 CIDR 형식으로 지정하려면 이 플래그를 사용합니다.--source-tags
네트워크 태그별로 소스 인스턴스를 지정하려면 이 플래그를 사용합니다. 소스 태그별 필터링은 대상이 서비스 계정으로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.--source-ranges
와--source-tags
를 함께 사용할 수 있습니다. 둘 다 지정할 경우 유효한 소스 세트는 소스 범위 IP 주소와 네트워크 태그로 식별된 인스턴스의 통합입니다. 태그가 지정된 인스턴스에 소스 범위에 속하는 IP가 없더라도 마찬가지입니다.--source-service-accounts
사용하는 서비스 계정별로 인스턴스를 지정하려면 이 플래그를 사용합니다. 소스 서비스 계정별 필터링은 대상이 네트워크 태그로 지정되지 않은 경우에만 사용할 수 있습니다. 자세한 내용은 서비스 계정별 필터링 및 네트워크 태그별 필터링을 참조하세요.--source-ranges
와--source-service-accounts
를 함께 사용할 수 있습니다. 둘 다 지정할 경우 유효한 소스 세트는 소스 범위 IP 주소와 소스 서비스 계정으로 식별된 인스턴스의 통합입니다. 소스 서비스 계정으로 식별된 인스턴스에 소스 범위에 속하는 IP가 없더라도 마찬가지입니다.
- 인그레스 소스가 모든 곳(
- 이그레스 규칙의 경우 대상을 지정합니다.
- 이그레스 목적지가 모든 곳(
0.0.0.0/0
)이어야 하는 경우--destination-ranges
를 생략합니다. --destination-ranges
목적지 IP 주소 범위를 CIDR 형식으로 지정하려면 이 플래그를 사용합니다.
- 이그레스 목적지가 모든 곳(
--rules
규칙이 적용되는 프로토콜 및 대상 포트의 목록입니다. 모든 프로토콜 및 대상 포트에 규칙을 적용할 수 있도록 하려면all
을 사용합니다.--action
플래그가 필요합니다.- 기본적으로 방화벽 규칙은 자동으로 만들어지고 적용되지만 이 동작을 변경할 수 있습니다.
--disabled
와--no-disabled
를 모두 생략하면 방화벽 규칙이 만들어지고 적용됩니다.--disabled
방화벽 규칙을 만들지만 시행하지 않으려면 이 플래그를 추가합니다. 방화벽 규칙을 업데이트해서 사용 설정할 때까지 방화벽 규칙은 사용 중지된 상태로 유지됩니다.--no-disabled
방화벽 규칙을 적용하려면 이 플래그를 추가합니다.
--enable-logging | --no-enable-logging
규칙을 만들거나 업데이트할 때 방화벽 규칙 로깅을 사용 설정할 수 있습니다. 방화벽 규칙 로깅을 사용하면 방화벽 규칙의 영향을 감사, 확인, 분석할 수 있습니다. 세부정보는 방화벽 규칙 로깅을 참조하세요.--logging-metadata
로깅을 사용 설정한 경우 기본적으로 방화벽 규칙 로깅에 기본 필드와 메타데이터 필드가 포함됩니다. 메타데이터 필드를 생략하여 스토리지 비용을 절약할 수 있습니다. 자세한 내용은 방화벽 규칙 로깅 사용을 참조하세요.
API
방화벽 규칙을 만듭니다.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "FIREWALL_NAME", "network": "projects/PROJECT-ID/global/networks/NETWORK_NAME", ... other fields }
자리표시자를 유효한 값으로 바꿉니다.
PROJECT_ID
는 VPC 네트워크가 있는 프로젝트의 ID입니다.NETWORK_NAME
은 방화벽 규칙이 생성된 VPC 네트워크의 이름입니다.FIREWALL_NAME
은 방화벽 규칙의 이름입니다.인그레스 방화벽 규칙의 경우
sourceRanges
,sourceTags
또는sourceServiceAccounts
필드를 사용하여 인그레스 소스를 지정합니다.0.0.0.0/0
범위를 사용하려면 필드를 지정하지 마세요.sourceTags
필드와sourceServiceAccounts
필드를 함께 사용할 수 없습니다. 하지만sourceTags
또는sourceServiceAccounts
와 함께sourceRanges
를 사용할 수 있습니다. 그러면 방화벽 규칙을 적용하기 위해 연결이 일치해야 합니다.대상 필드의 경우
sourceTags
필드를 사용할 때targetServiceAccounts
필드를 사용할 수 없습니다.targetTags
필드를 사용하거나 대상 필드를 사용하지 않아야 합니다. 마찬가지로sourceServiceAccounts
필드를 사용하는 경우targetTags
필드를 사용할 수 없습니다. 대상 필드를 지정하지 않으면 규칙이 네트워크의 모든 대상에 적용됩니다.이그레스 방화벽 규칙의 경우
destinationRanges
필드를 사용하여 대상을 지정합니다. 대상을 지정하지 않으면 Google Cloud에서0.0.0.0/0
을 사용합니다.targetTags
또는targetServiceAccounts
필드를 사용하여 규칙을 적용할 대상을 지정합니다. 대상 필드를 지정하지 않으면 규칙이 네트워크의 모든 대상에 적용됩니다.
각 필드에 대한 자세한 내용과 설명은 firewalls.insert
메서드를 참조하세요.
방화벽 규칙 업데이트
일치 조건에 대해 지정된 프로토콜 및 대상 포트와 같은 방화벽 규칙의 일부 구성요소를 수정할 수 있습니다. 방화벽 규칙의 이름, 네트워크, 일치 시 작업, 트래픽 방향은 수정할 수 없습니다.
이름, 네트워크, 작업, 방향 구성요소를 변경해야 하는 경우 규칙을 삭제하고 새 규칙을 생성해야 합니다.
Console
- Google Cloud Console의 방화벽 페이지로 이동합니다.
방화벽 페이지로 이동 - 수정하려는 방화벽 규칙을 클릭합니다.
- 수정을 클릭합니다.
편집 가능한 구성요소를 필요에 맞게 수정합니다.
지정된 프로토콜 및 포트 필드에서 세미콜론으로 구분된 목록을 사용하여 여러 프로토콜과 프로토콜 및 대상 포트 조합을 지정합니다.
저장을 클릭합니다.
gcloud
방화벽 규칙을 업데이트하기 위한 gcloud
명령어는 다음과 같습니다.
gcloud compute firewall-rules update NAME \ [--priority=PRIORITY] \ [--description=DESCRIPTION] \ [--target-tags=TAG,...] \ [--target-service-accounts=IAM_SERVICE_ACCOUNT,_] \ [--source-ranges=CIDR_RANGE,...] \ [--source-tags=TAG,...] \ [--source-service-accounts=IAM_SERVICE_ACCOUNT,_] \ [--destination-ranges=CIDR_RANGE,...] \ [--rules=[PROTOCOL[:PORT[-PORT]],…]] \ [--disabled | --no-disabled] \ [--enable-logging | --no-enable-logging]
각 플래그에 대한 설명은 방화벽 규칙 만들기와 동일합니다. 각 항목에 대한 세부정보는 SDK 참조 문서에서 볼 수 있습니다.
API
PATCH를 사용하여 allowed
, description
,sourceRanges
, sourceTags
, targetTags
필드를 업데이트합니다. 다른 모든 필드에는 PUT 또는 POST를 사용합니다.
(PATCH|(POST|PUT)) https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME { "name": "FIREWALL_NAME", "network": "projects/PROJECT-ID/global/networks/NETWORK_NAME", ... other fields }
자리표시자를 유효한 값으로 바꿉니다.
PROJECT_ID
는 VPC 네트워크가 있는 프로젝트의 ID입니다.NETWORK_NAME
은 방화벽 규칙이 있는 VPC 네트워크의 이름입니다.FIREWALL_NAME
은 업데이트할 방화벽 규칙의 이름입니다.
각 필드에 대한 자세한 내용과 설명은 firewalls.patch
또는 firewalls.update
메서드를 참조하세요.
VPC 네트워크의 방화벽 규칙 나열
Cloud Console에서 프로젝트 또는 특정 VPC 네트워크의 모든 방화벽 규칙을 나열할 수 있습니다. 각 방화벽 규칙에 대해 Cloud Console에 규칙 유형, 대상, 필터와 같은 세부정보가 표시됩니다.
방화벽 규칙 로깅을 사용 설정하면 방화벽 통계가 방화벽 규칙에 대한 통계를 제공하여 구성을 더 잘 이해하고 안전하게 최적화할 수 있습니다. 예를 들어 지난 6주 동안 사용되지 않은 allow
규칙이 표시됩니다.
자세한 내용은 방화벽 통계 문서의 방화벽 규칙 세부정보 화면 사용을 참조하세요.
Console
프로젝트에서 모든 네트워크의 모든 방화벽 규칙을 표시하려면 다음 안내를 따르세요.
- Google Cloud Console의 방화벽 페이지로 이동합니다.
방화벽 페이지로 이동
특정 네트워크의 방화벽 규칙을 표시하려면 다음 안내를 따르세요.
- Google Cloud Console에서 VPC 네트워크 페이지로 이동합니다.
VPC 네트워크 페이지로 이동 - VPC 네트워크의 이름을 클릭하여 세부정보 페이지로 이동합니다.
- 네트워크 세부정보 페이지에서 방화벽 규칙 탭을 클릭합니다.
gcloud
다음 명령어는 지정된 네트워크([NETWORK-NAME]
)의 정렬된 방화벽 규칙 목록을 생성합니다.
gcloud compute firewall-rules list --filter network=NETWORK_NAME \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, targetTags.list():label=TARGET_TAGS )"
API
제공된 네트워크에 대한 모든 방화벽 규칙을 나열합니다.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/?filter=network="NETWORK_NAME
자리표시자를 유효한 값으로 바꿉니다.
PROJECT_ID
는 VPC 네트워크가 있는 프로젝트의 ID입니다.NETWORK_NAME
은 나열할 방화벽 규칙이 포함된 VPC 네트워크의 이름입니다.
자세한 내용은 firewalls.list
메서드를 참조하세요.
VM 인스턴스의 네트워크 인터페이스에 대한 방화벽 규칙 나열
각 네트워크 인터페이스에 대해 Cloud Console에는 인터페이스에 적용되는 모든 방화벽 규칙과 인터페이스에서 실제로 사용되는 규칙이 나열됩니다. 방화벽 규칙은 다른 규칙을 마스킹할 수 있으므로 인터페이스에 적용되는 일부 규칙이 실제로 인터페이스에서 사용되지 않을 수 있습니다.
방화벽 규칙은 규칙의 대상 매개변수를 통해 VM 인스턴스에 연결되고 적용됩니다. 적용되는 모든 규칙을 보고 특정 규칙이 인터페이스에 적용되는지 여부를 확인할 수 있습니다.
방화벽 규칙 로깅을 사용 설정하면 방화벽 통계가 방화벽 규칙에 대한 통계를 제공하여 구성을 더 잘 이해하고 안전하게 최적화할 수 있습니다. 예를 들어 지난 6주 동안 적중한 인터페이스의 규칙이 표시됩니다. 자세한 내용은 방화벽 통계 문서의 VM 네트워크 인터페이스 세부정보 화면 사용을 참조하세요.
VM 인스턴스의 특정 네트워크 인터페이스에 적용되는 모든 방화벽 규칙을 보려면 다음 안내를 따르세요.
- Google Cloud Console의 VM 인스턴스 페이지로 이동하여 확인할 인스턴스를 찾습니다.
VM 인스턴스 페이지로 이동 - 인스턴스의 추가 작업 메뉴(
)에서 네트워크 세부정보 보기를 선택합니다.
- 인스턴스에 여러 네트워크 인터페이스가 있는 경우 네트워크 인터페이스 세부정보 섹션에서 보려는 네트워크 인터페이스를 선택합니다.
- 방화벽 규칙 탭을 클릭하여 규칙 이름에 따라 정렬된 네트워크 인터페이스에 적용되는 모든 규칙을 확인합니다.
네트워크 인터페이스에 적용되는 규칙 중 일부는 사용되지 않을 수 있습니다. 더 구체적인 범위 또는 우선순위가 더 높은 규칙이 일부 규칙을 재정의할 수 있습니다. 사용 중인 규칙을 보고 인스턴스에 대해 열려 있거나 닫혀 있는 IP 범위, 프로토콜, 대상 포트를 빠르게 확인할 수 있습니다.
VM 인스턴스의 특정 네트워크 인터페이스에서 사용 중인 규칙을 보려면 다음 안내를 따르세요.
- Google Cloud Console의 VM 인스턴스 페이지로 이동하여 확인할 인스턴스를 찾습니다.
VM 인스턴스 페이지로 이동 - 인스턴스의 추가 작업 메뉴(
)에서 네트워크 세부정보 보기를 선택합니다.
- 인스턴스에 여러 네트워크 인터페이스가 있는 경우 네트워크 인터페이스 세부정보 섹션에서 보려는 네트워크 인터페이스를 선택합니다.
- 네트워크 분석 섹션에서 수신 분석 또는 이그레스 분석 탭을 선택합니다.
- 가장 구체적인 IP 주소 범위부터 순서대로 정렬된 표를 보고 특정 IP 주소를 주고받는 트래픽이 허용되는지 확인합니다.
방화벽 규칙 세부정보 보기
방화벽 규칙을 검사하여 규칙의 이름, 관련 네트워크, 규칙이 사용 설정 상태인지 사용 중지 상태인지를 포함한 구성요소를 볼 수 있습니다.
콘솔
- 방화벽 규칙을 나열합니다. 모든 규칙 목록을 보거나 특정 네트워크의 규칙만 볼 수 있습니다.
- 규칙을 클릭하여 확인합니다.
gcloud
다음 명령어는 개별 방화벽 규칙을 설명합니다. [FIREWALL-NAME]
을 방화벽 규칙의 이름으로 바꿉니다. 방화벽 규칙 이름은 프로젝트에서 고유하므로 기존 규칙을 설명할 때 네트워크를 지정할 필요는 없습니다.
gcloud compute firewall-rules describe [FIREWALL-NAME]
API
특정 방화벽 규칙을 설명합니다.
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
자리표시자를 유효한 값으로 바꿉니다.
PROJECT_ID
는 방화벽 규칙이 있는 프로젝트의 ID입니다.FIREWALL_NAME
은 설명할 방화벽 규칙의 이름입니다.
자세한 내용은 firewalls.get
메서드를 참조하세요.
방화벽 규칙 삭제
콘솔
- 방화벽 규칙을 나열합니다. 모든 규칙 목록을 보거나 특정 네트워크의 규칙만 볼 수 있습니다.
- 삭제할 규칙을 클릭합니다.
- 삭제를 클릭합니다.
- 삭제를 다시 클릭하여 확인합니다.
gcloud
다음 명령어는 방화벽 규칙을 삭제합니다. [FIREWALL-NAME]
을 삭제할 규칙의 이름으로 바꿉니다.
gcloud compute firewall-rules delete [FIREWALL-NAME]
API
방화벽 규칙을 삭제합니다.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/FIREWALL_NAME
자리표시자를 유효한 값으로 바꿉니다.
PROJECT_ID
는 방화벽 규칙이 있는 프로젝트의 ID입니다.FIREWALL_NAME
은 삭제할 방화벽 규칙의 이름입니다.
자세한 내용은 firewalls.delete
메서드를 참조하세요.
방화벽 규칙 모니터링
방화벽 규칙에 로깅을 사용 설정하여 어떤 규칙이 어떤 트래픽을 허용 또는 차단하는지 확인할 수 있습니다. 자세한 내용은 방화벽 규칙 로깅 사용을 참조하세요.
구성 예
아래 다이어그램은 방화벽 구성의 예시를 보여 줍니다. 이 시나리오에는 다음을 포함하는 my-network
가 포함됩니다.
- IP 범위가
10.240.10.0/24
인 서브넷subnet1
- IP 범위가
192.168.1.0/24
인 서브넷subnet2
webserver
태그와192.168.1.2
내부 IP가 있는subnet2
의vm1
인스턴스database
태그와192.168.1.3
내부 IP가 있는subnet2
의vm2
인스턴스
예시 1: subnet1
의 포트 80
에 대한 연결을 제외한 모든 인그레스 TCP 연결 거부
이 예시에서는 subnet1
의 포트 80
을 대상으로 하는 연결을 제외한 모든 인그레스 TCP 연결을 거부하는 방화벽 규칙 집합을 만듭니다.
webserver
태그가 지정된 인스턴스에 대한 모든 인그레스 TCP 트래픽을 거부하는 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create deny-subnet1-webserver-access \ --network NETWORK_NAME \ --action deny \ --direction ingress \ --rules tcp \ --source-ranges 0.0.0.0/0 \ --priority 1000 \ --target-tags webserver
webserver
태그가 지정된 인스턴스에서 TCP 포트80
에 액세스하는subnet1
(10.240.10.0/24
)의 모든 IP를 허용하는 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \ --network NETWORK_NAME \ --action allow \ --direction ingress \ --rules tcp:80 \ --source-ranges 10.240.10.0/24 \ --priority 50 \ --target-tags webserver
예시 2: vm1
의 포트 80
에 대한 연결을 제외한 모든 이그레스 TCP 연결 거부
모든 이그레스 TCP 트래픽을 거부하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create deny-all-access \ --network NETWORK_NAME \ --action deny \ --direction egress \ --rules tcp \ --destination-ranges 0.0.0.0/0 \ --priority 1000
vm1
포트80
을 대상으로 하는 TCP 트래픽을 허용하는 방화벽 규칙을 만듭니다.gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \ --network NETWORK_NAME \ --action allow \ --direction egress \ --rules tcp:80 \ --destination-ranges 192.168.1.2/32 \ --priority 60
예시 3: 외부 호스트의 포트 443
에 대한 이그레스 TCP 연결 허용
샘플 외부 IP 주소 192.0.2.5
의 포트 443
으로 이그레스 TCP 트래픽을 보내도록 webserver
태그가 지정된 인스턴스를 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create vm1-allow-egress-tcp-port443-to-192-0-2-5 \ --network NETWORK_NAME \ --action allow \ --direction egress \ --rules tcp:443 \ --destination-ranges 192.0.2.5/32 \ --priority 70 \ --target-tags webserver
예시 4: vm2
에서 vm1
로 SSH 연결 허용
webserver
(vm1
) 태그가 있는 인스턴스에 도달하도록 database
(vm2
) 태그가 있는 인스턴스에서 SSH 트래픽을 허용하는 방화벽 규칙을 만듭니다.
gcloud compute firewall-rules create vm1-allow-ingress-tcp-ssh-from-vm2 \ --network NETWORK_NAME \ --action allow \ --direction ingress \ --rules tcp:22 \ --source-tags database \ --priority 80 \ --target-tags webserver
예시 5: 서비스 계정을 사용하여 웹 서버에서 데이터베이스로 TCP:1443 허용
서비스 계정과 역할에 대한 자세한 내용은 서비스 계정에 역할 부여를 참조하세요.
아래 다이어그램의 시나리오를 고려하세요. 이 시나리오에는 템플릿을 통해 자동 확장되는 웹 서버 애플리케이션 my-sa-web
과 데이터베이스 애플리케이션 'my-sa-db'라는 두 개의 애플리케이션이 있습니다. 보안 관리자가 대상 포트 1443
의 my-sa-web
에서 my-sa-db
로의 TCP 흐름을 허용하고자 합니다.
서비스 계정 만들기를 포함한 구성 단계는 다음과 같습니다.
프로젝트 편집자 또는 프로젝트 소유자가
my-sa-web
과my-sa-db
라는 서비스 계정을 만듭니다.gcloud iam service-accounts create my-sa-web \ --display-name "webserver service account"
gcloud iam service-accounts create my-sa-db \ --display-name "database service account"
프로젝트 소유자가 ID 및 액세스 관리(IAM) 정책을 설정하여 웹 서버 개발자
web-dev@example.com
에게 서비스 계정my-sa-web
의 serviceAccountUser 역할을 할당합니다.gcloud iam service-accounts add-iam-policy-binding \ my-sa-web@my-project.iam.gserviceaccount.com \ --member='user:web-dev@example.com' \ --role='roles/iam.serviceAccountUser'
프로젝트 소유자가 IAM 정책을 설정하여 데이터베이스 개발자 "db-dev@example.com"에게 서비스 계정
my-sa-db
의 serviceAccountUser 역할을 할당합니다.gcloud iam service-accounts add-iam-policy-binding \ my-sa-db@my-project.iam.gserviceaccount.com \ --member='user:db-dev@example.com' \ --role='roles/iam.serviceAccountUser'
인스턴스 관리자 역할을 부여받은 개발자
web-dev@example.com
은 웹서버 인스턴스 템플릿을 만들고 인스턴스가 서비스 계정my-sa-web
으로 실행되도록 승인합니다.gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \ --service-account my-sa-web@my-project-123.iam.gserviceaccount.com
인스턴스 관리자 역할을 부여받은 개발자
db-dev@example.com
은 데이터베이스 인스턴스 템플릿을 만들고 인스턴스가 서비스 계정my-sa-db
으로 실행되도록 승인합니다.gcloud compute instance-templates create [INSTANCE_TEMPLATE_NAME] \ --service-account my-sa-db@my-project-123.iam.gserviceaccount.com
보안 관리자는 서비스 계정을 사용하여 방화벽 규칙을 만들어 서비스 계정
my-sa-web
에서 서비스 계정my-sa-db
로 가는 트래픽TCP:1443
을 허용합니다.gcloud compute firewall-rules create FIREWALL_NAME \ --network network_a \ --allow TCP:1443 \ --source-service-accounts my-sa-web@my-project.iam.gserviceaccount.com \ --target-service-accounts my-sa-db@my-project.iam.gserviceaccount.com
문제해결
방화벽 규칙을 만들거나 업데이트할 때의 오류 메시지
다음 오류 메시지 중 하나가 표시될 수 있습니다.
Should not specify destination range for ingress direction.
대상 범위는 인그레스 방화벽 규칙의 유효한 매개변수가 아닙니다.
egress
의 방향이 구체적으로 지정되지 않는 한 방화벽 규칙은 인그레스 규칙으로 간주됩니다. 방향을 지정하지 않는 규칙을 만드는 경우 목적지 범위를 허용하지 않는 인그레스 규칙으로 만들어집니다. 또한, 소스 범위는 이그레스 규칙의 유효한 매개변수가 아닙니다.Firewall direction cannot be changed once created.
기존 방화벽 규칙의 방향을 변경할 수 없습니다. 올바른 매개변수로 새 규칙을 만든 다음 기존 규칙을 삭제해야 합니다.
Firewall traffic control action cannot be changed once created.
기존 방화벽 규칙의 작업을 변경할 수 없습니다. 올바른 매개변수로 새 규칙을 만든 다음 기존 규칙을 삭제해야 합니다.
Service accounts must be valid RFC 822 email addresses.
방화벽 규칙에 지정된 서비스 계정은 RFC 822에 따라 형식이 지정된 이메일 주소여야 합니다.gcloud compute firewall-rules create bad --allow tcp --source-service-accounts invalid-email
Creating firewall...failed. ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: – Invalid value for field 'resource.sourceServiceAccounts[0]': 'invalid-email'. Service accounts must be valid RFC 822 email addresses.
ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
같은 규칙에서 서비스 계정과 태그를 모두 지정할 수는 없습니다.gcloud compute firewall-rules create bad --allow tcp --source-service-accounts test@google.com --target-tags target
Creating firewall...failed. ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: – ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
VM 인스턴스에 연결할 수 없음
VM 인스턴스에 연결할 수 없는 경우 방화벽 규칙을 확인하세요.
다른 VM 인스턴스에서 연결을 시작하는 경우 그 인스턴스의 이그레스 방화벽 규칙을 나열합니다.
gcloud compute firewall-rules list --filter network=[NETWORK-NAME] \ --filter EGRESS \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, sourceServiceAccounts.list():label=SRC_SVC_ACCT, targetTags.list():label=TARGET_TAGS, targetServiceAccounts.list():label=TARGET_SVC_ACCT )"
대상 IP가 이그레스 규칙에서 거부되는지 확인합니다. 우선순위가 가장 높은 규칙(우선순위 번호가 가장 작음)이 우선순위가 낮은 규칙보다 우선합니다. 두 규칙의 우선순위가 같은 경우 거부 규칙이 우선합니다.
수신 방화벽 규칙에서 대상 VM 인스턴스가 포함된 네트워크를 확인합니다.
gcloud compute firewall-rules list --filter network=[NETWORK-NAME] \ --filter INGRESS \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, sourceServiceAccounts.list():label=SRC_SVC_ACCT, targetTags.list():label=TARGET_TAGS, targetServiceAccounts.list():label=TARGET_SVC_ACCT )"
샘플 출력입니다. 출력은 방화벽 규칙 목록에 따라 달라집니다
NAME NETWORK DIRECTION PRIORITY SRC_RANGES DEST_RANGES ALLOW DENY SRC_TAGS SRC_SVC_ACCT TARGET_TAGS TARGET_SVC_ACCT default-allow-icmp default INGRESS 65534 0.0.0.0/0 icmp default-allow-internal default INGRESS 65534 10.128.0.0/9 tcp:0-65535,udp:0-65535,icmp default-allow-rdp default INGRESS 65534 0.0.0.0/0 tcp:3389 default-allow-ssh default INGRESS 65534 0.0.0.0/0 tcp:22 firewall-with-sa default INGRESS 1000 tcp:10000 test1@google.com target@google.com
또한 트래픽이 인그레스 또는 이그레스 방화벽 규칙에 의해 중단되는 경우 VPC 네트워크의 VM 인스턴스에서 다른 VPC 네트워크 또는 Google Cloud 외부 네트워크에 대한 연결 테스트를 실행하여 문제를 해결할 수 있습니다. 연결 테스트를 실행하여 다양한 시나리오에서 문제를 해결하는 방법에 대한 자세한 내용은 연결 테스트 실행을 참조하세요.
내 방화벽 규칙의 사용 설정 여부는 어떻게 알 수 있나요?
방화벽이 사용 설정되었는지, 아니면 사용 중지되었는지 보려면 방화벽 규칙 세부정보를 참조하세요.
Google Cloud Console의 시행에서 Enabled
또는 Disabled
를 확인합니다.
gcloud
명령줄 도구 출력에서 disabled
필드를 확인합니다.
disabled:false
인 경우 규칙이 사용 설정되어 시행되고 있는 것입니다. disabled: true
인 경우 규칙이 사용 중지된 것입니다.
VM 인스턴스에 적용되는 규칙
새 방화벽 규칙을 VPC 네트워크에 추가하여 tcp:1433
의 10.1.2.3
에서 데이터베이스 서버에 대한 트래픽을 허용한다고 가정합니다. 이 규칙을 만든 후 특정 인스턴스에서 규칙이 올바르게 적용되고 있는지 확인할 수 있습니다.
자세한 내용은 VM 인스턴스의 네트워크 인터페이스에 대한 방화벽 규칙 나열을 참조하세요.
다음 예시에서 콘솔은 이 VM 인스턴스의 이그레스 분석에 database-access
규칙을 나열하며, 대상 포트 1433
에서 10.1.2.3
이그레스 트래픽이 허용됩니다. 10.1.0.0/16
범위의 다른 이그레스 트래픽은 deny-database-subnet
방화벽 규칙으로 인해 차단됩니다.

소스 태그가 있는 방화벽 규칙은 즉시 적용되지 않음
소스 태그를 사용하는 인그레스 방화벽 규칙은 적용하는 데 시간이 걸릴 수 있습니다. 세부정보는 인그레스 방화벽 규칙의 소스 태그와 관련된 고려사항을 참조하세요.
다음 단계
- 방화벽 규칙 개요에서 방화벽 규칙에 대한 소개를 확인하세요.