這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS Cloud Development Kit (AWS CDK) 是開發人員可用來在 上設定 AWS 服務 和佈建基礎設施的強大工具 AWS。透過提供此類控制和功能的任何工具,組織將需要建立政策和實務,以確保以安全的方式使用該工具。例如,組織可能想要限制開發人員對特定服務的存取,以確保他們不會竄改帳戶中設定的合規或成本控制措施。
通常,安全性和生產力之間可能存在緊張,每個組織都需要為自己建立適當的平衡。本主題提供安全最佳實務 AWS CDK ,供您在建立和實作自己的安全政策時考量。以下最佳實務為一般準則,並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求,因此請將其視為實用建議就好,而不要當作是指示。
遵循 IAM 安全最佳實務
AWS Identity and Access Management (IAM) 是一種 Web 服務,可協助您安全地控制對 AWS 資源的存取。組織、個人和 AWS CDK 使用 IAM 來管理許可,以決定可在資源上執行 AWS 的動作。使用 IAM 時,請遵循 IAM 安全最佳實務。如需詳細資訊,請參閱《IAM 使用者指南》中的安全最佳實務和使用案例 AWS Identity and Access Management。
管理 的許可 AWS CDK
當您 AWS CDK 在整個組織中使用 來開發和管理基礎設施時,您會想要考慮下列管理許可非常重要的案例:
-
AWS CDK 部署的許可 – 這些許可決定誰可以變更您的 AWS 資源,以及他們可以進行哪些變更。
-
資源之間的許可 – 這些許可允許您使用 建立和管理 AWS 的資源之間的互動 AWS CDK。
管理 AWS CDK 部署的許可
開發人員使用 AWS CDK 在其開發機器上本機定義基礎設施。此基礎設施會透過通常涉及使用 AWS CDK 命令列界面 () 的部署,在 AWS 環境中實作AWS CDK CLI。透過部署,您可能想要控制開發人員可以在您的環境中進行哪些變更。例如,您可能擁有不想讓開發人員修改的 Amazon Virtual Private Cloud (Amazon VPC) 資源。
根據預設,CDK CLI會使用在引導期間建立的演員安全登入資料和 IAM 角色的組合,來接收部署的許可。演員的安全登入資料會先用於身分驗證,然後擔任 IAM 角色以在部署期間執行各種動作,例如使用 AWS CloudFormation 服務來建立資源。如需 CDK 部署如何運作的詳細資訊,包括使用的 IAM 角色,請參閱 部署 AWS CDK 應用程式。
若要限制誰可以執行部署,以及可在部署期間執行的動作,請考慮下列事項:
-
演員的安全登入資料是用來進行身分驗證的第一組登入資料 AWS。從這裡,用於在部署期間執行動作的許可會授予在部署工作流程期間擔任的 IAM 角色。您可以限制誰可以擔任這些角色,藉此限制誰可以執行部署。您也可以將這些 IAM 角色取代為您自己的角色,來限制部署期間可執行的動作。
-
執行部署的許可會授予
DeploymentActionRole
。您可以透過限制誰可以擔任此角色,來控制誰可以執行部署的許可。透過使用角色進行部署,您可以執行跨帳戶部署,因為不同帳戶中的 AWS 身分可以擔任該角色。根據預設, AWS 帳戶 具有適當AssumeRole
政策陳述式的相同 中的所有身分都可以擔任此角色。 -
透過 建立和修改資源的許可 AWS CloudFormation 會授予
CloudFormationExecutionRole
。此角色還需要從引導資源讀取的許可。您可以透過使用 的受管政策來控制 CDK 部署擁有的許可,CloudFormationExecutionRole
也可以選擇設定許可界限。根據預設,此角色具有沒有AdministratorAccess
許可界限的許可。 -
與引導資源互動的許可會授予
FilePublishingRole
和ImagePublishingRole
。執行部署的演員必須具有擔任這些角色的許可。根據預設, AWS 帳戶 具有適當AssumeRole
政策陳述式的相同 中的所有身分都可以擔任此角色。 -
存取引導資源以執行查詢的許可會授予
LookupRole
。執行部署的演員必須具有擔任此角色的許可。根據預設,此角色readOnly
可存取引導資源。根據預設,具有適當AssumeRole
政策陳述式的相同 AWS 帳戶 中的所有身分都可以擔任此角色。
若要在 AWS 帳戶 中設定 IAM 身分,並允許 擔任這些角色,請將具有下列政策陳述式的政策新增至身分:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AssumeCDKRoles",
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:ResourceTag/aws-cdk:bootstrap-role": [
"image-publishing",
"file-publishing",
"deploy",
"lookup"
]
}
}
}]
}
修改部署期間所擔任角色的許可
透過修改部署期間所擔任角色的許可,您可以管理可在部署期間執行的動作。若要修改許可,您可以建立自己的 IAM 角色,並在啟動環境時指定這些角色。當您自訂引導時,您必須自訂合成。如需一般說明,請參閱 自訂 AWS CDK 引導。
修改部署期間使用的安全登入資料和角色
部署期間使用的角色和引導資源取決於您使用的 CDK 堆疊合成器。若要修改此行為,您可以自訂合成。如需詳細資訊,請參閱設定和執行 CDK 堆疊合成。
授予最低權限存取的考量
授予最低權限存取是安全性最佳實務,我們建議您在開發安全策略時考慮。如需詳細資訊,請參閱 AWS Well-Architected Framework Guide 中的 SEC03-BP02 授予最低權限存取。
授予最低權限存取通常涉及將 IAM 政策限制為執行指定任務所需的最低存取。嘗試使用此方法透過 CDK 的精細許可授予最低權限存取可能會影響 CDK 部署,並導致您必須建立比您預期更寬廣的許可。以下是使用此方法時需要考量的幾件事:
-
判斷允許開發人員透過 CloudFormation 使用 AWS CDK 佈建基礎設施的詳盡許可清單既困難又複雜。
-
如果您想要微調,許可可能會變得太長,而無法符合 IAM 政策文件的最大長度。
-
提供不完整的許可集可能會嚴重影響開發人員的生產力和部署。
使用 CDK 時,會使用 CloudFormation 執行部署。CloudFormation 會使用提供的許可依序啟動一組 AWS API 呼叫。任何時間點所需的許可取決於許多因素:
-
正在修改 AWS 服務 的 。具體而言,正在使用和變更的資源和屬性。
-
CloudFormation 堆疊的目前狀態。
-
部署期間以及是否需要回復時可能發生的問題,除了 之外,還需要
Delete
許可Create
。
當提供的許可不完整時,將需要手動介入。以下是幾個範例:
-
如果您在向前滾動期間發現未完成的許可,則需要暫停部署,並花時間討論和佈建新的許可,然後再繼續。
-
如果部署轉返,且缺少套用轉返的許可,則可能會讓您的 CloudFormation 堆疊處於需要大量手動工作才能復原的狀態。
由於這種方法可能會導致複雜性並嚴重限制開發人員生產力,我們不建議這樣做。反之,我們建議實作護欄並防止繞過。
實作護欄並防止繞過
您可以使用 AWS Control Tower、、 等服務來實作護欄、合規規則 AWS Config AWS CloudTrail AWS Security Hub、稽核和監控。透過此方法,您授予開發人員執行所有操作的許可,但篡改現有的驗證機制除外。開發人員可以自由地快速實作變更,只要他們保持在政策內即可。這是我們在使用 時建議的方法 AWS CDK。如需護欄的詳細資訊,請參閱《 管理和治理雲端環境指南》中的控制項。
我們也建議使用許可界限或服務控制政策 (SCPs) 做為實作護欄的方式。如需使用 實作許可界限的詳細資訊 AWS CDK,請參閱 建立並套用 的許可界限 AWS CDK。
如果您使用任何合規控制機制,請在引導階段進行設定。請確定 CloudFormationExecutionRole
或開發人員可存取的身分已連接政策或許可界限,以防止繞過您放置的機制。適當的政策取決於您使用的特定機制。
管理由 佈建的資源之間的許可 AWS CDK
管理 佈建之資源之間的許可的方式 AWS CDK ,取決於您是否允許 CDK 建立角色和政策。
當您使用 AWS Construct Library 中的 L2 建構來定義基礎設施時,您可以使用提供的grant
方法來佈建資源之間的許可。使用 grant
方法,您可以指定資源和 AWS CDK 佈建最低權限 IAM 角色之間的存取類型,以完成您的意圖。此方法符合大多數組織的安全需求,同時對開發人員有效率。如需詳細資訊,請參閱使用 定義 L2 建構的許可 AWS CDK。
如果您想要使用手動建立的角色取代自動產生的角色,以解決此功能,請考慮下列事項:
-
您的 IAM 角色將需要手動建立,以減緩應用程式開發速度。
-
當 IAM 角色需要手動建立和管理時,人員通常會將多個邏輯角色合併為單一角色,以使其更容易管理。這會執行 以遵循最低權限原則。
-
由於這些角色需要在部署之前建立,因此需要參考的資源尚不存在。因此,您將需要使用萬用字元,其會執行 以遵循最低權限原則。
-
使用萬用字元的常見解決方法是強制為所有資源指定可預測的名稱。不過,這會影響 CloudFormation 在必要時取代資源的能力,並可能減緩或封鎖開發。因此,我們建議您允許 CloudFormation 為您建立唯一的資源名稱。
-
由於手動動作必須在每次部署之前執行,因此無法執行持續交付。
當組織想要防止 CDK 建立角色時,通常會防止開發人員建立 IAM 角色。問題在於,透過授予開發人員使用 建立 IAM 角色的許可 AWS CDK,他們可能會提升自己的權限。若要緩解這種情況,我們建議您使用許可界限或服務控制政策 SCPs)。透過許可界限,您可以設定允許開發人員和 CDK 執行的動作限制。如需搭配 CDK 使用許可界限的詳細資訊,請參閱 建立並套用 的許可界限 AWS CDK。