今回はBubbleのセキュリティの中でも「外部アクセス・API」に絞って説明を行います。
大きく3項目の解説をします。
- Settings > API タグ > Public API endpoints 注意点
- API workflow の項目について
- Plugins で気をつけること
Public API endpoints は、理解をした上で使用しましょう!
外部アクセスやAPIといえば一番はじめに 思い浮かぶのがこの
Settings > API > Public API endpoints の項目です。
アプリ初期設定では3つのうち、どれにもチェックが入っていません。
上の2つは、使わない場合はチェックを入れないこと!
注意すべきは上の2項目
・Enable Workflow API and backend workflows
・Enable Data API
です。
以前アプリを引き継いだ際に、Workflow API (Backend workflow) も Data APIも使っていないのにこれらの項目にチェックが入っていたことがありました。
試した痕跡だったのか?それとも間違えてチェックを入れてしまったのか?
今となってはわかりませんが「使用しないものにチェックは入れない」ことがまず大前提です。
Data APIの扱いは注意しましょう!
特に Enable Data API は、チェックを入れると以下の「注意」が出現します。
文中にvisible by default と書かれており、チェックが入るとデフォルトで「誰もがそのData を見れる」ことになります。
Privacyルールの設定なしでこのチェクを入れると、Data APIを通じて 全ての人に データが見える状態になります。
Data APIの利用可のチェクを入れると、セキュリティ的にリスクが上がります。
Privacyルールを設定せず、その Data APIにチェックが入っているとデータが抜かれ放題です。
この2つの理解が乏しいうちは、残念ながら触ることをおすすめできません。
しっかり理解してから使用するようにしましょう。
Workflow API も Data APIも、API Tokenを発行して使うと安心!
API Tokenを使っていますか?
結論、
Workflow APIも、Data APIも、使用する際に API Tokenを設定して使うようにしましょう!
API TokenはAPIを守る仕組みで、「API Tokenがなければアクセスできない状態」を作ることができます。セキュリティ的に安心です。
API Token作成のボタン「Create a new API token」でトークン keyの作成を行います。
「Enable Workflow API and backend workflows」 か「Enable Data API」どちらかのチェックが入 ることでこの作成ボタンが出現します。
初期設定でチェックが入っていない状態だと表示されませんのでご注意ください。
<API Tokenとは?>
あらかじめクライアント側(外部でデータを使う側)に「トークン」を持たせておき、データを渡す際にBubble側でトークンを検証し「権限があるかどうか?」を確認します。
権限がある場合だけ、データを渡します。
例えばこんな場合でも、API トークンを設定しておけば、決まったクライアント側からのみAPIをたたくので安心です。
例)
・Enable Workflow API and backend workflows にチェクが入っている
・Backend workflows、API workflowで「Expose as a public API workflow」にチェックが入っている
→ この状態でPrivacy ルールの設定を間違ってる or していない、ログインなどの認証もいらない場合…
誰でも、そのAPI workflowを実行できてしまいます。
✅API Tokenを設定していれば、そのトークンを持っているクライアント側だけが実行できます。誰でも…ではなくなるので安心です。
ドキっとするような怖い例を出しましたが、APIトークンを発行することの利点をご理解いただけたと思います。
何か問題が起こったり?おかしい?ときに、そのトークンだけ再生成することで過去のアクセス経路を防ぐことが可能です。
アクセスログからは「使用されたトークン」が確認できるのも利点です✅
Swagger API ドキュメントへのアクセス
3つ目のSwaggerの項目はデフォルトでチェックが外れています。
この機能はBubbleドキュメントの通り
The Swagger Specification is a standard way to describe an API. It can be used to generate a documentation, or to let other tools integrate with the API. Bubble provides a Swagger Specification out-of-the-box when you activate the API for your application.
Swaggerは、API を記述する標準的な方法です。ドキュメントを生成したり、他のツールを API と統合したりするために使用できます。アプリケーションの API を使用すると、Bubble はすぐに Swaggerの使用を提供します。
Bubble Swagger
Swagger APIへのアクセスができると、アプリの構造がJSON形式でわかりやすく出力されます。
仕様書等を作成する際などに便利です。
Swagger APIのドキュメントを非表示にし、他の開発者やサービスがこの機能を使えないようにするには、「チェックを入れます」。
ただ、Bubble公式でも述べている通り
✅非表示にすると、Bubble App Connector の一部の機能が壊れる可能性があります。
特別な理由が無い限りこの項目は「空欄」つまり、Swagger API documentaiotn へのアクセスを可能なままにしておくことをおすすめします。
Privacy rule プライバシールール
Enable Data API を有効にし、Data typeにチェックを入れたら そのData の Privacyルールは必ず設定しましょう!
Enable Data APIでData typeにチェックを入れると、そのPrivacy ルールに以下3項目が追加され詳細を設定できるようになります。
- Modify via API (API 経由で 変更)
- Delete via API(API 経由で 削除)
- Create via API(API 経由で 作成)
必要な項目だけにチェックを入れるようにします。
一部のFields「だけ」にという指定はここではできません。注意が必要です。
上級者向けになりますが、外部から操作する専用のData typeを作り(切り離しリレーションさせる)、その Data だけ書き込みなどを可能にする方法を取るのがおすすめです。
API workflow(Backend workflowsでの注意)
次にBackend workflowsを使う時の注意点を3項目に分けて解説します。
気をつけるべきは下図の赤で囲った部分です。
- Expose as a public API workflow
- This workflow can be run without authentication
- Ignore privacy rules when running the workflow
無駄にExpose as a public API workflowにチェックを入れないこと!
必要ない場合にも「チェックをオンにしている」人はいませんか?
なぜならこの項目、デフォルトで「チェックが入ってしまっている」から。
そのままにしているケースを多く見ます。
Expose as a public API はBubble公式ページでも説明しているように、チェックを入れると「外部からのリクエストが許可」されます。
Expose as a public API workflow
Check this box to allow requests from outside the Bubble Editor via the Workflow API, either by a client that you built or another service, such as Stripe or Zapier.
このボックスをオンにすると、作成したクライアントまたは Stripe や Zapier などの別のサービスによって、Workflow API を介して Bubble Editor の外部からのリクエストが許可されます。
Bubble Expose as a public API workflow
チェックを入れると、外部クライアント側からデータのアクセスが可能で、セキュリティー的に危険な状態です。
ログイン認証やtokenの設定もなしで使用してる場合、自由にデータの改ざんをしてください。と言っていることになります。
もちろん理解をして使っている場合は良いですが、「デフォルトでチェックが入っている」のがミソです。
Bubbleの内部だけで使用する「繰り返し処理」や「スケジュールで処理を行う」ものは、このチェックは必要ありません!
もう一度言います
以下のような設定には、チェックは入れないでください!
アプリ内部で使用する
・繰り返し処理(recurring event)
・スケジュール処理(Schedule workflow)
ログインなどの認証なしで使用する特殊ケース以外はチェクを入れないこと!
2つ目の、This workflow can be run without authenticationは、認証なしで実行させるかどうか?
のチェック項目です。
This workflow can be run without authentication
Check this box if this workflow can be run without authentication. Use this to enable users to sign up or login to the app.
このワークフローを認証なしで実行させる場合は、このボックスをオンにします。ユーザーがアプリにサインアップまたはログインした状態にさせます。
Bubble This workflow can be run without authentication
ここにチェックを入れると、ログインや認証なしで外部から誰でも実行できます という状態になります。
一番危険なのが
・1つ目の「Expose as a public API workflow」にチェックを入れ
・2つ目の「This workflow can be run without authentication」
にもチェックが入っている状態です。
外部からAPIを実行できる状態、かつ、認証関係なく誰でも実行可能。な状態です。
認証不要で実行させる、という特殊なケース以外はチェックを入れるのをやめましょう!!
Privacy ルールを適用せずに実行する場合、以外はチェックを入れないこと!
Privacy ルールは API実行の際にも適用されます。
ただしまれに、Privacyルールを適用しない状態で実行させたい場合があります。
その時にチェックを入れます。
Ignore privacy rules when running the workflow
All privacy rules will apply. Sometimes, you may want the workflow to bypass these rules, even if run without authentication, and run as an admin user who has all rights to the data. Check this box to ignore the privacy rules.
すべてのプライバシー規則が適用されます。認証なしで実行し、データに対するすべての権限を持つ管理者ユーザーとして実行する場合でも、ワークフローがこれらのルールをバイパスすることが必要な場合があります。プライバシー ルールを無視するには、このボックスをオンにします。
Bubble Ignore privacy rules when running the workflow
ただし注意事項でも記載されている通り、プライバシールールは守られず実行が可能になるため慎重に扱う必要があります!
初心者はチェックを入れない方が良い項目です!
理解した上で特殊なケースのみ使用する項目です。
初心者にはほぼ必要ない項目なのでチェックを入れないようにしてください。
PluginsでAPI connectorを使用する際は SSLかどうかを確認!
最後にPluginsで BubbleのAPI Connectorを使う際に気をつけることを解説します。
API Connectorは、外部APIに接続するためのBubble公式が出しているプラグインです。
API Connectorの説明を引用 ↓
The API Connector allows you to connect to almost any external API from Bubble. It expects a correctly formatted JSON body as a response. You can supply headers, parameters, and a call body.
API Connectorを使用すると、Bubble からほぼすべての外部 API に接続できます。レスポンスに、正しくフォーマットされた JSON が必要です。ヘッダー、パラメーター、body内へ呼び出しを指定ができます。
Bubble公式 API Connector
外部に接続ができ、データを取り込んだり扱うことが可能になります。
そこで注意をしたいのが、接続先がSSLになっているか?です。
SSLはHTTPSとも言われ、
Bubble パフォーマンンス&セキュリティ「完全版」でも解説した通り、やりとりを暗号化することができます。
<SSL(HTTPS)とは?>
サイト間のやりとりを暗号化します。
http で s が入っていない場合、やりとりの内容が暗号化されていません。よって盗聴や改ざんが可能になります。
SSL(https)にすることで、個人情報やプライバシーを守ることができます。
接続先のURLが https~で始まっているか?を必ず確認するようにしましょう。
sがついていないものは、使用を避けましょう。
まとめ:心配な方は専門家を頼ることも必要です
Bubbleは、初心者でも「アプリを簡単に作成できる」ツールに最適化されています。
現にDeploy(本番リリース)もボタン一つで完結します。
簡単に作成&公開できてしまう分、セキュリティのことなどは開発者自身に おまかせ されています。「自分で対策」しなくてはなりません。
セキュリティ完全版の出だしでも書いた文章です。
外部アクセス・APIの内容は正直、上級者向けの内容です。
しかしアプリケーション作成者、開発者にとって「知らなかった」で済まされないのがセキュリティー問題です。
アプリを作成するということは、ユーザーの個人情報を保持するということです。
誰に、どこに、どの情報までにアクセスさせるのか?
を適正に設定ができるエンジニアである必要があります。
今回の記事で、みなさんのお役に立てたら幸いです。
<Special Thanks>
ビジネスパートナーであり、セキュリティーに詳しい「ゆきくん」に監修していただきました。
ありがとうございました!
Bubbleのセキュリティーに不安、設定でつまずいている方に向けサービスも開設しています。困った際はぜひ私たちを頼ってください。 ココナラサービス
Bubbleの設定でお困りの方へ
ご相談や開発も承っております。
お気軽にご連絡ください。
お問い合わせはこちら