无法通过具有跨账户 ECR 源操作的 Codebuild 项目从 S3 检索对象

问题描述 投票:0回答:1

我正在创建一个使用 ECR 源操作、CodeBuild 操作和 ECS 部署操作的管道。 ECR 源在另一个 AWS 账户中,比如账户 E。管道和代码构建在账户 P 中。管道已成功创建,并且在将带有“最新”标签的新图像推送到 ECR 时也会触发。 sourceArtefact 是在账户 P 的 S3 存储桶中创建的。KMS 密钥是跨账户共享的,在此阶段之前一切正常。

当 Codebuild Action 在 Download Source 阶段尝试获取 sourceArtefact 时,出现以下错误

CLIENT_ERROR: AccessDenied: Access Denied status code: 403, request id: XXXX, host id: XXXX for primary source and source version arn:aws:s3:::XXX-pipeline-artefact-bucket/mypipeline/Artifact_e/vA9hDcq

账户 P 中的 Artifact Bucket 具有以下存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::<ACC-P>:root",
                    "arn:aws:iam::<ACC-P>:role/CodeBuildRoleXXXXX"
                ]
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::XXX-pipeline-artefact-bucket",
                "arn:aws:s3:::XXX-pipeline-artefact-bucket/*"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<ACC-E>:role/XXXecrsourceactionrole406755410defee62c0ca"
            },
            "Action": [
                "s3:DeleteObject*",
                "s3:PutObject",
                "s3:PutObjectLegalHold",
                "s3:PutObjectRetention",
                "s3:PutObjectTagging",
                "s3:PutObjectVersionTagging",
                "s3:Abort*"
            ],
            "Resource": [
                "arn:aws:s3:::XXX-pipeline-artefact-bucket",
                "arn:aws:s3:::XXX-pipeline-artefact-bucket/*"
            ]
        }
    ]
}

我还有一个 CodePipeline 角色和 Codebuild 角色,其中包含 AWS S3 完全访问策略。他们还可以访问 KMS 密钥。

我可以删除 codebuild 操作并直接执行 ECS Deploy 操作,但我确信它会面临同样的问题。然而,拥有 CodeBuild Action 的原因是构建 imageDetail.json 以将应用程序版本作为标签而不是“最新”,这样我们就不会在 ECS 中创建新任务时意外部署新版本。

如何解决此访问被拒绝问题?任何帮助表示赞赏。

amazon-web-services amazon-s3 aws-codepipeline aws-codebuild amazon-ecr
1个回答
0
投票

请尝试允许跨账户访问 s3 存储桶。可能有用的资源: https://repost.aws/knowledge-center/cross-account-access-s3

© www.soinside.com 2019 - 2024. All rights reserved.