進階設定 - AWS CodeBuild

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

進階設定

如果您遵循開始使用主控台中的步驟來首次存取 AWS CodeBuild,您大概不需要本主題中的資訊。不過,當您繼續使用時 CodeBuild,您可能會想要執行諸如授與組織中的 IAM 群組和使用者存取權限 CodeBuild、修改 IAM 中現有的服務角色或存AWS KMS keys取 CodeBuild,或是設定組織工作站中的AWS CLI各個工作站進行存取 CodeBuild。本主題描述如何完成相關的設定步驟。

我們假設您已經有 AWS 帳戶。不過,如果您還沒有,請前往 http://aws.amazon.com,選擇「登入主機」,然後依照線上指示操作。

將 CodeBuild 存取權限新增至 IAM 群組或使用者

若要AWS CodeBuild透過 IAM 群組或使用者存取,您必須新增存取權限。本節說明如何使用 IAM 主控台或AWS CLI.

如果您將使 CodeBuild 用AWS root 帳戶(不建議)或帳戶中的管理員用AWS戶進行訪問,則不需要按照這些說明進行操作。

如需有關AWS root 帳號和管理員使用者的資訊,請參閱《使用指南》中的「AWS 帳戶AWS 帳戶root 使用者」和「建立您的第一個 root 使用者和群組」。

將 CodeBuild 存取權限新增至 IAM 群組或使用者 (主控台)
  1. 前往網址 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    您應已使用下列其中一項登入 AWS Management Console:

    • 您的 AWS 根帳戶。此為不建議的選項。如需詳細資訊,請參閱《使用指南》中的AWS 帳戶 root 使用者

    • 您AWS帳戶中的系統管理員使用者。如需詳細資訊,請參閱《使用指南》中的〈建立您的第一個AWS 帳戶 root 使用者和群組

    • 您AWS帳戶中有權執行下列最少動作集的使用者:

      iam:AttachGroupPolicy iam:AttachUserPolicy iam:CreatePolicy iam:ListAttachedGroupPolicies iam:ListAttachedUserPolicies iam:ListGroups iam:ListPolicies iam:ListUsers

      如需詳細資訊,請參閱使用者指南的 IAM 政策概觀

  2. 在導覽窗格中,選擇 政策

  3. 如要將一組自訂的AWS CodeBuild存取權限新增至 IAM 群組或 IAM 使用者,請直接跳到此程序中的步驟 4。

    若要將一組預設 CodeBuild 存取權限新增至 IAM 群組或 IAM 使用者,請選擇 [政策類型]、[AWS受管],然後執行下列動作:

    • 若要新增完整存取權限 CodeBuild,請選取名為的方塊 AWSCodeBuildAdminAccess,選擇 [原則動作],然後選擇 [加]。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3ReadOnlyAccessIAM 的政策重複此操作FullAccess。

    • 若要將存取權限新增至除組建專案管理以外的所有項目,請選取名 CodeBuild 為的方塊 AWSCodeBuildDeveloperAccess,選擇 [原則動作],然後選擇 [加]。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3 的策略重複此操作ReadOnlyAccess。

    • 若要將唯讀存取權限新增至 CodeBuild,請選取名為的方塊AWSCodeBuildReadOnlyAccess。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3 的策略重複此操作ReadOnlyAccess。

    您現在已將一組預設的 CodeBuild 存取權限新增至 IAM 群組或使用者。略過此程序的其餘步驟。

  4. 選擇 建立政策

  5. 在 [建立原則] 頁面上,選擇 [建立您自己的原則] 旁邊的 [選取]

  6. Review Policy (檢閱政策) 頁面的 Policy Name (政策名稱) 中,輸入政策的名稱 (例如 CodeBuildAccessPolicy)。如果您使用不同的名稱,請務必在本程序中一律使用該名稱。

  7. 針對 Policy Document (政策文件),輸入下列項目,然後選擇 Create Policy (建立政策)

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注意

    此原則允許存取所有 CodeBuild 動作,以及可能存取大量AWS資源。若要將權限限制為特定 CodeBuild動作,請變更 CodeBuild 政策陳述式codebuild:*中的值。如需詳細資訊,請參閱身分與存取管理。若要限制對特定 AWS 資源的存取,請變更 Resource 物件的值。如需詳細資訊,請參閱身分與存取管理

    CodeBuildRolePolicy語句是允許創建或修改構建項目所必需的。

  8. 在導覽窗格中,選擇Groups (群組)Users (使用者)

  9. 在群組或使用者清單中,選擇要新增 CodeBuild 存取權限的 IAM 群組或 IAM 使用者的名稱。

  10. 如果是群組,請在群組設定頁面的 Permissions (許可) 索引標籤上,展開 Managed Policies (受管政策),然後選擇 Attach Policy (連接政策)

    如果是使用者,請在使用者設定頁面的 Permissions (許可) 索引標籤上,選擇 Add permissions (新增許可)

  11. 對於群組,請在 [附加原則] 頁面上選取 CodeBuildAccessPolicy,然後選擇 [附加原則]。

    對於使用者,請在 [新增權限] 頁面上選擇 [直接附加現有策略]。選取 CodeBuildAccessPolicy,選擇 [下一步:檢閱],然後選擇 [新增權限]。

將 CodeBuild 存取權限新增至 IAM 群組或使用者 (AWS CLI)
  1. 請確定您已設定AWS CLI與其中一個 IAM 實體對應的存取金鑰和AWS秘密存取金鑰,如上述程序所述。AWS若要取得更多資訊,請參閱《AWS Command Line Interface使用者指南》AWS Command Line Interface中的〈進行設定

  2. 若要將自訂AWS CodeBuild存取權限集新增至 IAM 群組或 IAM 使用者,請跳至本程序中的步驟 3。

    若要將一組預設 CodeBuild 存取權限新增至 IAM 群組或 IAM 使用者,請執行以下操作:

    視您要將權限新增至 IAM 群組或使用者而定,執行下列其中一個命令:

    aws iam attach-group-policy --group-name group-name --policy-arn policy-arn aws iam attach-user-policy --user-name user-name --policy-arn policy-arn

    您必須執行命令三次,將群組名稱使用者名稱取代為 IAM 群組名稱或使用者名稱,並針對下列每個政策 Amazon 資源名稱 (ARN) 取代政策 arn 一次:

    • 若要將完整存取權限新增至 CodeBuild,請使用下列原則 ARN:

      • arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

      • arn:aws:iam::aws:policy/IAMFullAccess

    • 若要將存取權限新增至 CodeBuild 除組建專案管理以外的所有項目,請使用下列原則 ARN:

      • arn:aws:iam::aws:policy/AWSCodeBuildDeveloperAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    • 若要將唯讀存取權限新增至 CodeBuild,請使用下列原則 ARN:

      • arn:aws:iam::aws:policy/AWSCodeBuildReadOnlyAccess

      • arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

    您現在已將一組預設的 CodeBuild 存取權限新增至 IAM 群組或使用者。略過此程序的其餘步驟。

  3. 在已安裝 AWS CLI 的本機工作站或執行個體上的空目錄中,建立名為 put-group-policy.jsonput-user-policy.json 的檔案。如果您使用不同的檔案名稱,請務必在本程序中一律使用該檔案名稱。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CodeBuildAccessPolicy", "Effect": "Allow", "Action": [ "codebuild:*" ], "Resource": "*" }, { "Sid": "CodeBuildRolePolicy", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-ID:role/role-name" }, { "Sid": "CloudWatchLogsAccessPolicy", "Effect": "Allow", "Action": [ "logs:FilterLogEvents", "logs:GetLogEvents" ], "Resource": "*" }, { "Sid": "S3AccessPolicy", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:GetObject", "s3:List*", "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注意

    此原則允許存取所有 CodeBuild 動作,以及可能存取大量AWS資源。若要將權限限制為特定 CodeBuild動作,請變更 CodeBuild 政策陳述式codebuild:*中的值。如需詳細資訊,請參閱身分與存取管理。若要限制對特定 AWS 資源的存取,請變更相關 Resource 物件的值。如需詳細資訊,請參閱身分與存取管理或特定 AWS 服務的安全文件。

    CodeBuildRolePolicy語句是允許創建或修改構建項目所必需的。

  4. 切換到您已儲存檔案的目錄,然後執行下列其中一個命令。您可以對 CodeBuildGroupAccessPolicyCodeBuildUserAccessPolicy 使用不同的值。如果您使用不同的值,請務必在此處使用這些值。

    對於 IAM 群組:

    aws iam put-group-policy --group-name group-name --policy-name CodeBuildGroupAccessPolicy --policy-document file://put-group-policy.json

    如果是 使用者:

    aws iam put-user-policy --user-name user-name --policy-name CodeBuildUserAccessPolicy --policy-document file://put-user-policy.json

    在上述命令中,將群組名稱使用者名稱取代為目標 IAM 群組或使用者的名稱。

建立 CodeBuild 服務角色

您需要AWS CodeBuild服務角色,才 CodeBuild 能代表您與相依AWS服務互動。您可以使用 CodeBuild 或AWS CodePipeline主控台建立 CodeBuild 服務角色。如需相關資訊,請參閱:

如果您不打算使用這些主控台,本節說明如何使用 IAM 主控台或AWS CLI. CodeBuild

重要

CodeBuild 將服務角色用於代表您執行的所有操作。如果該角色包含使用者不該有的許可,您可能在無意中提升使用者的許可。確定該角色授予最低權限

此頁面描述的服務角色包含一個政策,此政策授予使用 CodeBuild 所需的最低許可。您可能需要新增其他權限,視您的使用案例而定。

建立 CodeBuild 服務角色 (主控台)
  1. 前往網址 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

    您應該已使用下列其中一項登入主控台:

    • 您的 AWS 根帳戶。此為不建議的選項。如需詳細資訊,請參閱《使用指南》中的AWS 帳戶 root 使用者

    • 您AWS帳戶中的系統管理員使用者。如需詳細資訊,請參閱《使用指南》中的〈建立您的第一個AWS 帳戶 root 使用者和群組

    • 您AWS帳戶中有權執行下列最少動作集的使用者:

      iam:AddRoleToInstanceProfile iam:AttachRolePolicy iam:CreateInstanceProfile iam:CreatePolicy iam:CreateRole iam:GetRole iam:ListAttachedRolePolicies iam:ListPolicies iam:ListRoles iam:PassRole iam:PutRolePolicy iam:UpdateAssumeRolePolicy

      如需詳細資訊,請參閱使用者指南的 IAM 政策概觀

  2. 在導覽窗格中,選擇 政策

  3. 選擇 建立政策

  4. Create Policy (建立政策) 頁面上,選擇 JSON

  5. 針對 JSON 政策,輸入下列內容,然後選擇 Review Policy (檢閱政策)

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "ECRPullPolicy", "Effect": "Allow", "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "*" }, { "Sid": "ECRAuthPolicy", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注意

    此政策包含的陳述式允許存取可能許多的 AWS 資源。若要限制 AWS CodeBuild 對特定 AWS 資源的存取,請變更 Resource 陣列的值。如需詳細資訊,請參閱 AWS 服務的安全文件。

  6. Review Policy (檢閱政策) 頁面上,針對 Policy Name (政策名稱),輸入政策的名稱 (例如,CodeBuildServiceRolePolicy),然後選擇 Create policy (建立政策)

    注意

    如果您使用不同的名稱,請務必在本程序中一律使用該名稱。

  7. 在導覽窗格中,選擇 Roles (角色)。

  8. 選擇 Create Role (建立角色)。

  9. 在 [建立角色] 頁面上,選擇 [AWS服務] CodeBuild,然後選擇 [下一步:權限]。

  10. 在 [附加權限原則] 頁面上,選取 CodeBuildServiceRolePolicy,然後選擇 [下一步:檢閱]。

  11. Create role and review (建立角色和檢閱) 頁面上,針對 Role name (角色名稱),輸入角色的名稱 (例如 CodeBuildServiceRole),然後選擇 Create role (建立角色)

若要建立 CodeBuild 服務角色 (AWS CLI)
  1. 請確定您已設定AWS CLI與其中一個 IAM 實體對應的存取金鑰和AWS秘密存取金鑰,如上述程序所述。AWS若要取得更多資訊,請參閱《AWS Command Line Interface使用者指南》AWS Command Line Interface中的〈進行設定

  2. 在已安裝 AWS CLI 的本機工作站或執行個體上的空目錄中,建立名為 create-role.jsonput-role-policy.json 這兩個檔案。如果您選擇不同的檔案名稱,請務必在本程序中一律使用這些檔案名稱。

    create-role.json:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    注意

    建議您使用 aws:SourceAccountaws:SourceArn 條件索引鍵,保護自己免受混淆代理人問題的困擾。例如,您可以使用下列條件區塊編輯先前的信任政策。aws:SourceAccount是 CodeBuild 專案的擁有者,而且aws:SourceArn是 CodeBuild 專案 ARN。

    如果您想將服務角色限制為AWS帳戶,create-role.json可能看起來像這樣:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": [ "account-ID" ] } } } ] }

    如果您想將服務角色限制為特定 CodeBuild 專案,create-role.json可能會類似下列內容:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": "arn:aws:codebuild:region-ID:account-ID:project/project-name" } } } ] }
    注意

    如果您不清楚或尚未決定 CodeBuild 專案的名稱,並希望對某個 ARN 模式有信任政策限制,您可以使用萬用字元 (*) 取代該部分的 ARN。建立專案之後,您就可以更新信任原則。

    put-role-policy.json:

    { "Version": "2012-10-17", "Statement": [ { "Sid": "CloudWatchLogsPolicy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "CodeCommitPolicy", "Effect": "Allow", "Action": [ "codecommit:GitPull" ], "Resource": "*" }, { "Sid": "S3GetObjectPolicy", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "*" }, { "Sid": "S3PutObjectPolicy", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "*" }, { "Sid": "S3BucketIdentity", "Effect": "Allow", "Action": [ "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "*" } ] }
    注意

    此政策包含的陳述式允許存取可能許多的 AWS 資源。若要限制 AWS CodeBuild 對特定 AWS 資源的存取,請變更 Resource 陣列的值。如需詳細資訊,請參閱 AWS 服務的安全文件。

  3. 切換到您已儲存上述檔案的目錄,然後執行下列兩個命令,按此順序一次執行一個。您可以對 CodeBuildServiceRoleCodeBuildServiceRolePolicy 使用不同的值,但務必在此處使用這些值。

    aws iam create-role --role-name CodeBuildServiceRole --assume-role-policy-document file://create-role.json
    aws iam put-role-policy --role-name CodeBuildServiceRole --policy-name CodeBuildServiceRolePolicy --policy-document file://put-role-policy.json

建立並設定客戶受管金鑰 CodeBuild

為了AWS CodeBuild加密其構建輸出成品,它需要訪問 KMS 密鑰。根據預設, CodeBuild 會在您的AWS帳戶中使用適用AWS 受管金鑰於 Amazon S3 的。

如果您不想使用AWS 受管金鑰,您必須自行建立和設定客戶受管金鑰。本節說明如何使用 IAM 主控台執行此動作。

如需有關客戶受管金鑰的詳細資訊,請參閱AWS KMS開發人員指南中的AWS Key Management Service概念建立金鑰

若要設定客戶管理的金鑰以供使用 CodeBuild,請依照AWS KMS開發人員指南中修改金鑰原則中 < 如何修改金鑰原則 > 一節中的指示進行。然後,將下列陳述式 (在 ### BEGIN ADDING STATEMENTS HERE ###### END ADDING STATEMENTS HERE ### 之間) 新增至金鑰政策。省略符號 (...) 是為了簡潔起見,也有助於您找到要新增陳述式的位置。請不要移除任何陳述式,也不要在金鑰政策中輸入這些省略符號。

{ "Version": "2012-10-17", "Id": "...", "Statement": [ ### BEGIN ADDING STATEMENTS HERE ### { "Sid": "Allow access through Amazon S3 for all principals in the account that are authorized to use Amazon S3", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "s3.region-ID.amazonaws.com", "kms:CallerAccount": "account-ID" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-ID:role/CodeBuild-service-role" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, ### END ADDING STATEMENTS HERE ### { "Sid": "Enable IAM User Permissions", ... }, { "Sid": "Allow access for Key Administrators", ... }, { "Sid": "Allow use of the key", ... }, { "Sid": "Allow attachment of persistent resources", ... } ] }
  • 區域 ID 代表與之相關聯之 Amazon S3 儲存貯體所在AWS區域 CodeBuild 的識別碼 (例如,us-east-1)。

  • 帳戶 ID 代表擁有客戶受管金鑰之AWS帳戶的 ID。

  • CodeBuild-service role 代表您在本主題稍早建立或識別之 CodeBuild 服務角色的名稱。

注意

若要透過 IAM 主控台建立或設定客戶管理金鑰,您必須先使AWS Management Console用下列其中一項登入:

安裝及設定 AWS CLI

若要存取AWS CodeBuild,您可以使用AWS CLI與 (或取代) CodeBuild 主 CodePipeline 控台、主控台或AWS SDK。若要安裝和規劃AWS CLI,請參閱《使用者指南》AWS Command Line Interface中的〈AWS Command Line Interface使用〉進行設定。

  1. 執行下列命令,以確認您是否安裝AWS CLI支援 CodeBuild:

    aws codebuild list-builds

    如果成功,輸出中會顯示類似如下的資訊:

    { "ids": [] }

    空白方括號表示您尚未執行任何組建。

  2. 如果輸出錯誤,您必須解除安裝目前的 AWS CLI 版本,然後安裝最新版本。若要取得更多資訊,請參閱《使用指南》AWS Command Line Interface中的〈解除安裝AWS CLI和安裝AWS Command Line Interface