1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】エラー「[GitHub] Upload to S3 failed with the following error: Access Denied...」の解決方法

Posted at

エラー内容

AWS Codepipelineで手動リリースしたら以下のエラーになりました。
SourceステージはGithub Webhook、BuildステージではCodeBuildを選んでいました。

[GitHub] Upload to S3 failed with the following error: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID:...

原因

S3バケットへのアクセス許可に関する問題が原因と言われています。
CodeBuildプロジェクトがS3バケットに対する必要なアクセス許可を持っていない場合に発生するらしい。
ということで、CodepipelineのRoleを見てみます。

  CodePipeLineRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - codepipeline.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: /
      RoleName: CodePipeLineRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AWSCodePipeline_FullAccess
        - arn:aws:iam::aws:policy/AWSCodeCommitFullAccess
        - arn:aws:iam::aws:policy/AWSCodeBuildAdminAccess
        - arn:aws:iam::aws:policy/CloudWatchFullAccess
        - arn:aws:iam::aws:policy/AmazonECS_FullAccess
        - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
        - arn:aws:iam::aws:policy/AmazonS3FullAccess

S3FullAccessがあるので問題なさそう...
同様にCodebuildのRoleにもS3へのアクセス許可は記載していました。

おかしいなぁ...と思ってよく見ると、凡ミスであることが分かりました。
アーティファクトストアの場所が誤っていたのです。
CodePipeLineでは以下のようにArtifactStoreの場所を定義します。
Artifactとは中間生成物のことであり、通常S3バケットに保存されます。

  CodePipeLineAppBuild:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      ArtifactStore:
        Location: !Sub ${SysTag}-xxx-codepipeline # ここで定義
        Type: S3
      Name: !Sub ${SysTag}-xxx-ECR
      RoleArn: !GetAtt CodePipeLineRole.Arn
      Stages:
        - Name: Source
  ##略##

しかし、Locationに記載されたバケット名でS3バケットを作っていなかったのです。正確に言うと、あとでS3バケット名を変えたのですが、ArtifactStoreの方を変えないままCloudFormationテンプレートを更新していたのです。更新時は特にエラーは出ません。

このLocationでミスっていると、上述のアクセス許可エラーになります。

Access Deniedと言われているので、RoleとかACLとか、バケットポリシーとかいろいろ見てしまい遠回りしましたが、ただ単に存在しない場所にはアップロードできないよと怒られていたのでした。。正しく設定してあげたら無事に走りました。一件落着。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?