7장. 튜토리얼: AWS WAF 및 AWS ALB를 사용하여 ROSA 워크로드를 보호
AWS WAF는 보호된 웹 애플리케이션 리소스로 전달되는 HTTP 및 HTTPS 요청을 모니터링할 수 있는 웹 애플리케이션 방화벽입니다.
AWS Application Load Balancer(ALB)를 사용하여 AWS(ROSA) 워크로드의 Red Hat OpenShift Service에WAF(Web Application Firewall)를 추가할 수 있습니다. 외부 솔루션을 사용하면 ROSA 리소스가 WAF 처리로 인해 서비스 거부가 발생하지 않도록 보호합니다.
ALB 기반 솔루션을 사용해야 하는 경우를 제외하고 더 유연한 CloudFront 방법을 사용하는 것이 좋습니다.
7.1. 사전 요구 사항
AZ(여러 가용성 영역) ROSA(HCP 또는 Classic) 클러스터.
참고AWS ALB에는 AWS 문서에 따라 AZ에 두 개 이상의 퍼블릭 서브넷이 필요합니다. 이러한 이유로 ALB와 함께 여러 AZ ROSA 클러스터만 사용할 수 있습니다.
-
OpenShift CLI(
oc
)에 액세스할 수 있습니다. -
AWS CLI(
aws
)에 액세스할 수 있습니다.
7.1.1. 환경 설정
환경 변수를 준비합니다.
$ export AWS_PAGER="" $ export CLUSTER=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}") $ export REGION=$(oc get infrastructure cluster -o=jsonpath="{.status.platformStatus.aws.region}") $ export OIDC_ENDPOINT=$(oc get authentication.config.openshift.io cluster -o jsonpath='{.spec.serviceAccountIssuer}' | sed 's|^https://||') $ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) $ export SCRATCH="/tmp/${CLUSTER}/alb-waf" $ mkdir -p ${SCRATCH} $ echo "Cluster: $(echo ${CLUSTER} | sed 's/-[a-z0-9]\{5\}$//'), Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
7.1.2. AWS VPC 및 서브넷
이 섹션은 기존 VPC에 배포된 클러스터에만 적용됩니다. 클러스터를 기존 VPC에 배포하지 않은 경우 이 섹션을 건너뛰고 아래의 설치 섹션을 진행합니다.
다음 변수를 ROSA 배포의 적절한 값으로 설정합니다.
$ export VPC_ID=<vpc-id> 1 $ export PUBLIC_SUBNET_IDS=(<space-separated-list-of-ids>) 2 $ export PRIVATE_SUBNET_IDS=(<space-separated-list-of-ids>) 3
- 1
- 클러스터의 VPC ID로 바꿉니다(예:
export VPC_ID=vpc-04c429b7dbc4680ba
). - 2
- 을 클러스터의 프라이빗 서브넷 ID로 공백으로 구분된 목록으로 교체하여
()
를 유지해야 합니다. 예:PUBLIC_SUBNET_IDS=(subnet-056fd6861ad332ba2 subnet-08ce3b4ec753fe74c subnet-071a28228664972f)
. - 3
- 을 클러스터의 프라이빗 서브넷 ID로 공백으로 구분된 목록으로 교체하여
()
를 유지해야 합니다. 예:PRIVATE_SUBNET_IDS=(subnet-0b933d72a8d72c36a subnet-0817eb72070f1d3c2 subnet-0806e64159b66665a)
.
클러스터 ID가 있는 클러스터의 VPC에 태그를 추가합니다.
$ aws ec2 create-tags --resources ${VPC_ID} \ --tags Key=kubernetes.io/cluster/${CLUSTER},Value=shared --region ${REGION}
퍼블릭 서브넷에 태그를 추가합니다.
$ aws ec2 create-tags \ --resources ${PUBLIC_SUBNET_IDS} \ --tags Key=kubernetes.io/role/elb,Value='1' \ Key=kubernetes.io/cluster/${CLUSTER},Value=shared \ --region ${REGION}
프라이빗 서브넷에 태그를 추가합니다.
$ aws ec2 create-tags \ --resources ${PRIVATE_SUBNET_IDS} \ --tags Key=kubernetes.io/role/internal-elb,Value='1' \ Key=kubernetes.io/cluster/${CLUSTER},Value=shared \ --region ${REGION}