允許 CodeBuild 與其他 AWS 服務互動 - AWS CodeBuild

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

允許 CodeBuild 與其他 AWS 服務互動

如果您按照中的步驟開始使用主控台進 AWS CodeBuild 行第一次存取,則很可能不需要本主題中的資訊。但是,當您繼續使用時 CodeBuild,您可能需要執行諸如允許與其他 AWS 服務 CodeBuild 進行交互之類的操作。

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

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

重要

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

本頁所述的服務角色包含一個政策,授與使用所需的最低權限 CodeBuild。根據您的使用案例,您可能需要新增其他權限。

若要建立 CodeBuild 服務角色 (主控台)
  1. 在開啟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策略概觀」。

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

  3. 選擇 建立政策

  4. 在 [建立原則] 頁面上,選擇JSON

  5. 針對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 服務的安全性文件。

  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. 在已安裝的本機工作站或執行個體上的空白目錄中,建立兩個名為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: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