本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
CodeBuild 佈建角色建立
AWS CloudFormation 和 Terraform 等基礎設施即程式碼 (IaaC) 工具需要許多不同類型的 AWS 資源的許可。例如,如果 IaaC 範本宣告 Amazon S3 儲存貯體,則需要建立、讀取、更新和刪除 Amazon S3 儲存貯體的許可。將角色限制在所需的最低許可,被認為是安全最佳實務。鑑於 AWS 資源的廣度,為 IaaC 範本建立最低權限政策極具挑戰性,尤其是當這些範本管理的資源稍後可能會變更時。例如,在對受管範本的最新編輯中 AWS Proton,您可以新增 RDS 資料庫資源。
設定正確的許可有助於讓您的 IaC 部署順暢。 AWS Proton CodeBuild Provisioning 會在位於客戶帳戶中的 CodeBuild 專案中執行任意客戶提供的 CLI 命令。一般而言,這些命令會使用 Infrastructure as Code (IaaC) 工具建立和刪除基礎設施,例如 AWS CDK。當 AWS 資源部署其範本使用 CodeBuild Provisioning 時, AWS 將在由 管理的 CodeBuild 專案中啟動組建 AWS。角色會傳遞至 CodeBuild,CodeBuild 會擔任該角色來執行命令。此角色稱為 CodeBuild 佈建角色,由客戶提供,並包含佈建基礎設施所需的許可。它只能由 CodeBuild 擔任,甚至 AWS Proton 無法擔任。
建立 角色
CodeBuild 佈建角色可以在 IAM 主控台或 中建立 AWS CLI。若要在 中建立它 AWS CLI:
aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AWSProtonCodeBuildProvisioningBasicAccess
這也會連接 AWSProtonCodeBuildProvisioningBasicAccess
,其中包含 CodeBuild 服務執行組建所需的最低許可。
如果您偏好使用 主控台,請在建立角色時確保下列事項:
-
對於信任的實體,選取 AWS 服務,然後選取 CodeBuild。
-
在新增許可步驟中,選取您要連接
AWSProtonCodeBuildProvisioningBasicAccess
的任何其他政策。
管理員存取
如果您將AdministratorAccess
政策連接到 CodeBuild 佈建角色,它將保證任何 IaaC 範本不會因為缺少許可而失敗。這也表示任何可以建立環境範本或服務範本的人都可以執行管理員層級動作,即使該使用者不是管理員也 AWS Proton 一樣。不建議AdministatorAccess
搭配 CodeBuild 佈建角色使用 。如果您決定AdministratorAccess
搭配 CodeBuild 佈建角色使用 ,請在沙盒環境中執行此操作。
您可以在 IAM 主控台AdministratorAccess
中使用 建立角色,或執行此命令:
aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess
建立最小範圍的角色
如果您想要建立具有最低許可的角色,有多種方法:
-
使用管理員許可進行部署,然後縮小角色的範圍。建議使用 IAM Access Analyzer。
-
使用 受管政策可讓您存取您計劃使用的服務。
AWS CDK
如果您使用 AWS CDK 搭配 AWS Proton,且已在每個環境帳戶/區域cdk bootstrap
上執行 ,則 已存在角色cdk deploy
。在此情況下,請將下列政策連接至 CodeBuild 佈建角色:
{ "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::account-id:role/cdk-*-deploy-role-*", "arn:aws:iam::account-id:role/cdk-*-file-publishing-role-*" ], "Effect": "Allow" }
自訂 VPC
如果您決定在自訂 VPC 中執行 CodeBuild,您將需要 CodeBuild 角色的下列許可:
{ "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:network-interface/*", "arn:aws:ec2:region:account-id:subnet/*", "arn:aws:ec2:region:account-id:security-group/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:region:account-id:*/*" ] }, { "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterfacePermission" ], "Resource": "arn:aws:ec2:region:account-id:network-interface/*", "Condition": { "StringEquals": { "ec2:AuthorizedService": "codebuild.amazonaws.com" } } }
您也可以使用 AmazonEC2FullAccess
受管政策,但其中包含您可能不需要的許可。若要使用 CLI 連接 受管政策:
aws iam create-role --role-name AWSProtonCodeBuildProvisioning --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"codebuild.amazonaws.com"},"Action":"sts:AssumeRole"}]}' aws iam attach-role-policy --role-name AWSProtonCodeBuildProvisioning --policy-arn arn:aws:iam::aws:policy/AdministratorAccess