この記事について
kintoneは、アクセス制限を設定することができます。
※正確には「〇〇.cybozu.com」という環境に対してですね。
アクセス制限の有無や、設定状況次第で、どのような認証をすることで、外部から kintone にアクセスできるか。
という部分をまとめた記事になります。
なんとなくわかっているはずだけど、きちんとまとめたことがなかった自分に対する
備忘録的な意味合いが強いかもしれません。
外部から kintone にアクセスするのってどんなとき?
概ね、以下に当てはまるんじゃないですかね。
- kintone 以外のシステムから、kintoneアプリのレコードを参照したい時
- kintone環境A から kintone環境B のアプリを参照したい時
(JSカスタマイズで kintone.proxy を使って外部のkintoneアプリを参照、みたいな)
※ kintone 連携サービス(krewDataやプリントクリエイター)などは1つ目に該当しそうですね。
kintone の アクセス制限ってなに?
前述の通り、正確には「〇〇.cybozu.com」という環境に対してアクセス制限をかけます。
概要については、サイボウズさんのヘルプがわかりやすいと思います。
上記ヘルプにも出てくる、IPアドレス制限 が今回の記事のメインテーマになっていきます。
IPアドレス制限とは
こちらについても、サイボウズさんのヘルプを見たほうがわかりやすいね!
(いつもお世話になっております。)
超ざっくりまとめると、
会社からはアクセスできるが、自宅からは kintone にアクセスできない
みたいに、制限をかけれるってわけ。
逆に、IPアドレス制限をかけていない場合は、URLとアカウント情報があれば、どこからでもアクセスできます。
IPアドレス制限の設定とBasic認証、セキュアアクセス
急に難しそうなワードが出てきましたけど、この記事で深くは語らないのでざっくり覚えればOKです。
IPアドレス制限の設定
以下の3種類があります。
- すべて許可 → 制限してないってこと。
- すべて拒否 → すべて拒否しているので、後述のBasic認証かセキュアアクセスが必須になる
- 一部許可 → 設定したIPアドレス以外は、後述のBasic認証かセキュアアクセスが必要になる
Basic認証
自分のユーザー名とパスワードを入力してログインする前に、その kintone 環境にアクセスするための
ユーザー名とパスワードを求められるって覚えてておk。
※許可されたIPアドレスの場合は不要
セキュアアクセス
クライアント証明書による認証です。
深い部分まで理解したい場合は、Googleなどで検索すると、図解しているサイトがいっぱいあるのでそちらで学びましょう!
簡単な例えで言うと・・・パスポートみたいなもん?笑
cybozu.com 共通管理で発行したクライアント証明書が無いと、kintone環境にアクセスできません。
※許可されたIPアドレスの場合は不要
外部から kintone アプリのレコードにアクセスする
kintone アプリにアクセスするには、パスワード認証(ユーザー名/パスワード)か APIトークンによる認証が必要。
APIトークン
パスワード認証は普段から馴染みがあると思いますが(kintoneにログインするときに使うやつ)
APIトークンとはなんぞ・・・という人も多いと思います。
サイボウズさんのヘルプもありますが、今までよりちょっとハードルの高い内容になっていると思います。
なので、要約すると・・
特定アプリにアクセスするための鍵
という覚え方でいいんじゃないかと。
前述のパスワード認証で利用するアカウント情報は、kintone環境にログインするアカウント情報ですが
APIトークンは、kintone環境の特定のアプリに対する、認証情報になります。
外部から kintone アプリにアクセスするためには、
- パスワード認証(ユーザー名/パスワード)or APIトークン
と、必要に応じて(IPアドレス制限してて、許可されていない場合)
- Basic認証 or セキュアアクセス(クライアント証明書)
が必要になります。
図にしてみるとこんなかんじ
必要な認証のまとめ
IPアドレス制限を行っている kintone 環境に対して、外部からアクセスする際に
必要な認証を表でまとめてみました。
チートシートっていうほど、情報量は多くないですが、忘れてしまった時の参考になるとうれしいです。
(画像にしてあるので、ダウンロードしちゃってください)
IPアドレス制限に関わる、必要な認証のまとめ。
パターンとしては、6パターンあります。
取得先とは異なるkintone環境のJSカスタマイズなどで、kintone.proxy を利用すると、リクエストは “103.79.14.0/24” のIPアドレスからリクエストされます。
そのため、上記IPアドレスを取得先のkintone環境で許可しておくと、Basic認証とクライアント証明書が不要になります。
(一部許可に該当するIPアドレスとなる)
外部から kintone にアクセスするサンプルコード
@kintone/rest-api-client を利用しています。
前述の表に記載の番号に合わせた、アクセスする際のサンプルコードになります。
rest-api-clientの設定の記述方法が異なるので、まずはそこにフォーカスして記載します。
①~② パスワード認証 or APIトークン認証
パスワード認証
const { KintoneRestAPIClient } = require('@kintone/rest-api-client')
/** rest-api-clientの設定 */
const params = {
baseUrl: 'https://xxxxxxx.cybozu.com',
auth: {
/** パスワード認証 */
username: 't_numata', // ユーザー名
password: 'pass', // パスワード
}
}
/** rest-api-client */
const client = new KintoneRestAPIClient(params)
APIトークン認証
const { KintoneRestAPIClient } = require('@kintone/rest-api-client')
/** rest-api-clientの設定 */
const params = {
baseUrl: 'https://xxxxxxx.cybozu.com',
auth: {
/** APIトークン認証 */
apiToken: ['Kqcox51lqQVyWna51QJCpu4H1Lef2Tt4QrFU5aiD'], // APIトークン
}
}
/** rest-api-client */
const client = new KintoneRestAPIClient(params)
④ パスワード認証 or APIトークン認証 + Basic認証
const { KintoneRestAPIClient } = require('@kintone/rest-api-client')
/** rest-api-clientの設定 */
const params = {
baseUrl: 'https://xxxxxxx.cybozu.com',
auth: {
// パスワード認証かAPIトークン認証のどちらかでおk
/** パスワード認証 */
// username: 't_numata', // ユーザー名
// password: 'pass', // パスワード
/** APIトークン認証 */
apiToken: ['Kqcox51lqQVyWna51QJCpu4H1Lef2Tt4QrFU5aiD'], // APIトークン
},
/** Basic認証 */
basicAuth: {
username: 'basic', // ユーザー名
password: 'ninsho', // パスワード
}
}
/** rest-api-client */
const client = new KintoneRestAPIClient(params)
⑤ パスワード認証 or APIトークン認証 + クライアント証明書
const { KintoneRestAPIClient } = require('@kintone/rest-api-client')
/** rest-api-clientの設定 */
const params = {
baseUrl: 'https://xxxxxxx.cybozu.com',
auth: {
// パスワード認証かAPIトークン認証のどちらかでおk
/** パスワード認証 */
// username: 't_numata', // ユーザー名
// password: 'pass', // パスワード
/** APIトークン認証 */
apiToken: ['Kqcox51lqQVyWna51QJCpu4H1Lef2Tt4QrFU5aiD'], // APIトークン
},
/** クライアント証明書 */
clientCertAuth: {
pfxFilePath: './t_numata.pfx',
password: 'xxxxxxxx',
}
}
/** rest-api-client */
const client = new KintoneRestAPIClient(params)
⑥ パスワード認証 or APIトークン認証 + Basic認証 or クライアント証明書
④ か ⑤ のどちらかを利用すればおk。
APIリクエストの実行方法
前述の変数「client」を使って、好きなようにリクエストしちゃってください。
以下のサンプルは、レコードを1件取得するリクエストです。
/**
* メイン処理
*/
const main = async () => {
const resp = await client.record.getRecord({
app: 1, // アプリID
id: 1 // レコード番号
});
console.log(resp);
}
他にもさまざまなリクエストがありますので、使い方は以下を参照してください。
あとがき
記事を投稿したきっかけは、kintone 連携サービスで認証方法の移行が必要になった際に
自分を含め、一緒に働いているメンバーと情報を共有するため。
記事を書くために検証したり、調べたりしたので、アウトプットをするとなると
改めて自分でも知識を付け直すいいきっかけになったような気がしました。
またそのうち、何か記事書きますー。