Soracom

Users

ドキュメント

IAM 認証を利用して Amazon S3 にファイルをアップロードする

お客様の AWS アカウントにある Amazon S3 へのアップロードを、Beam が動作する SORACOM の AWS アカウントにのみ許可できます。

Beam を使用することで、デバイスに Amazon S3 バケットにアップロードするための認証情報をインストールする必要がなくなります。デバイスでは、以下のように Beam のエントリポイントを指定してアクセスするだけで、Amazon S3 バケットにファイルをアップロードできます。

HTTP エントリポイントは利用できません

Amazon S3 にファイルをアップロードしたりダウンロードしたりする場合は、HTTP エントリポイントは利用できません。このページに書かれているとおり、Web サイトエントリポイントを利用してください。

ステップ 1: Amazon S3 バケットを作成する

Beam からアップロード / ダウンロードする Amazon S3 バケットを作成します。

  1. Amazon S3 の バケット画面 にアクセスして、[バケットを作成] をクリックします。

  2. [バケット名] にバケット名を入力して、[バケットを作成] をクリックします。

    バケット名は、これ以降、${amazon_s3_bucket} と表記します。例: beam-amazon-s3-bucket

    Amazon S3 バケットが作成されます。

  3. 作成した Amazon S3 バケットをクリックし、[プロパティ] をクリックして、[Amazon リソースネーム (ARN)] の値をコピーします。

    [Amazon リソースネーム (ARN)] の値は、これ以降、${amazon_s3_bucket_arn} と表記します。例: arn:aws:s3:::beam-amazon-s3-bucket

ステップ 2: IAM ロールを作成して SORACOM の AWS アカウントに割り当てる

ステップ 1: Amazon S3 バケットを作成する で作成した Amazon S3 バケットへのアップロードとダウンロードを、Beam が動作する SORACOM の AWS アカウントに許可します。具体的には、アップロードとダウンロードを許可するための AWS IAM ロールを作成し、SORACOM の AWS アカウントに割り当てます。

  1. IAM コンソール にアクセスし、[アクセス管理][ロール] の順にクリックして、[ロールを作成] をクリックします。

  2. [AWS アカウント][別の AWS アカウント] の順にクリックし、[アカウント ID] に SORACOM の AWS アカウント ID を入力します。

    Beam が動作する SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。

    • 日本カバレッジ: 762707677580
    • グローバルカバレッジ: 950858143650

  3. [外部 ID を要求する] にチェックを入れ、[外部 ID] に任意の文字列を入力します。

    [外部 ID] に入力した文字列は、これ以降、${external_id} と表記します。例: External-ID-Rs6E3TFfh5QsyFWp

  4. [次へ] をクリックします。

    「許可を追加」画面が表示されます。

  5. [ポリシーを作成] をクリックします。

    別のウィンドウまたは別のタブで、「ポリシーの作成」画面が表示されます。

    ここからは「ポリシーの作成」画面でポリシーを作成します

    「ポリシーの作成」画面の操作が終わったら、[ポリシーの作成] が表示されている「許可を追加」画面に戻ってきて IAM ロールを作成する操作を続けます。画面を閉じないでください。

  6. 以下の項目を設定します。

    項目説明
    [サービス][サービスの選択] をクリックして、[S3] をクリックします。
    [アクション][フィルタアクション] に「GetObject」と入力し、[GetObject] にチェックを入れます。同様に、[PutObject] にもチェックを入れます。

  7. [リソース][指定][ARN の追加] の順にクリックします。

    「ARN の追加」画面が表示されます。

  8. [S3_object の ARN の指定] に、${amazon_s3_bucket_arn} および「/*」(例: arn:aws:s3:::beam-amazon-s3-bucket/*) を入力して、[追加] をクリックします。

    「ポリシーの作成」画面に戻ります。

  9. [次のステップ: タグ][次のステップ: 確認] の順にクリックします。

  10. [名前] に AWS IAM ポリシーの名前を入力し、[ポリシーの作成] をクリックします。

    AWS IAM ポリシーが作成され、ポリシー画面が表示されます。

  11. ポリシー画面が表示されているウィンドウまたはタブを閉じて、「許可を追加」画面に戻ります。

  12. [] をクリックし、手順 10 で入力した AWS IAM ポリシーの名前をテキストボックスに入力して、Enter キーを押します。

    作成した AWS IAM ポリシーが表示されます。

  13. 作成した AWS IAM ポリシーにチェックを入れて、[次へ] をクリックします。

  14. [ロール名] に IAM ロールの名前を入力して、[ロールを作成] をクリックします。

    ロール画面に戻ります。

  15. 作成した IAM ロールの名前をクリックし、[ARN] をメモします。

    この ARN は、これ以降、${iam_role_arn} と表記します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-amazon-s3-bucket-role

ステップ 3: SORACOM Beam をセットアップする

Beam の Web サイトエントリポイントを設定します。ここで説明するとおりに設定すると、以下の機能が実現できます。

  • IoT SIM を利用するデバイスから送信されたファイルを Beam から Amazon S3 バケットにアップロードする。
  • IoT SIM を利用するデバイスで Amazon S3 バケットに保存されているファイルをダウンロードしたりする。

認証情報ストアに AWS IAM ロール認証情報を登録する

Beam から AWS Lambda 関数を呼び出すために、IAM ロールに関する認証情報を、ユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

項目説明
[認証情報 ID]認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-getObject-putObject
[種別]「AWS IAM ロール認証情報」を選択します。
[ロール ARN]${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/beam-hello-world-invoke-function-url-role
[外部 ID]${external_id} を入力します。例: External-ID-Rs6E3TFfh5QsyFWp

credential registration credential registration

Beam の Web サイトエントリポイントを設定する

Beam の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Beam 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. [+設定を追加する][Web サイトエントリポイント] の順にクリックします。

    「SORACOM Beam - Web サイト転送設定」画面が表示されます。

  3. 以下のように設定します。

    項目説明
    [設定名]任意の設定名 (例: Amazon S3 bucket) を入力します。
    [転送先][プロトコル]「HTTPS」を選択します。
    [転送先][ホスト名]${amazon_s3_bucket}.s3.ap-northeast-1.amazonaws.com を入力します (例: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.s3.ap-northeast-1.amazonaws.com)。
    [転送先][ポート番号]空欄のままにします。
    [ヘッダ操作][AUTHORIZATION ヘッダ]

    オンにして、以下のように設定します。

    • [タイプ]: 「AWS Signature V4」を選択します。
    • [サービス]: 「AWS S3」を選択します。
    • [リージョン]: Amazon S3 バケットのリージョンを選択します。
    • [ペイロード署名省略 (AWS S3 のみ有効)]: Amazon S3 にファイルサイズが 1 MiB を超えるファイルをアップロードする可能性がある場合は、オンにします。
    • [認証情報 ID]: 認証情報ストアに AWS IAM ロール認証情報を登録する で登録した AWS IAM ロール認証情報を選択します。

    HTTP エントリポイント HTTP エントリポイント
    HTTP エントリポイント HTTP エントリポイント

    HTTP エントリポイントの設定値の意味は、HTTP エントリポイント を参照してください。

  4. [保存] をクリックします。

  5. IoT SIM が所属するグループを切り替えます。

    IoT SIM の Beam の設定が完了しました。

ステップ 4: Web サイトエントリポイントを使用して Amazon S3 にファイルをアップロードする

Beam の Web サイトエントリポイントを使用して、Amazon S3 にファイルをアップロードします。

AWS SDK for Python (Boto3) を使用してファイルをアップロードする

  1. デバイスに、AWS SDK for Python (Boto3) をインストールします。

    $ pip install boto3
    
  2. デバイスに、file_upload_resource.py をダウンロードします。

    file_upload_resource.py はサンプルスクリプトです

    file_upload_resource.py は、AWS SDK for Python (Boto3) を利用して、Amazon S3 にファイルをアップロードしたり、ダウンロードしたりする機能を持つサンプルスクリプトです。

  3. デバイスで以下のコマンドを実行して、ファイルをアップロードします。

    $ python -c "import file_upload_resource;
    file_upload_resource.upload(
        bucket_name='beam-amazon-s3-bucket',
        rel_file_path='./bigfile.zip',
        key='bigfile.zip',
        content_type='application/zip')"
    

    file_upload_resource.upload() メソッドの引数は以下のとおりです。

    項目説明
    bucket_nameAmazon S3 バケットの名前を指定します。第一階層のフォルダ名として利用されます。
    rel_file_pathアップロードするファイルの相対パス (デバイスでのファイル名) を指定します。
    keyアップロードしたファイルのキー (Amazon S3 バケットでのファイル名) を指定します。
    content_typeアップロードするファイルの種類に合わせて、コンテンツタイプを指定します。

    次に、アップロードしたファイルを Amazon S3 コンソールで確認します。

  4. Amazon S3 の バケット画面 にアクセスします。

  5. 作成したバケットをクリックします。

    アップロードしたフォルダ (バケット名) が表示されます。

  6. デバイスでファイルをダウンロードする場合は、以下のコマンドを実行します。

    $ python -c "import file_upload_resource;
    file_upload_resource.download(
        bucket_name='beam-amazon-s3-bucket',
        key='bigfile.zip',
        rel_output_file_path='downloaded_bigfile.zip')"
    

    file_upload_resource.download() メソッドの引数は以下のとおりです。

    項目説明
    bucket_nameAmazon S3 バケットの名前を指定します。第一階層のフォルダ名として利用されます。
    keyダウンロードするファイルのキー (Amazon S3 バケットでのファイル名) を指定します。
    rel_output_file_pathダウンロードしたファイルの名前 (デバイスでのファイル名) を指定します。
100 MiB 以下のファイルをアップロードする場合

100 MiB 以下のファイルをアップロードする場合は、IoT SIM を利用するデバイスで、以下のコマンドを実行してもアップロードできます。この場合は、AWS SDK for Python (boto3) をインストールしたり、「file_upload_resource.py」をダウンロードしたりする必要はありません。

$ curl -X PUT http://beam.soracom.io:18080/test.jpg \
-H "Content-Type: image/jpg" \
-T test.jpg

なお、Content-Type: multipart/form-data, boundary=xxxxxxxxxx を指定した場合、リクエストボディに挿入した boundary (xxxxxxxxxx) なども、ファイルの一部としてアップロードされます。

AWS CLI を使用してファイルをアップロードする

AWS CLI を使用して、Amazon S3 バケットにファイルをアップロードしたり、ダウンロードしたりすることもできます。

アップロードの例:

$ aws s3 cp bigfile.zip s3://beam-amazon-s3-bucket/bigfile.zip \
--no-sign-request --endpoint-url http://beam.soracom.io:18080

ダウンロードの例:

$ aws s3 cp s3://beam-amazon-s3-bucket/bigfile.zip ./downloaded_bigfile.zip \
--no-sign-request --endpoint-url http://beam.soracom.io:18080