Citrix Cloud実践シリーズでは、Citrix Cloudの導入や検証において、よくお問い合わせを頂く技術ポイントを中心に説明して行きたいと思います。

XenAppおよびXenDesktop ServiceのホストとしてAzure Resource Managerを登録する際に、Azureサブスクリプションに対しての権限を持つユーザーに、あらかじめサービスプリンシパルを作成して頂くと作業がスムーズな場合があります。

今回はXenAppおよびXenDesktop ServiceのホストとしてAzure Resource Managerを登録する方法と必要な権限について具体的に紹介します。


サービスプリンシパルとは

Windows Active Directory(以下AD)におけるサービスアカウント同様、特定のアプリケーションやサービスが利用する特殊アカウントに相当するものです。

Citrix Studioは「共同作成者」権限を持つサービスプリンシパルを使い、サブスクリプションに紐づくAzure領域にアクセスし、マシンの電源管理や生成などを行います。ADでアカウントを作成するのと同様に、誰でもサービスプリンシパルを作成する事はできません。サブスクリプションに対する共同管理者(所有者)権限が必要です。

サブスクリプションとは

XenAppおよびXenDesktop ServiceではAzure Resource Managerをリソースロケーションとして使用する場合、サブスクリプションに紐づく、Azueの領域を使用します。XenAppおよびXenDesktop Serviceは複数のサブスクリプションを紐づけることも可能です。後半にAzureサブスクリプションの考えたを少しご紹介致します。


Citrix StudioからAzure Resource Managerのサブスクリプションを登録する

XenAppおよびXenDesktop ServiceのコンソールからからAzure Resource Managerのサブスクリプションを登録するには、大きく2つの方法があります。

1. ウィザードから共同管理者アカウントでAzure Resource Managerへ認証して、自動的にサービスプリンシパルを作成する。そのサービスプリンシパルを使いAzure Resource Managerのサブスクリプションにアクセスする。

この時にスクリプトによってAzure内で必要な権限を持ったサービスプリンシパルが自動的に作成されます。

下記はその際のフローを表したもになります。

2.作成済みのサービスプリンシパルを使いAzure Resource Managerのサブスクリプションにアクセスする。

こちらはウィザードで「Use Existence」を選択する際に既に作成済みのサービスプリンシパルに関連する情報を求められるので、それらを入力することでAzure環境へのログオンなしに、サブスクリプションと接続が確立します。

サービスプリンシパルを作成する際には以下の赤枠の情報を取得します。


サービスプリンシパルの作成手順

ここからはAzure上で必要な権限をもつサービスプリンシパルの作成手順を紹介致します。

  1. Azureポータルにログオンしたら、「Azure Active Directory」のノードの「アプリの登録」「新しいアプリケーションの登録」を選択します。
  2. 「名前」を入力して「Webアプリ/API」を選び、適当な「サインオンURL」を入力します。(ここは適当なURL構いません)
  3. 「アプリケーションID」を確認し、メモ帳等にコピーしておきます。次に「設定」をクリックします。
  4. 次に「キー」を選びます。キーはサービスプリンシパルのパスワードに相当するものです。ここで「説明」と「有効期限」を設定します。
  5. 保存を押すとシークレットキー(パスワード)が生成されるので、メモ帳にコピーしておきます。
  6. 次に左ペインの「すべてのサービス」から「サブスクリプション」を選びます。ここで「サブスクリプションID」をメモ帳にコピーしておきます。
  7. 先程作成したサービスプリンシパルにサブスクリプションに対して適切な権限を与える為に、「アクセス制御(IAM)」を選択します。更に「追加」をクリックし先ほど作成したサービスプリンシパルを検索し設定、「役割」を「共同作成者」にし保存します。
  8. Azure Active Directoryのノードを選択して、プロパティから「ディレクトリーID」を確認してメモ帳にコピーします。
  9. サービスプリンシパルの作成と接続に必要な情報の取得ができました。作業者はAzureに共同管理者(所有者)アカウントでログオンせずとも下記の情報をもって接続の設定を行うことができます。

Azureのサブスクリプションの考え方

サブスクリプションは課金用のコンテナーでもあり1つの管理スコープでもありますが、「セキュリティの境界」としても機能します。このため実際のプロジェクトではリソースロケーション用に専用のサブスクリプションを用意頂くケースが多いです。

今回はサブスクリプション全体にスコープを持つサービスプリンシパルの作成方法を紹介しましたが、サブスクリプション内の特定のリソースにスコープを持つサービスプリンシパルを使用することも可能です。詳しくは下記のブログをご参照ください。

XenApp and XenDesktop における Azure Role Based Access Control の利用

https://citrixblogs.wpengine.com/2017/12/03/xenapp-and-xendesktop-azure-role-based-access-control-jp/


XenApp Essentials場合

XenApp Essentialsをご利用の場合には1つ留意点があります。XenApp EssentialsでもXenAppおよびXenDesktop Service同様サービスプリンシパルを使いAzureのリソースにアクセスします。XenApp Essentialsの管理コンソールからAzureのリソースロケーションを登録する際にサービスプリンシパルを作成しますが、この時、XenApp Essentialsの場合はサブスクリプションに紐づいている所有者権限を持つMicrosoftアカウントでは接続できません。

XenApp Essentialsの場合はサブスクリプションが紐づく、Azure Active Directory上にアカウントを作成して、そのアカウントに対して、Azure Active Directoryに対してはグローバル管理者の権限、更にサブスクリプションに共同管理者(所有者)を権限付与しておく必要があります。

ポイント1:サブスクリプションに紐づくAzure Active Directoryにアカウントを作成

ポイント2:Azure Active Directoryに対してはグローバル管理者の権限を付与

ポイント3:更にAzure Active Directoryに紐づく、サブスクリプションに共同管理者(所有者)を権限付与


よくあるご質問

質問1.

ウィザードでサービスプリンシパルを作成する際に、認証を行った、共同管理者(所有者)アカウントを削除しても大丈夫ですか?

回答1

はい。Azureへのアクセスはサービスプリンシパルを利用します。共同管理者(所有者)アカウントはあくまでもサービスプリンシパルを作成する際に必要なアカウントです。

質問2

サービスプリンシパルにはパスワードはありますか?

回答2

はい、パスワードではありませんが、シークレットキーを使用します。サービスプリンシパルがAzureにアクセスする際にいくつか認証方法がありますが、XenAppおよびXenDesktop Serviceではシークレットキーを使用します。必要に応じて変更してください


まとめ

  • XenAppおよびXenDesktopがAzureのリソースにアクセスする際に、サービスプリンシパルというサービスアカウントを使用します。
  • ウィザードではAzureのホストリソースを登録する際に、サービスプリンシパルを作成します。この時Azureのリソースに紐づくサブスクリプションに対して、共同管理者権限が必要になります。
  • 権限を持つユーザーにあらかじめサービスプリンシパルを用意してもらうことができます。この時はウィザードではサブスクリプション権限をもったユーザーでのログオンは要求されません。

備考

ここではXenAppおよびXenDesktop Serviceとして紹介していますが、製品版のXenAppやXenDesktopでAzureと連携する際も、考え方と手順は変わりません。

※本内容は2018年3月時点の情報に基づくもので今後のサービス仕様変更等により、内容が異なる場合がございますので、あらかじめご了承ください。