はじめに
「kintoneプラグインで秘匿情報を隠す」シリーズではkintoneのプラグインのメリットのひとつ「秘匿情報を隠蔽できるためセキュリティが向上する」点を深掘りします。
前編の
隠蔽方法編
では、kintoneプラグインJavaScript APIを用いて安全に情報を隠しつつ外部APIを実行する方法を解説しました。
後編は、より実践的な内容としてkintoneとSlackをプラグインを用いて連携しつつ、情報の隠匿ができているのかどうかを検証してみたいと思います。
具体的な検証内容としては、次のとおりです。
- kintoneからSlackに投稿できること
- 投稿の際にAPI keyなどの重要な情報を隠したまま投稿できていること
Slackとは?
Slackに関しては Slack公式サイト を確認してください。
今回使用するプラグインについて
今回はこちらで作成した、Slackを用いた検証用プラグインを用いて検証していきます。
検証用プラグインはkintoneで登録したテキストを、指定したチャンネルに投稿できる機能を備えたプラグインです。
今回使用しているプラグインに関しては、こちらからダウンロードが可能です。
なお、今回用意した検証用のSlack連携プラグインは、あくまで検証用のため、Slackに投稿できる必要最低限の機能のみを実装しています。
このように、「channel」と「text」を入力してレコードを登録すると、自動的にSlackにも投稿されるようになっています。
今回はこのプラグインを用いて、kintoneプラグインJavaScript APIを検証します。
検証準備
Slack側の準備
まず初めに、Slack APIを実行するためのAPIトークンを取得します。
こちらのサイト にアクセスし、Slack APIを実行するためのアプリを作成します。
「Create an App」をクリックし、アプリの名前と使用するワークスペースを選択します。
今回はApp Nameを「kintone App」に設定しました。
Slackのワークスペースに関しては、Slack APIを使用したいワークスペースを選択してください。
選択後、「Create App」をクリックすると、Basic Information画面に遷移します。
次に、使用するSlack APIを選択し、APIを使用可能にしていきます。
Basic Informationからのサイドバーの「OAuth & Permissions」を選択し、「Scopes」から、今回使用するAPIメソッドを選択します。
今回は、ユーザーがメッセージを送信するAPIを使用したいため、「Send messages as user」を選択します。
選択後、「Save Changes」で使用するAPI情報を保存します。
保存後、同画面の「OAuth Tokens & Redirect URLs」の「Install App to Workspace」をクリックし、インストールの許可をすると、APIトークンが発行された画面にリダイレクトされます。
今回発行したAPIトークンはこの後kintone上で使用するので、コピーしておいてください。
Slackでの設定はこれで完了です。
kintone側の準備
次にkintone側の設定をします。
まずは「
今回使用するプラグインについて
」にある「Slackを用いた検証用プラグイン」というリンクから、Slackプラグインのzipファイルをダウンロードし、kintone上にプラグインをインポートしてください。
kintoneアプリの作成
kintone上でアプリを新規作成し、以下のフィールドを追加してください。
フィールド名 | フィールドコード | フィールドの種類 |
---|---|---|
チャンネル | channel | 文字列(1行) |
テキスト | text | 文字列(複数行) |
今回のプラグインではフィールドコードを元にフィールドの情報を取得しているので、大文字などの間違いがないようにお願いします。
kintoneプラグインの設定
次にSlackプラグインの設定をします。
プラグインの設定画面上の、「API token」欄に、先ほど取得したSlackのトークンを入力し、保存してください。
これで設定はすべて完了しました!!
実行
では実際にアプリにレコードを登録して、Slackにも投稿されているかどうかを確認してみます。
このようにチャンネルを「kintone」とし、テキストを入力して登録をすると、Slackのkintoneチャンネルに投稿されます。
コードの検証
以上の流れから、kintoneのプラグインの設定画面上でトークンを入力することによって、kintoneとSlackを連携させることに成功しました。
では、具体的にどのようにして保存したトークンなどを受け渡しているのかを、実際のコードを見ながら確認していきたいと思います。
まずはプラグイン設定側のconfig.jsを確認してみます。
|
|
これは保存ボタンをクリックした後の処理です。
kintone.plugin.app.setProxyConfig()
を用いて、入力されたトークンをheader
上に登録します。
今回ヘッダー上に保存したトークンの情報は、kintone.plugin.app.proxy()
で外部APIを実行する際に用いられます。
外部API実行の際、次の値がすべて一致していないと、登録したトークンの情報は呼ばれないため、トークンの情報が指定したAPIの実行以外で使われることはありません。
- アプリ
- プラグイン
- HTTPメソッド(今回はPOST)
- APIのURLの前方(今回は
https://slack.com/api/chat.postMessage
)
次に実際にAPIを実行している、desktop.jsを確認してみます。
|
|
これはレコードが保存されたタイミングでSlackにリクエストを送信する処理です。
kintone.plugin.app.proxy()
でSlackのAPIを実行しています。
アプリ、プラグイン、HTTPメソッド、APIのURLが一致しているため、先ほどヘッダーに登録したトークンの情報が読み込まれ、実行に成功しています。
desktop.jsのコードの内容はブラウザーからも確認できます。
しかし、コードを見ていただければ分かるように、トークンなどの重要な情報はdesktop.jsには一切記載しておらず、アプリの管理者のみが閲覧できるプラグイン設定画面でトークンを設定します。
もしこれと同様の処理をkintoneカスタマイズで行う場合、kintone.proxy()
を用いて行えるのですが、次のようにリクエストヘッダーにトークンの情報を載せる必要があるため、ブラウザー上から情報が確認できてしまいます。
これでは情報を隠しつつ安全に運用できているとはいえません。
まとめ
このように、kintoneプラグインとkintoneプラグインJavaScript APIを用いれば、重要な情報を隠しつつさまざまな外部サービスを連携できます。
今回の検証ではSlackを用いましたが、その他Google各種サービスなどさまざまな外部サービスとも連携可能なので、ぜひいろいろなサービスを連携してみてください!
このTipsは、2018年11月版kintoneで動作を確認しています。