AWS
連接
從終端機連接AWS。傳入--help可查看AWS接受的旗標,在無瀏覽器環境中再加上--no-browser。
polylane cloud connect --provider aws建立唯讀IAM角色的CloudFormation堆疊。
連接AWS是一個以CloudFormation範本為基礎的自動化流程。Polylane永遠不會取得你基礎設施的寫入權限:堆疊只授予一個Polylane以跨帳戶方式擔任的唯讀角色。
設定
- 輸入你的12位數AWS Account ID。
- 選擇要連接的AWS Region。
- 點擊Deploy stack on AWS。你會被重新導向到已預先載入範本的CloudFormation主控台。
- 檢視範本並點擊Create stack。
- 堆疊會建立一個具有唯讀權限、由Polylane擔任的IAM角色。
- 回到Polylane。幾分鐘內你的資源就會開始同步。
CloudFormation範本是公開的:你可以在建立堆疊前確切檢視授予了哪些權限。
權限
IAM角色嚴格唯讀:
- AWS受管的
ReadOnlyAccess政策 - 沒有寫入、刪除或修改權限
- 只允許從Polylane的AWS帳戶進行跨帳戶擔任
調查警報
連接時你可以讓Polylane訂閱該帳戶中的CloudWatch Alarms。警報觸發時,Polylane會接手並自動調查。這是可選的,之後可以更改。
中斷連接
在你的AWS帳戶中刪除CloudFormation堆疊。這會移除IAM角色以及堆疊建立的所有其他資源。你也可以從Polylane中斷該帳戶的連接,這會停止所有同步。
從CI工作或任何其他沒有瀏覽器的環境連接AWS。
引導式流程的最後一步是一個由某人在AWS主控台開啟的CloudFormation快速建立連結。如果你的AWS帳戶只透過程式碼審查與管線變更,就沒有人在那裡點擊它。同樣的連接可以完全放進一個CI工作:一次API呼叫建立連接並產生CloudFormation範本,你自己的工具部署範本,而堆疊會自行向Polylane註冊帳戶。
如果你只想要範本YAML,主控台的連接對話框也會在Advanced底下內嵌顯示它,附有Copy與Download按鈕。下面的流程則完全不需要主控台。
先決條件
- 一把具有
cloud_accounts:write與cloud_accounts:read範圍的Polylane API金鑰。請見API金鑰與OAuth。 - 你的工作區ID,以
ws_開頭。用同一把金鑰從GET /v1/workspaces讀取它。 - 管線中能在你要連接的帳戶裡部署CloudFormation堆疊並建立IAM角色的AWS憑證。
建立連接
curl -X POST https://api.polylane.com/v1/cloud_accounts \
-H "x-api-key: $POLYLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "aws",
"workspaceId": "ws_0abc123",
"account": "123456789012",
"regions": ["us-east-1", "eu-west-1"]
}'
account是12位數的AWS帳戶ID。regions列出Polylane在每次同步時掃描的區域;傳入null則掃描帳戶上啟用的每個區域,於每次同步時解析。兩個可選的布林值createMonitoringAlarms與subscribeToAlarms控制雲端頁面所述的警示行為,預設為true。
回應帶有流程其餘部分所需的一切:
{
"success": true,
"result": {
"provider": "aws",
"url": "https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?...",
"s3Url": "https://....s3.amazonaws.com/...?X-Amz-Expires=3600&...",
"region": "us-east-1",
"templateBody": "Description: This template creates the resources necessary for Polylane to observe your AWS Account\n..."
}
}
result.templateBody是為這個連接產生的CloudFormation範本,內嵌在回應中,所以工作可以直接把它寫入檔案。result.s3Url是指向同一份範本的預先簽署連結。它在一小時後到期。result.region是要部署堆疊的區域。範本正是為這個區域產生的。result.url是引導式流程使用的主控台快速建立連結。在這裡忽略它。
409表示該帳戶已經連接。要變更現有連接的區域,改用PATCH /v1/cloud_accounts/{workspaceId}/{id},而不是重新連接。
把範本寫入檔案
把result.templateBody寫入檔案,或下載預先簽署的連結:
curl -o polylane-connector.yaml "<result.s3Url>"
範本送達時已可直接部署。它的ExternalParameter參數預設為為這個連接產生的外部ID:它成為堆疊所建立角色上的sts:ExternalId條件,Polylane每次擔任該角色時都會出示同一個ID。請完全依產生的內容部署檔案,不要動參數的預設值。外部ID被編輯過的堆疊可以順利部署,但永遠無法註冊。
這個外部ID也是這份檔案需要以憑證等級處理的原因:把它留在管線執行內,而不是提交它或把它發布為建置產出物。
如果預先簽署的連結在你部署前到期,再次呼叫連接端點以取得新範本。在帳戶註冊前重複呼叫是安全的;之後它會回傳409。
部署堆疊
aws cloudformation deploy \
--stack-name PolylaneConnector \
--template-file polylane-connector.yaml \
--capabilities CAPABILITY_IAM \
--region us-east-1
使用步驟1的region。CAPABILITY_IAM確認堆疊會建立的IAM角色;角色本身沒有命名,而具名的內嵌政策不需要CAPABILITY_NAMED_IAM,所以CAPABILITY_IAM就足夠。
堆疊會建立Polylane擔任的角色(唯讀存取加上對polylane前綴資源的操作)、它的內嵌政策、一條寫入新S3儲存貯體的CloudTrail trail、一個用於trail與警報通知的SNS主題,以及一個reporter自訂資源。reporter就是負責註冊連接的部分:它在堆疊建立期間把角色ARN交給Polylane,所以沒有回呼需要設定,也沒有其他東西需要執行。
從Terraform進行同樣的部署:
resource "aws_cloudformation_stack" "polylane_connector" {
name = "PolylaneConnector"
template_body = file("${path.module}/polylane-connector.yaml")
capabilities = ["CAPABILITY_IAM"]
}
把provider或provider別名指向步驟1的region。用template_body參照已儲存的檔案,而不是把s3Url交給template_url:預先簽署的連結撐不過那一小時,也撐不到你的下一次plan,所以請在套用它的同一次執行中取得範本。
看著帳戶上線
堆疊的reporter抵達Polylane後帳戶就會出現,通常在堆疊完成後片刻。用它的自然鍵輪詢它,註冊落地前回傳404,之後回傳200:
until curl -sf "https://api.polylane.com/v1/cloud_accounts/ws_0abc123/aws/123456789012/us-east-1" \
-H "x-api-key: $POLYLANE_API_KEY" > /dev/null; do
sleep 15
done
給這個迴圈一個期限,讓失敗的部署讓工作失敗,而不是掛住它。帳戶存在後,它的status欄位追蹤第一次同步:註冊時為new,資源串流進來時為syncing,第一次同步完成時為ready。
curl -s "https://api.polylane.com/v1/cloud_accounts/ws_0abc123/aws/123456789012/us-east-1" \
-H "x-api-key: $POLYLANE_API_KEY" | jq -r '.result.status'
從這裡起,帳戶的行為與從主控台連接的完全一樣:資源同步進拓樸,Polylane自行執行第一次檢查,帳戶頁面逐漸填滿。
從API中斷連接
刪除連接也會刪除你帳戶中的CloudFormation堆疊。這個呼叫需要cloud_accounts:delete範圍:
curl -X DELETE https://api.polylane.com/v1/cloud_accounts/ws_0abc123/<cloud-account-id> \
-H "x-api-key: $POLYLANE_API_KEY"
角色、它的政策與CloudTrail的S3儲存貯體帶有DeletionPolicy: Retain,所以它們在堆疊刪除後仍會留存。如果你想讓AWS帳戶完全乾淨,請自行移除它們。
中斷連接
中斷連接會停止所有同步與檢查,並刪除Polylane持有的憑證。 Polylane會移除AWS的API允許它移除的東西。以下項目會留下,直到你自行移除:
- PolylaneEnvironmentRole (DeletionPolicy Retain)
- PolylaneEnvironmentPolicies (Retain)
- PolylaneS3Bucket (Retain)
- EKS access entries
polylane cloud disconnect <id>工具
11代理可以在對話串中執行的操作。
支援的資源
75會出現在你基礎設施圖中的資源類型。