本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
進階設定
如果您遵循開始使用主控台中的步驟來首次存取 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 群組或使用者 (主控台)
-
前往網址 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 政策概觀。
-
-
在導覽窗格中,選擇 政策 。
-
如要將一組自訂的AWS CodeBuild存取權限新增至 IAM 群組或 IAM 使用者,請直接跳到此程序中的步驟 4。
若要將一組預設 CodeBuild 存取權限新增至 IAM 群組或 IAM 使用者,請選擇 [政策類型]、[AWS受管],然後執行下列動作:
-
若要新增完整存取權限 CodeBuild,請選取名為的方塊 AWSCodeBuildAdminAccess,選擇 [原則動作],然後選擇 [附加]。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3ReadOnlyAccess 和 IAM 的政策重複此操作FullAccess。
-
若要將存取權限新增至除組建專案管理以外的所有項目,請選取名 CodeBuild 為的方塊 AWSCodeBuildDeveloperAccess,選擇 [原則動作],然後選擇 [附加]。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3 的策略重複此操作ReadOnlyAccess。
-
若要將唯讀存取權限新增至 CodeBuild,請選取名為的方塊AWSCodeBuildReadOnlyAccess。選取目標 IAM 群組或使用者旁邊的核取方塊,然後選擇 [附加政策]。對名為亞馬遜 S3 的策略重複此操作ReadOnlyAccess。
您現在已將一組預設的 CodeBuild 存取權限新增至 IAM 群組或使用者。略過此程序的其餘步驟。
-
-
選擇 建立政策 。
-
在 [建立原則] 頁面上,選擇 [建立您自己的原則] 旁邊的 [選取]。
-
在 Review Policy (檢閱政策) 頁面的 Policy Name (政策名稱) 中,輸入政策的名稱 (例如
CodeBuildAccessPolicy
)。如果您使用不同的名稱,請務必在本程序中一律使用該名稱。 -
針對 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": "*" } ] } -
在導覽窗格中,選擇Groups (群組) 或 Users (使用者)。
-
在群組或使用者清單中,選擇要新增 CodeBuild 存取權限的 IAM 群組或 IAM 使用者的名稱。
-
如果是群組,請在群組設定頁面的 Permissions (許可) 索引標籤上,展開 Managed Policies (受管政策),然後選擇 Attach Policy (連接政策)。
如果是使用者,請在使用者設定頁面的 Permissions (許可) 索引標籤上,選擇 Add permissions (新增許可)。
-
對於群組,請在 [附加原則] 頁面上選取 CodeBuildAccessPolicy,然後選擇 [附加原則]。
對於使用者,請在 [新增權限] 頁面上選擇 [直接附加現有策略]。選取 CodeBuildAccessPolicy,選擇 [下一步:檢閱],然後選擇 [新增權限]。
將 CodeBuild 存取權限新增至 IAM 群組或使用者 (AWS CLI)
-
請確定您已設定AWS CLI與其中一個 IAM 實體對應的存取金鑰和AWS秘密存取金鑰,如上述程序所述。AWS若要取得更多資訊,請參閱《AWS Command Line Interface使用者指南》AWS Command Line Interface中的〈進行設定〉。
-
若要將自訂AWS CodeBuild存取權限集新增至 IAM 群組或 IAM 使用者,請跳至本程序中的步驟 3。
若要將一組預設 CodeBuild 存取權限新增至 IAM 群組或 IAM 使用者,請執行以下操作:
視您要將權限新增至 IAM 群組或使用者而定,執行下列其中一個命令:
aws iam attach-group-policy --group-name
group-name
--policy-arnpolicy-arn
aws iam attach-user-policy --user-nameuser-name
--policy-arnpolicy-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 群組或使用者。略過此程序的其餘步驟。
-
-
在已安裝 AWS CLI 的本機工作站或執行個體上的空目錄中,建立名為
put-group-policy.json
或put-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": "*" } ] } -
切換到您已儲存檔案的目錄,然後執行下列其中一個命令。您可以對
CodeBuildGroupAccessPolicy
和CodeBuildUserAccessPolicy
使用不同的值。如果您使用不同的值,請務必在此處使用這些值。對於 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 服務角色 (主控台)
-
前往網址 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 政策概觀。
-
-
在導覽窗格中,選擇 政策 。
-
選擇 建立政策 。
-
在 Create Policy (建立政策) 頁面上,選擇 JSON。
-
針對 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 服務的安全文件。 -
在 Review Policy (檢閱政策) 頁面上,針對 Policy Name (政策名稱),輸入政策的名稱 (例如,
CodeBuildServiceRolePolicy
),然後選擇 Create policy (建立政策)。注意
如果您使用不同的名稱,請務必在本程序中一律使用該名稱。
-
在導覽窗格中,選擇 Roles (角色)。
-
選擇 Create Role (建立角色)。
-
在 [建立角色] 頁面上,選擇 [AWS服務] CodeBuild,然後選擇 [下一步:權限]。
-
在 [附加權限原則] 頁面上,選取 CodeBuildServiceRolePolicy,然後選擇 [下一步:檢閱]。
-
在 Create role and review (建立角色和檢閱) 頁面上,針對 Role name (角色名稱),輸入角色的名稱 (例如
CodeBuildServiceRole
),然後選擇 Create role (建立角色)。
若要建立 CodeBuild 服務角色 (AWS CLI)
-
請確定您已設定AWS CLI與其中一個 IAM 實體對應的存取金鑰和AWS秘密存取金鑰,如上述程序所述。AWS若要取得更多資訊,請參閱《AWS Command Line Interface使用者指南》AWS Command Line Interface中的〈進行設定〉。
-
在已安裝 AWS CLI 的本機工作站或執行個體上的空目錄中,建立名為
create-role.json
和put-role-policy.json
這兩個檔案。如果您選擇不同的檔案名稱,請務必在本程序中一律使用這些檔案名稱。create-role.json
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "codebuild.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注意
建議您使用
aws:SourceAccount
和aws: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 服務的安全文件。 -
切換到您已儲存上述檔案的目錄,然後執行下列兩個命令,按此順序一次執行一個。您可以對
CodeBuildServiceRole
和CodeBuildServiceRolePolicy
使用不同的值,但務必在此處使用這些值。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 根帳戶。此為不建議的選項。如需詳細資訊,請參閱使用者指南中的帳號根使用者。
-
您AWS帳戶中的系統管理員使用者。如需詳細資訊,請參閱《使用指南》中的〈建立您的第一個AWS 帳戶 root 使用者和群組〉。
-
您AWS帳戶中有權建立或修改客戶管理金鑰的使用者。如需詳細資訊,請參閱AWS KMS開發人員指南中的使用AWS KMS主控台所需的權限。
安裝及設定 AWS CLI
若要存取AWS CodeBuild,您可以使用AWS CLI與 (或取代) CodeBuild 主 CodePipeline 控台、主控台或AWS SDK。若要安裝和規劃AWS CLI,請參閱《使用者指南》AWS Command Line Interface中的〈AWS Command Line Interface使用〉進行設定。
-
執行下列命令,以確認您是否安裝AWS CLI支援 CodeBuild:
aws codebuild list-builds
如果成功,輸出中會顯示類似如下的資訊:
{ "ids": [] }
空白方括號表示您尚未執行任何組建。
-
如果輸出錯誤,您必須解除安裝目前的 AWS CLI 版本,然後安裝最新版本。若要取得更多資訊,請參閱《使用指南》AWS Command Line Interface中的〈解除安裝AWS CLI和安裝AWS Command Line Interface〉。