Amazon-Web-Services

如何將 aws-iam-authenticator 與遠端 Terraform Cloud Runs 一起使用?

  • August 19, 2021

我已經成功地將 Terraform 與Kubernetes 提供商一起使用來管理 AWS 中EKS集群上的各個部分和服務。我想使用Terraform Cloud來管理它(並利用好的 Github/VCS 集成)。但是,kubeconfig我為該集群使用的aws-iam-authenticator二進製文件利用 AWS 憑證(以及因此的 IAM 權限)通過IRSA在 AWS 和集群內進行身份驗證和授予權限。

Terraform Cloud 實例未aws-iam-authenticator安裝二進製文件,因此,儘管它們具有正確的 AWS 憑證,但無法利用這些憑證進行身份驗證並與 EKS 集群連接。

使用正常(非雲)Terraform 沒有這個問題,您只需確保您執行的機器plan/apply具有二進製文件和憑據並且它“正常工作”,我怎樣才能讓 Terraform Cloud 以同樣的方式工作?

Terraform Cloud 文件涵蓋了這一點,它不是被禁止的,但也不是完全鼓勵的。這些文件中提到了 2 種方法,使用local-exec配置程序(其使用被描述為“最後的手段”並且可能存在問題),或使用子模組。文件還提到應該只使用“獨立二進製文件”。值得慶幸aws-iam-authenticator的是,它確實可以作為許多系統的靜態獨立二進製文件使用。不幸的是,除了提到子模組之外,文件並沒有涵蓋完成這項工作所需的步驟。

希望 Hashicorp 將在未來提供一種更少的 hacky 和更多支持的方式來定制這些環境,但在那之前……

首先,我們需要一個兼容的二進製文件,雖然我們不確切知道 Terraform Cloud 實例正在執行什麼 OS/Image,但我們從文件中知道它與 Linux x86_64 兼容。因此,由於aws-iam-authenticator它可以作為 Linux x86_64 的獨立靜態二進製文件使用,我們需要做的是將該二進製文件引入環境中,然後使其對實例普遍可用(因為我們不控制具體如何呼叫它)。

Terraform Cloud 允許您操縱環境變數,$PATH一旦我們在主機上擁有二進製文件,我們就可以通過操縱變數來實現這一點。最簡單的方法是將二進製文件添加到文件夾內的配置中,但是,如果您想將其用於多個配置,而不必在每個配置中單獨管理二進製文件(想像必須單獨更新它們),我建議將此作為 git 儲存庫中的子模組。

這是一個包含二進製文件的公共倉庫的範例,您可以將其作為子模組添加到您的倉庫中,如下所示:

git submodule add https://github.com/comerford/tc-tools.git

然後,您可以像往常一樣送出/推送,確保您的工作區的版本控制設置設置為複製子模組,如下所示:

啟用子模組複製

最後,為了確保無論二進製文件如何呼叫它都能正常工作,您需要對PATH環境變數進行更改,以便它可以看到您的新二進製文件,但也不會破壞任何東西。鑑於上述子模組,這是對我有用的ENV變數:

Terraform Cloud 上的工作 PATH 變數

以更可用的格式提供該字元串:

"~/tc-tools:/home/terraform/tc-tools:./tc-tools:/usr/bin:/usr/local/bin:/bin:$PATH"

它正在猜測可能的路徑,我不能 100% 確定哪一個有效,因為我不想為了幾個字元而導致執行中斷。

雖然這是專門針對aws-iam-authenticator二進製文件的,但它應該作為您碰巧需要的任何此類 Linux x86_64 靜態二進製文件的通用方法。

引用自:https://serverfault.com/questions/1074933