カテゴリー内の他の記事

外部からセキュアに kintone のデータを操作する

Index

はじめに

kintone を利用するには、kintone のライセンスが必要となります。
しかし、kintone の契約ユーザーではない外部のユーザーと kintone 内の一部のデータを共有したり、 不特定多数の人から kintone へデータを登録してもらいたい場合もあるかと思います。
たとえば、次のようなケースが考えられます。

  • セミナーや採用の募集など社外から応募してもらうケース
  • 顧客からのお問い合わせや申請を受け付けるケース
  • 取引先や利用者に対して関係情報のみを共有するケース

このような要件は、Web ページを用いて外部から kintone のデータを操作することで実現できます。

____4.PNG

実装には Web のしくみや kintone API 仕様の理解など幅広い知識が求められますが、連携サービスを利用した比較的簡単な実装も可能です。
しかし、独自にシステムを構築する場合も、連携サービスを利用する場合も、 kintone の環境外へデータを渡すことになります。 セキュリティ面を考慮しなければ、想定外の情報漏洩などの事態を招きかねません。
ここでは、Web ページを用いた外部からのデータ操作をセキュアにするため考慮すべき注意事項を紹介します。

外部の Web ページから kintone のレコードを操作するときに気をつけるポイント

公開範囲や扱う情報の内容を制限する

kintone は企業や自治体の情報システム基盤として利用されるケースも増えています。 利用する人が増えれば、悪意を持って Web ページを操作される可能性も高まります。
利用目的から影響度を予測し、次のような対策で公開範囲や情報を制限しましょう。

公開する Web ページへのアクセスを制御する

アクセス制御のない Web ページは、URL さえ知っていれば誰でもアクセスできる状態となってしまいます。
特定のユーザーのみに公開したい場合は、認証や IP アドレス制限の設定が必要です。

入出力を行う kintone アプリに機密情報を含めない

外部公開にはリスクが伴うことを理解し、扱う情報をあらかじめ選別することが大切です。
外部から操作するアプリには個人情報や秘匿性の高い情報は含めず、別アプリで管理することを推奨します。

API による操作権限を必要最低限とする

kintone REST API では複数の認証方法が使用できます。
今回のように kintone の契約ユーザーではない外部のユーザーが利用する場合は、API トークンの使用を推奨します。

kintone の API トークンとは
アプリごとに発行する「トークン」と呼ばれる文字列を、REST API のリクエストヘッダーに指定することで、REST API を実行できる認証方法です。
APIトークンを使ってみよう

API による操作権限について、外部ユーザー向けのアンケートを行う利用を想定して説明します。
外部ユーザーから Web ページ上で記入してもらった回答内容を REST API を使用して kintone に登録するとき、 必要な権限は「回答内容を登録するアプリ」の「レコード追加」権限のみとなります。
「閲覧」「編集」「削除」等の不要な権限を有していると、悪意のある人にデータを操作される可能性が高まります。
他のアプリの権限も有する認証だった場合、想定外の情報まで操作されてしまうかもしれません。

その点 API トークン認証では、権限を 1 つのアプリに限定できます。
また、「追加」のみで「閲覧」権限は与えないなど、細かな権限制御によって外部操作の影響範囲を特定できます。
対象となるアプリの利用目的を明確にし、適切な権限のみを付与するようにしましょう。

連携用の kintone ユーザーアカウントを用意してパスワード認証を使用する方法も考えられますが、 API トークンのように権限を 1 つのアプリに限定できないため推奨しません。
ユーザーアカウントの認証情報が流出すると、そのアカウントでアクセスできるすべての情報が操作可能となってしまいます。

中継するしくみで絞り込み条件を設定する

kintone アプリのレコードの一部を絞り込んで公開する場合、想定していないレコードを閲覧されてしまう可能性があります。

担当 ID をもとに取引情報を公開するケースを例に紹介します。
担当 ID を入力し取引情報を取得ボタンを押下すると、kintone アプリに保存された取引情報を表示します。
このとき「担当 ID=入力値」という絞り込み条件でレコードが検索されます。

Mylookup.gif

画面から操作する場合

担当 ID が未入力の場合はエラーとすることで、絞り込み条件のない取引情報の表示を防ぐことができます。
なお、誤入力や無差別入力によって想定外の取引情報を閲覧される可能性はあります

Mylookup2.gif

ブラウザー開発者ツールを利用して操作する場合

ブラウザーの開発者ツールを利用すると、JavaScript のエラーチェックが適用されません。
担当 ID による絞り込みを強制できず、全レコードの表示が可能となってしまいます。

__________2022-06-13_084733.png

kintone の連携サービスを利用する場合も同様で注意が必要です。
開発者ツールを利用した情報閲覧を防ぐには、中継するしくみ(後述)で絞り込み条件を強制する方法が考えられます。

中継するしくみとは

クロスドメイン制約によりブラウザー(JavaScript)から kintone REST API は実行できないため、 外部の Web ページから kintone のデータを操作するには、リクエストを中継するしくみが必要となります。
中継するしくみには Web サーバーを構築する方法やサーバーレスサービスを利用する方法があります。

structure.png

kintone の連携サービスも、上記のような中継するしくみを使ってサービスを提供しています。

中継するしくみにて担当 ID を使った絞り込み条件を必須とすれば、ブラウザーの開発者ツールでも全レコードの取得はできません。

再掲)誤入力や無差別入力によって想定外の取引情報を閲覧される可能性はあります。
担当 ID と一緒に担当名や取引 ID などの付随する情報を入力してもらい、整合性をチェックする手法も有効です。

おわりに

ここでは、Web ページを用いた外部からのデータ操作をセキュアにするため考慮すべき注意事項を紹介しました。

  • 利用目的に応じて、Web ページの公開範囲や kintone アプリで扱う情報を制限する
  • REST API の実行には API トークン認証を使用し、適切な権限のみを付与する
  • レコードの一部を絞り込んで公開する場合、想定外のレコードが閲覧される可能性を理解する
    • 中継するしくみで条件を設定し、ブラウザーの開発者ツールを使用した無条件のレコード閲覧を防ぐ

まずはリスクを分析して、適切な対応を選択するようにしましょう。
情報漏洩を未然に防ぐこと、万が一の発生時にも影響範囲を限定することが大切です。

このTipsは、2022年7月版で確認したものになります。

記事に関するフィードバック

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

サインインしてコメントを残してください。