[AWS] WAF: Amplify ์ฐ๋ํ๊ธฐ
๊ด๋ จ ํฌ์คํธ
https://blog.naver.com/sssang97/222921945368
Amplify ์ ํ๋ฆฌ์ผ์ด์
์ WAF๋ฅผ ๋ถ์ด๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํ๋ค.
์ ํ์ฌํญ
- WAF๋ ๊ธฐ๋ณธ์ ์ผ๋ก Cloudfront๋ฅผ ๋น๋กฏํ ๋ช๊ฐ์ง ํ์ ๋ ์๋น์ค์ ๋ํด์๋ง ๋ถ์ฐฉ์ด ๊ฐ๋ฅํ๋ฐ, Amplify ์์ฒด์ ๋ํด์๋ ์ฅ์ฐฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- WAF๊ฐ ๋ด๋ถ์ ์ผ๋ก ์์ฑํ๋ Cloudfront๊ฐ ์๊ธด ํ์ง๋ง, ์ด๊ฑด ์ฌ์ฉ์๊ฐ ํต์ ํ ์ ์๋ ๋ธ๋๋ฐ์ค ์์ญ์ ์์นํ๋ค.
- ๊ทธ๋์ Amplify ์ ํ๋ฆฌ์ผ์ด์ ์ WAF๋ฅผ ๋ฌ๋ ค๋ฉด Amplify ๋ธ๋์น์ ๋ํด์ ์๋จ์ Cloudfront๋ฅผ ์ถ๊ฐ๋ก ๋ถ์ด๊ณ , ๊ฑฐ๊ธฐ์ WAF๋ฅผ ์ฅ์ฐฉํ๋ ์์ ํน์ํ ๊ตฌ์ฑ์ ํด์ค์ผ ํ๋ค.
- ์ด๊ฑด AWS console์์๋ ์ํํ ์ ์๋ค. aws sdk๋ cdk๋ฅผ ์ฌ์ฉํด์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ํคํ ์ณ๋ ์ด๋ ๋ค.

์ฌ์ ์กฐ๊ฑด
aws-sdk๊ฐ ๊น๋ ค์์ด์ผ ํ๊ณ , python3๊ฐ ๊น๋ ค์์ด์ผ ํ๋ค.
cdk๋ ์์ผ๋ฉด ์ค์นํ๋ค.
npm install -g aws-cdk # cloudshell์ด๋ฉด ์์ด๋ ๋จ
๊ทผ๋ฐ ๊ทธ๋ฅ aws cloudshell์์ ์คํํ๋ฉด ๋ ํธํ๋ค.
CDK๋ก ๊ตฌ์ฑํ๊ธฐ
์๋ ์ปค๋งจ๋๋ฅผ ์์๋๋ก ์คํํ๋ค.
git clone https://github.com/aws-samples/aws-cdk-amplify-with-waf.git
cd aws-cdk-amplify-with-waf
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
๊ทธ๋ฆฌ๊ณ cdk cli๋ก ๋ถํธ์คํธ๋ํ์ ํด์ค๋ค. (cloudformation ์คํ์ ๋ง๋๋ ๊ฒ์ด๋ค.)
cdk bootstrap aws://ACCOUNT-NUMBER/REGION-1 aws://ACCOUNT-NUMBER/REGION-2
์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ WAF๊ฐ ์๋ ๋ฆฌ์ ์ด๊ณ , ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๊ฐ Amplify๊ฐ ์๋ ๋ฆฌ์ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ด๋ฐ์ cdk ์ํ ์์ค์์, ์ ํ์ผ์ ์์ ํด์ค๋ค.
webacl ARN๊ณผ amplify ์ฑ ID, ๋ธ๋์น๋ช
์ ๋ฃ์ด์ค๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ ์ฝ๋์ ์ง๊ธ ๋ฒ๊ทธ๊ฐ ์๋ค. ๋ธ๋์น๋ช
์ ์ฌ๋์๊ฐ ๋ค์ด๊ฐ๋ฉด ๊นจ์ง๋ค.
๋ด๊ฐ PR์ ์ฌ๋ ค๋๊ธด ํ๋๋ฐ, ๋จธ์ง๊ฐ ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
์ด๋ ๊ฒ ๋์ด์๋ ๋ถ๋ถ์

์ด๋ ๊ฒ ๋ฐ๊ฟ์ค๋ค.

๊ทธ๋ฆฌ๊ณ cdk-cli๋ก ์คํํ๋ฉด ๋๋ค.
cdk deploy CustomAmplifyDistributionStack

์ข ์ค๋๊ฑธ๋ฆฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ค๋ฆฌ๋ฉด
amplify ์๋จ์ ๋ฌ๋ฆฐ cloudfront ๋ฐฐํฌ๊ฐ ์๊ธธ ๊ฒ์ด๊ณ
WebACL์๋ ๋ฌ๋ฆด ๊ฒ์ด๋ค.
์ด๊ฑด ํ์์ ๋ฐ๋ผ ์ธ์ ๋ ์ฝ์์์ ๋๋ค ๋ถ์ฌ๋ ๋๋ค.
์ฐธ์กฐ
https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/enable-aws-waf-for-web-applications-hosted-by-aws-amplify.html
https://github.com/aws-samples/aws-cdk-amplify-with-waf