本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
允許 CodeBuild 與其他 AWS 服務互動
如果您按照中的步驟開始使用主控台進 AWS CodeBuild 行第一次存取,則很可能不需要本主題中的資訊。但是,當您繼續使用時 CodeBuild,您可能需要執行諸如允許與其他 AWS 服務 CodeBuild 進行交互之類的操作。
若 CodeBuild 要允許代表您與相依 AWS 服務互動,您需要 AWS CodeBuild 服務角色。您可以使用 CodeBuild 或 AWS CodePipeline 主控台建立 CodeBuild 服務角色。如需相關資訊,請參閱:
如果您不打算使用這些主控台,本節說明如何使用IAM主控台或 AWS CLI. CodeBuild
重要
CodeBuild 將服務角色用於代表您執行的所有作業。如果該角色包含使用者不該有的許可,您可能在無意中提升使用者的許可。確定該角色授予最低權限。
本頁所述的服務角色包含一個政策,授與使用所需的最低權限 CodeBuild。根據您的使用案例,您可能需要新增其他權限。
若要建立 CodeBuild 服務角色 (主控台)
在開啟IAM主控台https://console.aws.amazon.com/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策略概觀」。
-
-
在導覽窗格中,選擇政策。
-
選擇 建立政策 。
-
在 [建立原則] 頁面上,選擇JSON。
-
針對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": "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中的〈進行設定〉。
-
在已安裝的本機工作站或執行個體上的空白目錄中,建立兩個名為
create-role.json
和的檔案put-role-policy.json
。 AWS CLI 如果您選擇不同的檔案名稱,請務必在本程序中一律使用這些檔案名稱。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