こんにちは、サイオステクノロジーの佐藤 陽です。
今回はAzureリソースにREST APIでアクセスする方法について紹介します。
なお、APIは保護されており、アクセストークンを用いてアクセスする必要があります。
そのためAzure AD認証を使ったアクセストークンの取得方法に関しても併せてご紹介します。
Azure Survice Busを題材として紹介していきますが、他のリソースでも同じようにアクセス可能です!
リソースの作成
AzurePortalからService BusおよびQueueを作成します。
まず初めにService Busのリソースを作成しましょう。
料金プランはBasicで問題ないです。

リソースのデプロイが完了したら、Queuesのブレードを選択し、新規にQueueを作成します。


これでリソースの作成は完了です。
Azure AD認証
次にAzure AD認証を通してアクセストークンを取得します。
Applicationの作成
Azure ADに新規にアプリケーションを作成し、併せてシークレットを作成します。
シークレットの値は後ほど使うのでメモしておきましょう!

次に、このAADアプリに対してServiceBusのQueueへのアクセス権限を与えるため、アプリに対して適切なRoleを割り当てます。
今回の例であれば、Azure Service Bus Data ReceiverやAzure Service Bus Data SenderのRoleが必要になります。
アクセストークンの取得
今回はクライアントとしてPostmanを利用します。
本記事にてHeaderの内容を記載していますが、Postmanで標準で与えられているHeaderの内容はそのままにし、それらに追加する形で利用してください。
Postmanを起動し、
HTTPメソッド | GET |
URI | https://login.microsoftonline.com/<TENANTID>/oauth2/token |
Header | Content-Type:application/x-www-form-urlencoded |
Body |
grant_type:client_credentials
client_id:{Application Id(Client Id)}
client_secret:{Client Secret}
resource:https://servicebus.azure.net
|
の内容で実行します。
※今回は素のシークレットの値を利用しますが、実装時にはAzure Key Vaultに保管するなどしてくださいね

すると、レスポンスのbodyからaccess_tokenを取得することができます。

REST APIの実行
アクセストークンが取得できたので実際にREST APIを実行してみましょう。
まず始めにQueueに対してメッセージを追加したいと思います。
取得したアクセストークンはHeaderのAuthorizationのパラメータとして扱います。
“Bearer “という文字列に続いて、アクセストークンの値を追記しましょう。
ex. Bearer eyJ0eXAiOiaASFfdDKV1QiLCJsfsdgOiJSUzI1NiIsIng1.....
Postmanを起動し、
HTTPメソッド | POST |
URI | https://sb-restapi-testing.servicebus.windows.net/queue-restapi-testing/messages |
Header |
Content-Type:application/json;type=entry;charset=utf-8
Authorization:Bearer <AccessToken>
|
Body |
{
“message”:”This is a message”
}
|
の内容で実行します。

201番のレスポンスが返ってきたらOKです。
AzurePortalのService Bus Explorerから確認してみましょう。
正しくメッセージが追加されていることがわかります。

また、せっかくなのでREST APIでもメッセージを取得してみたいと思います。
Postmanを起動し、
HTTPメソッド | POST |
URI | https://sb-restapi-testing.servicebus.windows.net/queue-restapi-testing/messages/head |
Header | Authorization:Bearer <AccessToken> |
の内容で実行すると、先ほど送ったQueueの先頭にあるメッセージが取得できていることがわかります。

まとめ
Azure AD認証を用いてアクセストークンを取得し、REST APIを利用してService Busにアクセスしました。
安全かつ便利な認証方法だと思うので、是非試してみてください。