CData Software Blog

クラウド連携のCData Software の技術ブログです。

Backlog API のアクセス制限・UnauthorizedOperationError について:CData Backlog Driver

f:id:sugimomoto:20211024154456p:plain

こんにちは。CData Software Japan リードエンジニアの杉本です。

最近 CData Backlog Driver をご利用中のお客様から「特定のユーザーだけ、データの書き込みなどを抑制できるように権限コントロールしたい」という相談を受けました。

その際に確認した Backlog APIのアクセス制限について紹介したいと思います。

developer.nulab.com

www.cdata.com

Backlog API のアクセス権限とは?

さて、そもそも Backlog API はどのようなアクセス権限が施されているのでしょうか?

まず改めて確認しておきたい点ですが、Backlog APIは基本的に個人のアカウントに紐付いた形で利用するようになっています。

APIアクセスに必要となるAPI Keyについても、以下の個人設定から

f:id:sugimomoto:20211024153940p:plain

それぞれAPI Keyを生成するような形で利用するようになっています。

f:id:sugimomoto:20211024153945p:plain

このユーザーはスペース毎に以下のように権限・制限を持っていて、

f:id:sugimomoto:20211024153949p:plain

管理者レベルのユーザーでどのようなことまで実施できるのかをユーザー毎に調整できるようになっています。

f:id:sugimomoto:20211024153955p:plain

実はこの制限事項はAPIでも有効になっています。

Backlog API リファレンスに存在するエラーレスポンスの一覧でも「5: UnauthorizedOperationError」というエラーが存在し、

https://developer.nulab.com/ja/docs/backlog/error-response/#5-unauthorizedoperationerror

f:id:sugimomoto:20211024154001p:plain

もし課題の登録ができないユーザーの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/

f:id:sugimomoto:20211024154010p:plain

予め「課題の閲覧のみ」が有効なユーザーを作成しておき、そのユーザーからAPI Keyを生成します。

f:id:sugimomoto:20211024154016p:plain

そして、CData Excel Add-in の接続設定で入力するAPI Keyをそのユーザーから生成したもので指定します。

f:id:sugimomoto:20211024154021p:plain

まずは「Issues」テーブルから課題一覧を取得してみましょう。

f:id:sugimomoto:20211024154025p:plain

ここは通常通り取得できています。

f:id:sugimomoto:20211024154029p:plain

しかしながら、例えばSummaryの項目を変更し「行の更新」を実行してみると

f:id:sugimomoto:20211024154035p:plain

以下のようにエラーが返されてしまいました。

f:id:sugimomoto:20211024154041p:plain

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側の設定と併せて、こういった制限の仕方も検討してみると良いと思います。