身為一個 PHP Developer,開了一台 ec2 instance,當然馬上就是進去:
-
apt update && apt install
有時為了資安,所以 outbound 再也單純設成 0.0.0.0/0,而本篇文章是記錄我想的到的解法
2022/6/18:調整關於 Lambda 維護 Prefix List 的描述
Instance 啟動後要安裝的套件
上面提到的指令會用到這些 domain:
-
ap-northeast-1.ec2.archive.ubuntu.com
-
raw.githubusercontent.com
-
truststore.pki.rds.amazonaws.com
-
aws-codedeploy-ap-northeast-1.s3.ap-northeast-1.amazonaws.com
-
s3.ap-northeast-1.amazonaws.com
如果去 dig 他們,會發現每一個 domain 都對到多個 IP,我們需要把每一個 IP 加到 outbound rules。
只是說這些 IP 可能會不斷調整…
有幾個解法:
-
把連線到這些網域的事情提早做完:Pre-built image
-
寫一支 Lambda 去維護 Security Group 的 outbound(AWS IP Range、DNS query)
-
免費的 Gateway Endpoint for S3 / Dynamodb
第一個選項就是要寫 Packer 來打包 AMI
第二個選項會遇到 rules per security group 預設只有 60 條,必須要申請提高到 200 再搭配 Prefix List
第三個選項是免費的,但僅限於 S3 / Dynamodb
第四個選項則是每使用一個 AWS 端點,就要建一個以上的 Interface Endpoint(為了HA就要在每個AZ都建立),太貴
AWS IP Range
我只需要用 region = ap-northeast-1 & service = AMAZON 來篩選便會得到 170 組 CIDR,
再把這些 CIDR 全部加到 Prefix list 並掛進 Security group 即可
{
"ip_prefix": "13.34.37.64/27",
"region": "ap-southeast-4",
"service": "AMAZON",
"network_border_group": "ap-southeast-4"
}
在 Lambda 裡面做 DNS Query
可以用 nodejs 的 DNS library 做查詢,並且用 AWS SDK 把查詢到的 IP 寫回 Prefix List
Lambda:每分鐘執行一次的話,一個月是執行 43200 次,總共是 0.06 USD
Route53:每次執行查詢 20 個 domain,一個月總共查詢 864000 次,總共約 0.3 USD
不知道到底呼叫了哪些 Domain…
可以打開 Route 53 Public DNS Query Logging,
流量小的話可以存到 Cloudwatch 直接看;
流量大的話還是存到 S3 再用 Lambda 或 jq 處理一下吧