ぷちスタディ@AWS S3バケットポリシーの編集

AWSElasticBeanstalk環境でNode.jsサンプルアプリを作成、S3バケットへの接続をしたところ、Error Access Denied となり接続できません。接続するにはアクセスキーのほかにバケットポリシーを適切に許可する必要がありました。

ひと頃流行った「アイスバケツチャレンジ」とはこのことだったのか・・・・。

冗談はさておき、AWSのストレージPaaSとして「S3」が無料トライアルで利用可能だったのでテキストの通り、アクセスキーを [ElasticBeanstalk] – [環境] – [設定] – [ソフトウェア] から設定しましたが表題の件でエラーが出ます。

S3の403 Access Deniedを解決する時の覚書

パブリックアクセスを[公開]にして[ポリシーの編集]から 必要なIAMユーザーのARN(Amazon Resource Name)とS3バケットARN, EC2RoleのARNを許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PolicyForAllowUploadWithACL",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/myusername"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::s3-sample-bucket-name/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "PolicyForAllowUploadWithEC2-role",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/aws-elasticbeanstalk-ec2-role"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::s3-sample-bucket-name/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        }
    ]
}

IAMから[aws-elasticbeanstalk-ec2-role] に下記ポリシーを追加。

これで無事、アップロードした画像がS3バケットに保存できるようになりました。

参考URL: Bucket policy examples – Amazon Simple Storage Service

同じカテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です