外部からセキュアにkintoneのデータを操作する
はじめに
kintoneを利用するには、kintoneのライセンスが必要となります。
しかし、kintoneの契約ユーザーではない外部のユーザーとkintone内の一部のデータを共有したり、不特定多数の人からkintoneへデータを登録してもらいたい場合もあるかと思います。
たとえば、次のようなケースが考えられます。
- セミナーや採用の募集など社外から応募してもらうケース(外部からデータを登録する)
- 取引先に取引に関する情報を公開するケース(外部にデータを公開する)
- 予約システムとして利用し、予約者が自身の予約情報を参照するケース(外部にデータを公開する)
このような要件は、Webページを用いて外部からkintoneのデータを操作することで実現できます。
実装にはWebのしくみやkintone API仕様の理解など幅広い知識が求められますが、連携サービスを利用した比較的簡単な実装も可能です。
しかし、独自にシステムを構築する場合も、連携サービスを利用する場合も、セキュリティ面の考慮を怠ると想定外の情報漏洩などの事態を招きかねません。
ここでは、Webページを用いた外部からのデータ操作をセキュアにするため考慮すべき注意事項を紹介します。
外部のWebページからkintoneへデータを登録する場合に気を付けるポイント
データを登録してもらうだけの場合でも、外部ユーザーにデータの参照などの余計な権限を付与してしまうことでkintone内のデータに対して悪意のある操作をされてしまう可能性があります。
そこで、以下のような対策が必要です。
APIによる操作権限を必要最低限とする
kintone REST APIでは複数の認証方法が使用できます。
今回のようにkintoneの契約ユーザーではない外部のユーザーが利用する場合は、APIトークンの使用を推奨します。
kintoneのAPIトークンとは
アプリごとに発行する「トークン」と呼ばれる文字列を、REST APIのリクエストヘッダーに指定することで、REST APIを実行できる認証方法です。
APIトークンを使ってみよう
APIによる操作権限について、外部ユーザー向けのアンケートを行う利用を想定して説明します。
外部ユーザーからWebページ上で記入してもらった回答内容をREST APIを使用してkintoneに登録するとき、必要な権限は「回答内容を登録するアプリ」の「レコード追加」権限のみとなります。
「閲覧」「編集」「削除」等の不要な権限を有していると、悪意のある人にデータを操作される可能性が高まります。
他のアプリの権限も有する認証だった場合、想定外の情報まで操作されてしまうかもしれません。
その点APIトークン認証では、権限を1つのアプリに限定できます。
また、「追加」のみで「閲覧」権限は与えないなど、細かな権限制御によって外部操作の影響範囲を特定できます。
対象となるアプリの利用目的を明確にし、適切な権限のみを付与するようにしましょう。
連携用のkintoneユーザーアカウントを用意してパスワード認証を使用する方法も考えられますが、APIトークンのように権限を1つのアプリに限定できないため推奨しません。
ユーザーアカウントの認証情報が流出すると、そのアカウントでアクセスできるすべての情報が操作可能となってしまいます。
外部のWebページでkintoneのデータを公開する場合に気を付けるポイント
外部ユーザーにデータを公開する場合は、kintoneの環境外へデータを渡すことになります。
そのため、セキュリティ面に考慮しないと情報漏洩のリスクが伴います。
そこで、以下のような対策が必要です。
公開範囲や扱う情報の内容を制限する
kintoneは企業や自治体の情報システム基盤として利用されるケースも増えています。 利用する人が増えれば、悪意を持ってWebページを操作される可能性も高まります。
利用目的から影響度を予測し、次のような対策で公開範囲や情報を制限しましょう。
公開するWebページへのアクセスを制御する
アクセス制御のないWebページは、URLさえ知っていれば誰でもアクセスできる状態となってしまいます。
特定のユーザーのみに公開したい場合は、認証やIPアドレス制限の設定が必要です。
kintoneアプリに機密情報を含めない
外部公開にはリスクが伴うことを理解し、扱う情報をあらかじめ選別することが大切です。
外部から操作するアプリには個人情報や秘匿性の高い情報は含めず、別アプリで管理することを推奨します。
個人情報や秘匿性の高い情報を公開する必要がある場合は、後述する中継するしくみの構築を検討してください。
中継するしくみで絞り込み条件を設定する
kintoneアプリのレコードの一部を絞り込んで公開する場合、絞り込みを行っているので画面上では問題ないように見えても、ブラウザー開発者ツールを利用すると想定していないレコードを閲覧されてしまう可能性があります。
担当IDをもとに取引情報を公開するケースを例に紹介します。
担当IDを入力し取引情報を取得ボタンを押下すると、kintoneアプリに保存された取引情報を表示します。
このとき「担当ID=入力値」という絞り込み条件でレコードが検索されます。
画面から操作する場合
担当IDが未入力の場合はエラーとすることで、絞り込み条件のない取引情報の表示を防ぐことができます。
なお、誤入力や無差別入力によって想定外の取引情報を閲覧される可能性はあります。
ブラウザー開発者ツールを利用して操作する場合
ブラウザーの開発者ツールを利用すると、JavaScriptのエラーチェックが適用されません。
そのため、担当IDによる絞り込みを強制できず、全レコードの表示が可能となってしまいます。
kintoneの連携サービスを利用する場合も同様で注意が必要です。
連携サービスを利用して個人情報や秘匿性の高い情報を公開する場合は、上記のように開発者ツールにて想定外のレコードが閲覧可能になっていないか確認することを推奨します。
このような開発者ツールを利用した情報閲覧を防ぐには、中継するしくみで絞り込み条件を強制する方法が考えられます。
中継するしくみとは
クロスドメイン制約によりブラウザー(JavaScript)からkintone REST APIは実行できないため、外部のWebページからkintoneのデータを操作するには、リクエストを中継するしくみが必要となります。
中継するしくみにはWebサーバーを構築する方法やサーバーレスサービスを利用する方法があります。
中継するしくみにて担当IDを使った絞り込み条件を必須とすれば、ブラウザーの開発者ツールでも全レコードの取得はできません。
警告
再掲)中継するしくみで絞り込みを行っていても、誤入力や無差別入力によって想定外の取引情報を閲覧される可能性はあります。
担当IDと一緒に担当名や取引IDなどの付随する情報を入力してもらい、整合性をチェックする手法も有効です。
APIによる操作権限を必要最低限とする
編集や削除などの余計な権限を付与してしまうことで、kintone内のデータに対して悪意のある操作をされてしまう可能性があります。
付与する権限は最低限にしましょう。詳細は
前項
を確認してください。
おわりに
ここでは、Webページを用いた外部からのデータ操作をセキュアにするため考慮すべき注意事項を紹介しました。
- 利用目的に応じて、Webページの公開範囲やkintoneアプリで扱う情報を制限する。
- レコードの一部を絞り込んで公開する場合、想定外のレコードが閲覧される可能性を理解する。
- 連携サービスを利用する場合は、ブラウザーの開発者ツールを使用した無条件のレコード閲覧が発生しないか確認する。
- 無条件のレコード閲覧を防ぐ必要がある場合は、中継するしくみを構築する。
- REST APIの実行にはAPIトークン認証を使用し、適切な権限のみを付与する。
まずはリスクを分析して、適切な対応を選択するようにしましょう。
情報漏洩を未然に防ぐこと、万が一の発生時にも影響範囲を限定することが大切です。
このTipsは、2023年1月版kintoneで動作を確認しています。