CodeBuild 佈建角色建立 - AWS Proton

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

CodeBuild 佈建角色建立

基礎結構即程式碼 (IaaS) 工具 (如 AWS CloudFormation 和 Terraform) 需要許多不同類型的資源的權限。 AWS 例如,如果 IaaS 範本宣告 Amazon S3 儲存貯體,則需要建立、讀取、更新和刪除 Amazon S3 儲存貯體的許可。將角色限制為所需的最低權限被視為安全性最佳做法。鑑於 AWS 資源的廣度,建立 IaAC 範本的最低權限原則是一件困難的事,尤其是當這些範本所管理的資源稍後可能會變更時。例如,在您對管理的範本的最新編輯中 AWS Proton,您可以新增資RDS料庫資源。

設定正確的權限可協助您的 IaC 順利部署。 AWS Proton CodeBuild 佈建會在位於客戶帳戶的 CodeBuild 專案中執行客戶提供的任意CLI指令。一般而言,這些命令會使用基礎結構即程式碼 (IAAC) 工具建立和刪除基礎結構,例如 AWS CDK. 當 AWS 資源部署其範本使用 CodeBuild 佈建時, AWS 將在由 AWS管理的 CodeBuild 專案中啟動組建。角色被傳遞給 CodeBuild,它 CodeBuild 假定執行命令。此角色稱為「 CodeBuild 佈建角色」,由客戶提供,並包含佈建基礎結構所需的權限。這意味著只能由 CodeBuild 甚至不 AWS Proton 能假設它。

建立 角色

您可以在IAM主控台或中建立「 CodeBuild 提供」角色 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 服務執行組建所需的最低權限。

如果您希望使用控制台,請在創建角色時確保以下事項:

  1. 對於信任的實體,請選取 AWS 服務,然後選取 CodeBuild。

  2. 在 [新增權限] 步驟中AWSProtonCodeBuildProvisioningBasicAccess,選取您要附加的任何其他原則。

管理員存取

如果您將AdministratorAccess原則附加至 CodeBuild 佈建角色,則可保證任何 IaaS 範本不會因為缺少權限而失敗。這也表示任何可以建立環境範本或服務範本的使用者都可以執行系統管理員層級的動作,即使該使用者不是系統管理員也一樣。 AWS Proton 不建議與佈建角色AdministatorAccess搭 CodeBuild 配使用。如果您決定與 CodeBuild 佈建角色AdministratorAccess搭配使用,請在沙箱環境中執行此操作。

您可以在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訪問分析器

  • 使用受管政策授與您計劃使用之服務的存取權。

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

如果您決定以自訂 CodeBuild 方式執行VPC,您的 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