[英]How to tell teamcity agent, which aws account to run terraform to
我將 TeamCity 啟動到一個 Kube.netes 集群中。 我有一個用於 TeamCity 服務器的部署和一個用於 TeamCity 構建代理的部署。 當我在 TeamCity 構建代理上運行 Terraform 時,它會在與托管 TeamCity Kube.netes 集群的 EC2 實例相同的 AWS 賬戶中創建資源。
我想運行一個構建,它在單獨的 AWS 賬戶中創建 AWS 資源。 我的想法是將 AWS 訪問密鑰和密鑰分配給 TeamCity 服務器並將它們傳遞給 TeamCity 構建代理,但我不知道工作流程將如何進行。
目前,我已經在構建中將 AWS 訪問密鑰和秘密密鑰聲明為環境變量,但它們沒有傳遞給代理。 我的構建步驟只包含 3 行
terraform init
terraform plan
terraform apply -auto-approve
我處理了一個非常相似的情況。 當我們開始使用 AWS 時,我們並沒有遵循關於我們的腳本如何向 AWS 進行身份驗證的最佳實踐。
我們在每個帳戶中創建了用戶,並將訪問密鑰和秘密密鑰導出到我們的 TeamCity 構建自動化中,以允許我們的腳本在這些帳戶的上下文中運行。
您最終會在不同的帳戶中擁有多個用戶,並且最終會為這些用戶手動輪換密鑰,然后在每次需要輪換密鑰時更新 TeamCity 中的訪問密鑰和秘密密鑰。
由於 TeamCity 構建代理服務器是 EC2 實例,AWS 中的最佳實踐是在這種情況下使用角色而不是用戶。 來自 AWS 文檔:
在 Amazon EC2 實例上運行的應用程序需要憑據才能訪問其他 AWS 服務。 要以安全方式向應用程序提供憑證,請使用 IAM 角色。 角色是擁有自己的一組權限的實體,但它不是用戶或組。 角色也不像 IAM 用戶那樣擁有自己的永久憑證集。 對於 Amazon EC2,IAM 動態地為 EC2 實例提供臨時憑證,這些憑證會自動為您輪換。
資料來源: https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#use-roles-with-ec2
在這種情況下,您應該做的是在每個帳戶中創建一個角色,該角色有權創建 terraform 將構建的資源。 您將需要另一個角色用於 TeamCity 構建代理服務器,該角色應該能夠承擔在每個帳戶中創建的角色。
假設您有兩個帳戶:
你需要的是:
AccountB 中角色的實例配置文件應分配給 TeamCity 構建代理服務器。 然后,構建代理服務器能夠承擔 AccountA 中的角色,並在該帳戶的上下文中運行,並獲得所需的權限,而無需硬編碼訪問權限和密鑰。
您可以通過 Terraform 對任意數量的其他帳戶重復此過程以在其中構建資源。
您必須將以下塊添加到 terraform 腳本中的 aws 提供商,讓 terraform 知道要承擔什么角色:
provider "aws" {
assume_role {
role_arn = "arn:aws:iam::<ACCOUNTA>:role/<ROLENAME>"
}
}
以下是一些關於如何從 EC2 實例授予對不同賬戶中 S3 存儲桶的訪問權限的 AWS 文檔: https://aws.amazon.com/premiumsupport/knowledge-center/s3-instance-access-bucket/
另一個涵蓋 IAM Roes、EC2 實例配置文件和通過角色進行跨賬戶訪問的有用文檔頁面位於: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2.html
最后一個鏈接正是您要執行的操作: https://blog.e-zest.com/aws-ec2-assume-role-with-terraform
當我想為 2 個單獨的帳戶添加兩個注釋時,我的 agent.yml 文件看起來像這樣
規格:副本:1 選擇器:匹配標簽:應用程序:代理 Pod 模板:元數據:注釋:iam.amazonaws.com/role:arn:aws:iam::account:role/accoun1-s3-role iam.amazonaws.com/角色:arn:aws:iam::account:role/account2-pods-s3-role
但是一旦我放了兩個注釋,我的 sts assume role for pod 就只顯示我的第二個角色。 當我從 teamcity 運行構建時,出現此錯誤,找不到 aws 提供程序的有效憑證源
具有多個賬戶的 TeamCity + AWS 組織的安全最佳實踐:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.