IBM Cloud Docs
네트워크 ACL 정보

네트워크 ACL 정보

액세스 제어 목록(ACL)을 사용하여 IBM Cloud® Virtual Private Cloud에서 모든 수신 및 발신 트래픽을 제어할 수 있습니다. ACL은 보안 그룹과 유사한 기본 제공 가상 방화벽입니다. 보안 그룹과는 대조적으로 ACL 규칙은 _인스턴스_가 아니라 _서브넷_의 트래픽을 제어합니다.

보안 그룹 및 ACL의 특성을 비교하려면 비교 테이블을 참조하십시오.

이 문서에 있는 예제는 CLI를 사용하여 VPC에서 네트워크 ACL을 작성하는 방법을 보여줍니다. IBM Cloud 콘솔에서 ACL을 설정하는 방법에 대한 자세한 내용은 콘솔에서 ACL 구성하기를 참조하세요.

ACL 및 ACL 규칙 관련 작업

ACL을 적용하려면 인바운드 및 아웃바운드 네트워크 트래픽을 처리하는 방법을 판별하는 규칙을 작성하십시오. 복수의 인바운드 및 아웃바운드 규칙을 작성할 수 있습니다. 규칙 할당량에 대한 자세한 정보는 할당량을 참조하십시오.

  • 인바운드 규칙을 사용하는 경우 지정된 프로토콜 및 포트를 통해 소스 IP 범위로부터의 트래픽을 허용하거나 거부할 수 있습니다.
  • 아웃바운드 규칙을 사용하는 경우 지정된 프로토콜 및 포트를 통해 대상 IP 범위로의 트래픽을 허용하거나 거부할 수 있습니다.
  • ACL 규칙에는 우선순위가 지정되고 순서대로 고려됩니다. 우선순위가 높은 규칙이 먼저 평가되며 우선순위가 낮은 규칙을 대체합니다.
  • 인바운드 규칙은 아웃바운드 규칙과 분리되어 있습니다.
  • 아무 규칙도 지정되지 않은 경우에는 암묵적 거부가 기본 동작입니다.

ACL 규칙에서 ICMP, TCP, UDP 프로토콜을 사용하는 방법에 대한 자세한 정보는 인터넷 통신 프로토콜 이해를 참조하십시오.

VPC의 기본 ACL 규칙 업데이트

기본 ACL은 삭제할 수 없다는 점을 제외하면 다른 ACL과 유사합니다.

VPC를 생성하면 시스템은 두 가지 규칙을 가진 VPC의 기본 ACL을 생성합니다

  • allow-inbound 라는 규칙을 통해 모든 소스로부터 들어오는 ICMP, TCP, UDP 트래픽 허용
  • allow-outbound 라는 규칙을 통해 모든 목적지로의 아웃바운드 ICMP, TCP, UDP 트래픽 허용

콘솔, CLI 또는 API를 사용하여 기본 ACL의 규칙을 수정할 수 있습니다.

기본 ACL의 규칙을 편집하면 편집한 규칙이 ACL에 연결된 현재 및 향후 모든 서브넷에 적용됩니다.

서브넷에 ACL 연결

새 서브넷을 작성할 때 연결할 ACL을 지정할 수 있습니다. ACL을 지정하지 않으면 VPC의 기본 네트워크 ACL이 연결됩니다.

모든 서브넷에는 정확히 하나의 ACL이 연결되어 있습니다. 서브넷의 ACL을 다른 ACL로 바꿀 수 있습니다.

ACL 예제

다음 예제에서는 명령행 인터페이스(CLI)를 사용하여 두 개의 ACL을 작성한 후 해당 ACL을 두 개의 서브넷과 연관시킵니다. 그림 1은 시나리오가 어떤지를 보여줍니다.

두 개의 " caption-side="bottom"} 있는 ACL{: caption="예시를 보여주는 그림

그림 1에서는 인터넷의 요청을 처리하는 두 개의 웹 서버 및 공개되지 않도록 숨길 두 개의 백엔드 서버가 존재함을 보여줍니다. 이 예제에서는 두 개의 개별 서브넷(10.10.10.0/2410.10.20.0/24)에 서버를 배치한 후 웹 서버에서 백엔드 서버와 데이터를 교환할 수 있도록 허용해야 합니다. 또한 백엔드 서버에서 제한적인 아웃바운드 트래픽을 허용하려고 합니다.

규칙 예제

다음 규칙 예제는 기본 시나리오에 대한 ACL 규칙을 설정하는 방법을 보여줍니다.

낮은 레벨로 세분화된 규칙보다 높은 레벨로 세분화된 규칙에 더 높은 우선순위를 부여하는 것이 좋습니다. 예를 들어 서브넷 10.10.30.0/24에서 모든 트래픽을 차단하는 규칙이 존재합니다. 이 규칙에 더 높은 우선순위가 지정되는 경우 10.10.30.5의 트래픽을 허용하는 우선순위가 낮은 높은 레벨로 세분화된 규칙은 적용되지 않습니다.

ACL-1 규칙 예제

ACL-1 대한 규칙 예시
인바운드/아웃바운드 허용/거부 소스 IP 대상 IP 프로토콜 포트 설명
인바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 80 인터넷으로부터의 HTTP 트래픽 허용
인바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 443 인터넷으로부터의 HTTPS 트래픽 허용
인바운드 허용 10.10.20.0/24 0.0.0.0/0 모두 모두 백엔드 서버가 있는 서브넷 10.10.20.0/24(으)로부터의 모든 인바운드 트래픽 허용
인바운드 거부 0.0.0.0/0 0.0.0.0/0 모두 모두 다른 모든 인바운드 트래픽 거부
아웃바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 80 인터넷으로의 HTTP 트래픽 허용
아웃바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 443 인터넷으로의 HTTPS 트래픽 허용
아웃바운드 허용 0.0.0.0/0 10.10.20.0/24 모두 모두 백엔드 서버가 있는 서브넷 10.10.20.0/24에 대한 모든 아웃바운드 트래픽 허용
아웃바운드 거부 0.0.0.0/0 0.0.0.0/0 모두 모두 다른 모든 아웃바운드 트래픽 거부

ACL-2 규칙 예제

ACL-2 규칙 예시
인바운드/아웃바운드 허용/거부 소스 IP 대상 IP 프로토콜 포트 설명
인바운드 허용 10.10.10.0/24 0.0.0.0/0 모두 모두 웹 서버가 있는 서브넷 10.10.10.0/24(으)로부터의 모든 인바운드 트래픽 허용
인바운드 거부 0.0.0.0/0 0.0.0.0/0 모두 모두 다른 모든 인바운드 트래픽 거부
아웃바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 80 인터넷으로의 HTTP 트래픽 허용
아웃바운드 허용 0.0.0.0/0 0.0.0.0/0 TCP 443 인터넷으로의 HTTPS 트래픽 허용
아웃바운드 허용 0.0.0.0/0 10.10.10.0/24 모두 모두 웹 서버가 있는 서브넷 10.10.10.0/24에 대한 모든 아웃바운드 트래픽 허용
아웃바운드 거부 0.0.0.0/0 0.0.0.0/0 모두 모두 다른 모든 아웃바운드 트래픽 거부

이 예제에서는 일반적인 케이스에 대해서만 설명합니다. 사용자 시나리오에서는 트래픽에 대해 더욱 세분화된 제어를 사용할 수도 있습니다.

  • 운영을 위해 원격 네트워크에서 10.10.10.0/24 서브넷으로의 액세스가 필요한 네트워크 관리자가 존재할 수 있습니다. 이 경우 인터넷에서 이 서브넷으로의 SSH 트래픽을 허용해야 합니다.
  • 두 개의 서브넷 사이에서 허용되는 프로토콜 범위를 좁힐 수 있습니다.

예제 단계

다음 예제 단계에서는 먼저 수행해야 하는 CLI를 사용하여 VPC를 작성하는 전제조건 단계를 건너뛰었습니다. 자세한 정보는 CLI를 사용한 VPC 리소스 작성을 참조하십시오.

1단계. ACL 작성

다음 CLI 명령을 사용하여 my_web_subnet_aclmy_backend_subnet_acl로 이름 지정된 두 개의 ACL을 작성하십시오.

ibmcloud is network-acl-create my-web-subnet-acl $vpc_id --source-acl-id $old_acl_id
ibmcloud is network-acl-create my-backend-subnet-acl $vpc_id --source-acl-id $old_acl_id

응답에는 새로 작성된 ACL ID가 포함되어 있습니다. 추후 명령에서 사용하기 위해 두 ACL의 ID를 모두 저장하십시오. 다음과 같이 webaclbkacl로 이름 지정된 변수를 사용할 수 있습니다.

webacl="0738-ba9e785a-3e10-418a-811c-56cfe5669676"
bkacl="0738-a4e28308-8ee7-46ab-8108-9f881f22bdbf"

2단계. 기본 ACL 규칙 검색

규칙을 추가하기 전에 해당 규칙에 새 규칙을 삽입할 수 있도록 기본 인바운드 및 아웃바운드 ACL 규칙을 검색하십시오.

ibmcloud is network-acl-rules $webacl
ibmcloud is network-acl-rules $bkacl

응답에는 모든 프로토콜에서 모든 IPv4 트래픽을 허용하는 인바운드 및 아웃바운드 규칙이 표시됩니다.

Getting rules of network acl ba9e785a-3e10-418a-811c-56cfe5669676 under account Demo Account as user demouser...

inbound
ID                                     Name                                                          Action   IPv*   Protocol   Source      Destination   Created
0738-e2b30627-1a1d-447b-859f-ac9431986b6f   allow-all-inbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

outbound
ID                                     Name                                                         Action   IPv*   Protocol   Source      Destination   Created
0738-173a3492-0544-472e-91c0-7828cbcb62d4   allow-all-outbound-rule-2d86bc3f-58e4-436a-8c1a-9b0a710556d6   allow    ipv4   all        0.0.0.0/0   0.0.0.0/0     2 months ago

추후 명령에서 해당 값을 사용할 수 있도록 두 ACL의 ID를 모두 변수로 저장하십시오. 예를 들어 inruleoutrule 변수에 ID를 저장할 수 있습니다.

inrule="0738-e2b30627-1a1d-447b-859f-ac9431986b6f"
outrule="0738-173a3492-0544-472e-91c0-7828cbcb62d4"

3단계. 설명에 따라 새 ACL 규칙 추가

이 예제에서는 먼저 인바운드 규칙을 추가한 후 아웃바운드 규칙을 추가합니다.

기본 인바운드 규칙 앞에 새 인바운드 규칙을 삽입하십시오.

ibmcloud is network-acl-rule-add my_web_acl_rule200 $webacl deny inbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $in-rule

각각의 단계에 추후 명령에서 ID를 사용할 수 있도록 ACL 규칙의 ID를 변수에 저장하십시오. 예를 들어 acl200 변수를 사용할 수 있습니다.

acl200="0738-90930627-1a1d-447b-859f-ac9431986b6f"

이제 acl200에 규칙을 추가하십시오.

ibmcloud is network-acl-rule-add my_web_acl_rule100 $webacl allow inbound all 10.10.20.0/24 0.0.0.0/0 \
--before-rule-id $acl200

ACL 설정이 완료될 때까지 각각의 ID를 변수로 저장하면서 규칙을 추가하십시오.

acl100="0738-78340627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-min 443 --source-port-max 443 --before-rule-id $acl100
acl20="32450627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10 $webacl allow inbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20

기본 아웃바운드 규칙 앞에 새 아웃바운드 규칙을 삽입하십시오.

ibmcloud is network-acl-rule-add my_web_acl_rule200e $webacl deny outbound all 0.0.0.0/0 0.0.0.0/0 \
--before-rule-id $outrule
acl200e="11110627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule100e $webacl allow outbound all 0.0.0.0/0 10.10.20.0/24 \
--before-rule-id $acl200e
acl100e="22220627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule20e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 443 --source-port-min 443 --before-rule-id $acl100e
acl20e="33330627-1a1d-447b-859f-ac9431986b6f"
ibmcloud is network-acl-rule-add my_web_acl_rule10e $webacl allow outbound tcp 0.0.0.0/0 0.0.0.0/0 \
--source-port-max 80 --source-port-min 80 --before-rule-id $acl20e

4단계. 새로 작성된 ACL을 사용하여 두 개의 서브넷을 작성

각각의 ACL이 새 서브넷 중 하나와 연관되도록 두 개의 서브넷을 작성하십시오.

ibmcloud is subnet-create my-web-subnet $vpc_id $zone --ipv4_cidr_block 10.10.10.0/24 \
 --network-acl-id $webacl
ibmcloud is subnet-create my-backend-subnet$vpc_id $zone --ipv4_cidr_block 10.10.20.0/24 \
--network-acl-id $bkacl

명령 목록 치트 시트

ACL에 사용할 수 있는 VPC CLI 명령의 전체 목록을 표시하려면 다음 작업을 수행하십시오.

ibmcloud is network-acls

규칙을 포함하여 ACL 및 해당 메타데이터를 확인하려면 다음 작업을 수행하십시오.

ibmcloud is network-acl $webacl

모든 ACL 규칙을 나열하려는 경우:

ibmcloud is network-acl-rules $webacl

인바운드 ping 규칙 예제

다음은 ACL 규칙을 추가하는 경우 기본 인바운드 규칙 앞에 ping 인바운드 규칙을 추가하기 위한 명령 예제입니다.

구문:

ibmcloud is network-acl-rule-add ACL ACTION DIRECTION PROTOCOL SOURCE DESTINATION [--name NAME] [--icmp-type ICMP_TYPE] [--icmp-code ICMP_CODE] [--source-port-min PORT_MIN] [--source-port-max PORT_MAX] [--destination-port-min PORT_MIN] [--destination-port-max PORT_MAX] [--before-rule-id RULE_ID] [--output JSON] [-q, --quiet]

예:

ibmcloud is network-acl-rule-add 72b27b5c-f4b0-48bb-b954-5becc7c1dcb3 allow inbound icmp 10.2.2.2 10.2.2.3 --icmp-type 8 --icmp-code 0