0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AzureResourceをRestで操作しようとして詰まった話

Posted at

AzureAPIManagerにRestでGroupを追加する

今回使用する環境

  1. Azure
  2. Advanced REST client (chorome拡張機能)

※この記事は2019年6月17日に記載しました。

詰まった経緯
 マイクロサービスを使用するユーザーをAzureAPIManagerのUserで管理しようと
 試みた。下記資料を参考にプログラムからRESTで通信をしたところ
 HTTP要求がRejectされた。MicrosoftDocs(AzureAPI)

詰まった原因
 AzureRestAPIReferenceの最初のページを読みとばしていた(以下画像)
 → APIManagerを操作するためのREST内容ばかりよんでいた…:joy:

image.png

操作内容

  1. AAD(AzureActiveDirectory)にアプリの登録
  2. 登録したアプリでトークンを許可
  3. 登録したアプリにAPIManagerを管理するRoleを割り当てる
  4. Advanced REST Client に取得したTOKENを載せて、APIManagerを操作する通信を送りこむ

1. AAD(AzureActiveDirectory)にアプリを登録する

 ※まず、前提としてAADでアプリ登録に関連する操作の為には管理者権限が必要です。
 一部の操作ができない場合、その多くは権限の問題であることが多いです。

最初にAADを表示します。
Azureにアクセスし、Portal画面左のメニューバーからAzureActiveDirectoryを選びます。
下の画像でいうと、下から三つ目がAADです。
 無題.png

AADにアプリを登録する理由はMSDNに記載されています。
基本的には、プログラムからAzureResourceを操作するためにAzureのGetewayである
AADにアプリを登録しておく程度の理解で大きな問題は起きません。

次に、AADのApp registrationsを選択し、新規登録を選択します。
image.png

登録画面がでてくるので、スコープとトークンの返答先を以下の画像の通り登録します。
各登録内容の詳細はこちら

image.png

2. 登録したアプリでトークンから取得することを許可

アプリの登録が完了したので、認証の通信をおこなった後トークンが取得できるように設定をしていきます。
[AAD] > [App Registration] > [登録したアプリ(testRegistration)]
を選択し、サイドバーに表示されている認証を選択し、アクセストークンにチェックを入れて保存します。
image.png
image.png

これで、認証成功時にアクセストークンがレスポンスされるようになりました。

3. 登録したアプリにAPIManagerを管理するRoleを割り当てる

次に、取得したアクセストークンでAzureAPIManagementを操作できるように認可の設定をしていきます。
具体的にはRoleを割り当てます。

以下の通り進みます。
[すべてのサービス] > [サブスクリプション]
image.png

サブスクリプションを選択して、サイドバーの [アクセス制御(IAM)]  を選択。
そこでAddします。
今回は、AzureAPIManagement を管理するRoleのみを割り当てたいため、__API Management Service Contributor__を選択します。
割り当てるのは先ほど作成したアプリ(testRegistration)です。

4. Advanced REST Client に取得したTOKENを載せて、APIManagerを操作する通信を送りこむ

今までの手順で認証に必要な資材が整いました。
ここからは、HTTPでAzureのGateway(AAD)からアクセストークンを取得するために必要な情報を揃えていきます。

必要なものは3つです。
ここの名前が本当にわかりずらいです。混乱しやすいので軽くまとめてみました。

1.ClientId : AADで登録したアプリの ApplicationID
2.ClientSecret : AADで登録する(あとで説明)
3.TenantId : ディレクトリID

いや、なんで名前こんな違うねん…まじで:kissing:

それぞれの取得方法
ClientID & TenantedId
 :[AAD] > [App Registrations] > [登録したアプリ] > [概要(overview)]
  左側をみれば、アプリケーションIDとテナントIDの記載があり、文字列が表示されています。
  取得してください。
image.png

ClientSecret
 :[AAD] > [App Registrations] > [登録したアプリ] > [証明書とシークレット]
  ここでクライアントシークレットで、新しいクライアントシークレットを選択。
image.png

  説明とシークレットの有効期限を選択して追加。
image.png

  追加を選択するとクライアントシークレットに新しい列が追加されます。
  この時しか表示されないので、確実に保存してください。(黄色い部分)
image.png

これで、トークンを取得するために必要な情報がそろいました。
ではRequestURIですが、[AAD] > [App Registrations] > [登録したアプリ] から取得します。
アプリを選択して、エンドポイントを参照してください。
image.png

今回は
 https://login.microsoftonline.com/[tenantedId]/oauth2/token
を使用します。
(上記エンドポイントから取得するとテナントIDは自動で入力されています)

Token取得用のPostRequest
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 
【Header】
Content-Type : application/x-www-form-urlencoded

【Body】
grant_type : client_credentials
resource : https://management.core.windows.net/
client_id : [client_id]
client_secret : [client_secret]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
※今回はAzure操作をしたいのでresourceにhttps://management.core.windows.net/を入力

PostRequest を以下の通り入力していきます。
HeaderとBodyの入力が完了したら、Sendします。
正確に入力できていれば、Httpstatus200が返却され、access_tokenが返ってきているはずです。
※Bodyを自動的にエンコードしてくれないツールを使用する場合はBodyを以下のように記載ください。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
grant_type=client_credentials
&resource=https://management.core.windows.net/
&client_id=[client_id]
&client_secret=[client_secret]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

image.png
無題.png

次に、取得したアクセストークンを基にAzureResourceを操作します。
今回はAzureAPIManagementにGroupを追加します。
以下の手順に従って、Requestを作成します。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
URI
 https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/groups/{groupId}?api-version=2019-01-01

Header
 Authorization : Bearer [access_token]

Body
properties.displayName : グループ名を書く
properties.description : 適当にグループの説明を書く
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
※BodyをJsonにする場合以下の通り記載ください。
{
"properties.displayName":"グループ名"
,"properties.description":"テスト用のグループです"
}
 
上記の通り、通信内容を記載するとAPIManagementにGroupが追加されるのを確認できるはずです。
※この際、HeaderでAuthorizationの値でAccess_tokenを記載するまえに**「Bearer」**と入力するのを忘れると認証できません。はまっている人が多いので注意です。
image.png

以上、RestでAPIManagementを操作する方法でした。
WebAppsから操作したい場合、ほかの設定が必要なのでDOCSを確認してください。
また、今回コードからトークンを取得しませんでしたが、公式てきには先にコードを取得する必要があります。
これも、DOCSを確認してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?