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

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

允許 AWS 與其他 服務 CodeBuild 互動

如果您 AWS CodeBuild 第一次遵循 中的步驟開始使用主控台進行存取,則很可能不需要本主題中的資訊。不過,當您繼續使用 時 CodeBuild,您可能想要執行一些動作 CodeBuild ,例如允許 與其他 AWS 服務互動。

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

如果您不打算使用這些主控台,本節說明如何使用IAM主控台或 建立 CodeBuild服務角色 AWS CLI。

重要

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

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

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

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

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

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

    • 您 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 InterfaceAWS Command Line Interface

  2. 在 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: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