# ZERO TRUST
## 概念
ZERO TRUST 並不是一個服務而是一個架構,其理念是以連續性認證來確認使用者,傳統的認證方式過度單一只需完成一次驗證即獲得所有授權,ZERO TRUST除了可以加強保護以外也提供了很大的使用彈性。

## 環境
這次的環境除了被授權連進資料庫的Expected Caller1人,會有其他5個人嘗試連進資料庫但是其中4位是不被授權連入的unwanted caller,最後一位則是Expected Caller但是api卻是沒被允許過的,最終我們希望在zero trust原則上把其他5人都被阻擋住,以下為他們的連線情況
Expected Caller-Unknown API:EC2被授權但是呼叫的api卻是沒有被授權的api
Unwanted Caller#1:在同個授權aws帳號使用另外一個subnet,但是CIDR沒有被授權以及其VPC endpoint還有API gateway
Unwanted Caller#2:在同個授權aws帳號使用同一個subnet,用API key to call API,但是IAM沒被API授權
Unwanted Caller#3:在同個授權aws帳號使用同一個subnet,IAM被API授權了但是IAM role沒有授權可以呼叫serviceB API
Unwanted Caller#4:在另一個vpc,但是有VPC endpoint和API gateway授權

## 改進架構
### API gateway授權sigv4
目前api沒有設置授權方法,目前只能由私有IP來調用,要改成僅允許來自指定CIDR的調用
1. 打開Amazon API Gateway
2. 進入api的Method Request

3. 點擊 Authorization旁邊的選項
4. 更改成AWS_IAM
5. 按左邊的勾勾

### API Gateway Resource Policy
在 Amazon API Gateway 之中我們可以利用 Resoure Policy來確保你的"位置""身分"
在resoure policy 可以看到一個程式

其中最關鍵的就是aws:VpcSourceIp他的ip規範是10.199.0.0/24這代表在這個範圍內的ip使用者都是授權的,對於這個規範可能無法有效的保護連線的安全性所以我們要來自己編寫resource policy,
我們做為提供資料庫的一方自然是希望只有serviceA能連線進來所以我們把程式寫成這樣

上述程式中"aws:PrincipalAccount"和"aws:SourceVpce"個別代表了
PrincipalAccount:僅允許來自可信 AWS 賬戶的請求- 您的預期身份(ServiceA AWS 賬戶 ID)
SourceVpce:僅允許來自受信任網絡路徑的API 調用- 您的預期位置(ServiceA VPC 端點 ID)。
利用policy可以有效限制嘗試連線進來的人,如果是沒有再policy裡授權則無法從api連進資料庫。
在設定完policy後我們來用runscanner來查看結果

可以看到unwanted caller #4被阻擋住了,enforced@顯示他被api gateway 擋住了,就是因為他的VPC ID沒有受到授權,即使他已經有了"預期身份"(ServiceA AWS 賬戶 ID)
### VPC ENDPOINT POLICY
作為service因為身分與位置得到了授權,所以會希望自己能呼叫api的機器盡可能地減少,以避免有人多instance器濫用你的"身分"與"位置"所以現在要利用VPC policy 來限制機器,首先要先到vpc endpoint

edit policy後把指令打上去,我們希望只有部分的instance 可以通過endpoint所以要蒐集instance的InstanceRoleArn,同時我們也把ServiceB的APIMethodARN加進去

這樣只有使用授權了的InstanceRoleArn才能通過vpc endpoint同時也限定住instance只能使用get呼叫serviceB 的API gateway ,利用runscanner再看一次可以發現因為限制了只能呼叫serviceB 的API gateway所以Expected Caller-Unknown API被end point擋住了,而unwanted caller因為iam沒有被end point授權所以也被end point擋住了

### vpc security group
除了以上的方式防止其他instance連線進入service也有利用security group限制住只有指定的instance可以進入,首先尋找到serviceB的security group 找到屬於API gateway的規則然後設定inbond rule 只限定 一台instance通過


接者再次使用runscanner來看可以發現,unwanted caller#1#2#3因為不是使用指定的instance來連線所以被security group 擋住了。

### 結語
藉由VPC endpoint policy ,API gateway,Security group,利用他們policy規則一層層的限制住其他instance連進來的方法,相比以前只需要授權的aws帳號就可獲得資料,可以說是大大的加強了安全性。
###### tags: `JAM`