SORACOM BeamでAmazon S3にファイルをアップロードする際の注意点

2025/02/10に公開

はじめに

SORACOM Beamはデバイスから送信されたリクエストをパブリッククラウドなどのサーバーに転送するためのサービスです。HTTPのほかにMQTTやLPWAなどのプロトコルにも対応していて、セキュアにデータを転送することができます。

https://soracom.jp/services/beam/

Beam経由でS3に転送する

IAM認証を使用してデバイスから転送されたデータをBeam経由でAmazon S3にアップロードするにはSORACOMの公式ドキュメントが参考になります。

転送先バケットの作成とIAMポリシー・ロールの作成を行います。今回はbeam-test-s3-bucketというバケット内のhoge/fuga/*というキーにのみアップロードできるように以下のようなポリシーを作成しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucket"
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectTagging",
                "s3:PutObjectTagging"

            ],
            "Resource": "arn:aws:s3:::beam-test-s3-bucket",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "hoge/fuga/*"
                }
            }
        }
    ]
}

続いてBeamのセットアップに進みます。認証情報ストアには先ほど作成したIAMロールを指定します。

BeamのWebサイトエントリポイントの設定では公式ドキュメントにならい、以下のような設定を行いました。beam-test-s3-bucketは実際に使用しているバケット名です。

項目
設定名 任意の設定名
プロトコル HTTPS
ホスト beam-test-s3-bucket.s3.ap-northeast-1.amazonaws.com

他にAuthorizationヘッダの設定も必要です。

しかし、この設定でファイルをアップロードすると、以下のエラーが発生しました。

boto3.exceptions.S3UploadFailedError: Failed to upload big-file.zip to beam-test-s3-bucket/hoge/fuga/bigfile.zip: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

対処法

この問題はIAMポリシーで転送可能なキーをhoge/fuga/*のように設定してS3パスによるアクセス制御をしようとした場合に発生します。
本来はバケット名がbeam-test-s3-bucket、キー名がhoge/fuga/bigfile.zipとなるべきですが、Beamの設定でバケット名を指定しているため、バケット名がキー名に含まれてしまい、IAMポリシーにマッチしなくなってしまいます。つまり、バケット名がbeam-test-s3-bucket、キー名がbeam-test-s3-bucket/hoge/fuga/bigfile.zipでアップロードしようとしているため、IAMポリシーにマッチしなくなってしまっているのです。

この問題を回避するためにはBeamのセットアップでホスト名をバケット名を含まない形に設定します。

項目
設定名 任意の設定名
プロトコル HTTPS
ホスト s3.ap-northeast-1.amazonaws.com

この設定でファイルをアップロードすると、無事にファイルがアップロードされました。

まとめ

SORACOM Beamを使用してAmazon S3にファイルをアップロードする際の注意点についてまとめました。IAMポリシーで転送可能なキーを制御する場合はBeamの設定に注意が必要です。

株式会社TechSword

Discussion