こんにちは。CData Software Japan リードエンジニアの杉本です。
最近 CData Backlog Driver をご利用中のお客様から「特定のユーザーだけ、データの書き込みなどを抑制できるように権限コントロールしたい」という相談を受けました。
その際に確認した Backlog APIのアクセス制限について紹介したいと思います。
developer.nulab.com
www.cdata.com
Backlog API のアクセス権限とは?
さて、そもそも Backlog API はどのようなアクセス権限が施されているのでしょうか?
まず改めて確認しておきたい点ですが、Backlog APIは基本的に個人のアカウントに紐付いた形で利用するようになっています。
APIアクセスに必要となるAPI Keyについても、以下の個人設定から
それぞれAPI Keyを生成するような形で利用するようになっています。
このユーザーはスペース毎に以下のように権限・制限を持っていて、
管理者レベルのユーザーでどのようなことまで実施できるのかをユーザー毎に調整できるようになっています。
実はこの制限事項はAPIでも有効になっています。
Backlog API リファレンスに存在するエラーレスポンスの一覧でも「5: UnauthorizedOperationError」というエラーが存在し、
https://developer.nulab.com/ja/docs/backlog/error-response/#5-unauthorizedoperationerror
もし課題の登録ができないユーザーのAPI Keyを用いて「課題の追加」APIを実行しようとするとエラーが発生します。
https://developer.nulab.com/ja/docs/backlog/api/2/add-issue/#
CData Backlog Driver から権限の無いユーザーで操作してみる
この制約はもちろん、CData Backlog Driver でも有効です。なので、もしユーザー毎にアクセス制限を設けたい場合は、予めBacklog 側で制限がかかっていれば、それを尊重する形で利用できます。
せっかくなのでCData Backlog Excel Add-in で試してみました。
https://www.cdata.com/jp/drivers/backlog/excel/
予め「課題の閲覧のみ」が有効なユーザーを作成しておき、そのユーザーからAPI Keyを生成します。
そして、CData Excel Add-in の接続設定で入力するAPI Keyをそのユーザーから生成したもので指定します。
まずは「Issues」テーブルから課題一覧を取得してみましょう。
ここは通常通り取得できています。
しかしながら、例えばSummaryの項目を変更し「行の更新」を実行してみると
以下のようにエラーが返されてしまいました。
Fiddlerでキャプチャした結果を確認してみると、「403 Forbidden」でエラーが返ってきていました。
Error Code が「5」なので「UnauthorizedOperationError」になっていることもわかりますね。
PATCH https://XXXXXX.backlog.com/api/v2/issues/20130204?apiKey=XXXXX HTTP/1.1
Host: XXXXX.backlog.com
Accept-Encoding: gzip, deflate
User-Agent: CData Data Provider Engine - www.cdata.com - Accepts: gzip
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
summary=Update
HTTP/1.1 403 Forbidden
Date: Sun, 24 Oct 2021 06:32:35 GMT
Content-Type: application/json
Content-Length: 147
Connection: keep-alive
Server: nginx
X-RateLimit-Limit: 150
X-RateLimit-Reset: 1635057215
X-RateLimit-Remaining: 149
Access-Control-Allow-Origin: *
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Content-Type-Options: nosniff
{"errors":[{"message":"権限のない操作をしようとしました。(user.name:sugimoto kazuya, project.id:228871)","code":5,"moreInfo":""}]}
おわりに
このような操作権限は利用するAPIによって大きく仕様が異なるので要注意ですね。
ちなみに、CData Excel Add-in では「Readonly」というプロパティで強制的にデータ取得のみ可能にする設定も可能です。
cdn.cdata.com
API側の設定と併せて、こういった制限の仕方も検討してみると良いと思います。
関連コンテンツ