簡體   English   中英

從codepipeline啟動時,AWS codebuild無法下載源代碼

[英]AWS codebuild fails cant download source when initiated from codepipeline

我有一個AWS codebuild作業,當我以root用戶身份手動啟動時,它可以正常工作。

我有一個codepipe行,當codecommit合並到master時,它應該啟動構建作業。 它會觸發作業和構建開始,但在嘗試下載源時失敗。

我已經將完整的S3 / codebuild / codecommit策略附加到管道,但它仍然會拒絕訪問。

我錯過了哪些權限?

當您已經擁有CodeBuild項目並將其集成到CodePipeline項目時,通常會發生這種情況。 Codebuild現在不從CodeCommit / Github repo下載源代碼。 相反,它將嘗試下載在S3中的codepipeline存儲桶中創建的源工件。 因此,您需要提供CodeBuild角色的權限才能訪問S3中的codepipline存儲桶。

您可以通過修改Codebuild角色的附加策略 (或附加新策略)來執行此操作,該策略可以訪問以下操作

s3:ListObjects
s3:GetObject
s3:ListBucket

為您的Codepipeline桶及其對象

"arn:aws:s3:::codepipeline-bucket",
"arn:aws:s3:::codepipeline-bucket/*"

或者您可以選擇添加此存儲桶及其對象的所有操作。 您可以發布更改,它可以工作。 Lmk如果沒有。

原因是CodeBuild服務角色需要訪問CodePipeline S3存儲桶的權限。 要修復它,您可以附加內聯策略或修改現有策略以允許這些操作訪問CodePipeline S3存儲桶中的對象(以指定策略的資源)

s3:GetObject
s3:GetObjectVersion
s3:PutObject    

這是json中的策略,記得將S3-BUCKET-NAME替換為您的實際codepipeline s3存儲桶名稱。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::S3-BUCKET-NAME/*"
        }
    ]
}

要查找S3存儲桶名稱,您可以在AWS控制台上執行以下操作以跟蹤錯誤來源:

  1. 轉到CodeBuild
  2. 選擇左側面板上的Build projects
  3. 選擇您的項目,將顯示構建歷史記錄
  4. 單擊狀態失敗的構建運行項
  5. 如果有,請參閱構建日志中的錯誤
  6. 選擇階段詳細信息
  7. CodeBuild很可能在DOWNLOAD_SOURCE階段失敗,並顯示以下錯誤消息:
CLIENT_ERROR: AccessDenied: Access Denied status code: 403, request id: 
requestId, host id: hostId for primary source and source version 
arn:aws:s3:::S3-BUCKET-NAME/path

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM