サービス アカウントを使用して、サードパーティ アプリケーションによる VMware Cloud Director へのアクセスを自動化できます。

共有

VMware Cloud Director 10.4.1 以降で、ユーザーに表示されるサービス アカウント情報を制限する場合は、制限付きのサービス アカウント ビュー権限を特定のロールにのみ付与できます。制限付きのサービス アカウント ビュー権限を持つユーザーがサービス アカウントに対して GET 要求を実行すると、応答には、サービス アカウントの softwareIdsoftwareVersionuri、および statusnull として表示されます。

実装

VMware Cloud Director への自動アクセスを提供するために、サービス アカウントでは API トークンを使用します。サービス アカウントは、API ベースのアクセスのみを対象としています。サービス アカウントにアクセス権を付与すると、認証されたクライアント アプリケーションは OAuth 更新トークンである API トークンと、最初の VMware Cloud Director セッションを表すアクセス トークンを受け取ってすぐに使用します。アプリケーションには、VMware Cloud Director での認証用の API トークンが必要です。アクセス トークンは、アプリケーションがサービス アカウントを使用して API 要求を行う際に使用する VMware Cloud Director セッション トークン(JWT トークン)です。アプリケーションのサービス アカウントでは API トークンを使用するため、VMware Cloud Director のユーザー API トークンと同じ制限が適用されます。

サービス アカウントには、「サービス アカウント認証の要求」を使用してアクセス権が付与されます。これにより、トークンを使用する必要があるアプリケーションにのみトークンへのアクセス権が付与され、トークンを使用できるようになります。他のアクターはトークンにアクセスできません。管理者はサービス アカウントに対するアクセス権を管理します。ただし、管理者であっても、アクセス権を付与する実際のトークンにアクセスすることはできません。VMware Cloud Director ではサービス アカウントにトークンのみを提供します。そのために、VMware Cloud Director では既知の標準を使用します。管理者および管理者がトークンを付与するアプリケーションが、付与とトークンの転送を通じて同期されていることを確認するために、アプリケーションのユーザー コードを把握していれば API トークン付与プロセスを開始できます。

ユーザー API トークンとは異なり、サービス アカウントに付与される API トークンは、RFC 6749 セクション 6 に従って、使用するたびにローテーションされます。未使用のサービス アカウントの API トークンは、取り消さない限り期限切れになることはありません。

サービス アカウントに割り当てることができるロールは 1 つのみです。OAuth 準拠の API では、ロールは範囲フィールドを介して、そのロールの名前を含む URL エンコードされた Uniform Resource Name (URN) として伝達されます。URN の形式は urn:vcloud:role:[roleName] です。URN エンコーディングについては、RFC 8141 を参照してください。

注: デバイス エンドポイントは認証されていません。ロード バランサで特別なスロットリング ルールを構成することを検討してください。
表 1. サービス アカウントのステータス
ステータス 説明
作成済み アカウントは作成後に初期状態になります。
要求済み 要求者がデバイス認証要求を使用して開始したアクセスに対する未処理の要求が 1 つ以上あります。
付与済み 管理者が未処理の要求を付与し、サービス アカウントのポーリングと API トークンの取得を待機しています。
アクティブ サービス アカウントが API トークンを取得し、そのトークンを使用して VMware Cloud Director にアクセスできます。

制限

サービス アカウントの使用はサードパーティ アプリケーションを対象としているため、サービス アカウントにはいくつかの制限があります。

サービス アカウントを使用している場合、アプリケーションは次に示す特定のタスクを実行できません。
  • ユーザー管理タスクの実行
  • API トークンの作成
  • 他のサービス アカウントの管理
サービス アカウントを使用して VMware Cloud Director にアクセスするアプリケーションには、次のリソースの表示権限のみがあります。
  • ユーザー
  • グループ
  • ロール
  • グローバル ロール
  • 権限バンドル
サービス アカウントを使用して VMware Cloud Director にアクセスするアプリケーションには、次の権限がありません。
  • トークン:管理
  • トークン:すべての管理

マルチサイト

VMware Cloud Director 10.4.1 以降では、サービス アカウントはマルチサイト機能を使用して、地理的に分散された複数の VMware Cloud Director インストール環境またはサーバ グループとその組織を単一エンティティとして管理および監視できます。詳細についてはマルチサイト展開の構成と管理を参照してください。サービス アカウントが、認証の対象となる組織とは異なる組織に要求を行う場合は、サービス アカウントが関連付けられた組織に存在し、同じ名前とソフトウェア ID を保持していることを確認します。要求を満たす必要がある組織の名前を指定する X-VMWARE-VCLOUD-AUTH-CONTEXT ヘッダーも含める必要があります。マルチサイト デプロイの構成および管理の詳細については、VMware Cloud Director API プログラミング ガイドを参照してください。

サービス アカウントの作成

Service Provider Admin Portalを使用して、VMware Cloud Director への自動アクセス用のアカウントを作成できます。

手順

  1. 上部ナビゲーション バーで [管理] を選択します。
  2. 左側のパネルの [プロバイダ アクセス コントロール] で、[サービス アカウント] を選択します。
  3. [新規] をクリックします。
  4. サービス アカウントの名前を入力します。
  5. [ロールの割り当て] ドロップダウン メニューでサービス アカウントのロールを選択します。
    使用可能なロールのリストは、ローカル システムの組織ロールで構成されています。サービス アカウントがテナント組織に含まれる場合は、テナントのローカル ロールに加えて、組織に公開されるグローバル ロールも含まれます。
  6. サービス アカウントのソフトウェア ID を入力するか、[ソフトウェア ID の生成] ボタンを使用して ID を生成し、入力します。

    サービス アカウントには、ソフトウェア ID(VMware Cloud Director に接続しているソフトウェアを表す UUID 形式の一意の識別子)が必要です。この ID は、ソフトウェアのすべてのバージョンとインスタンスで同一です。

    より大規模なソリューションの場合は、サービス アカウントの ID の制御を維持するために、[ソフトウェア ID の生成] オプションを使用せず、独自のソフトウェア ID を生成します。

  7. (オプション) サービス アカウントを使用して、システムのソフトウェア バージョンを入力します。
    ソフトウェア バージョンは、サービス アカウントに関連付けられているメタデータの、ベンダーが指定したオプションの情報です。ソフトウェアの一部がいつ変更されたのか追跡するために、 VMware Cloud Director ではソフトウェア バージョンを使用します。ソフトウェア バージョンは、サービス アカウントの特定に役立つ場合があります。
  8. (オプション) クライアント URI を入力します。
    クライアントの Uniform Resource Identifier (URI) は、ベンダーの Web ページの URL であり、クライアントに関する情報を提供します。
  9. [次へ] をクリックします。
  10. (オプション) サービス アカウントで管理するリソースに割り当てを追加します。
    これらの割り当てにより、サービス アカウントがストレージおよびコンピューティング リソースを使用する能力が制限されます。
  11. サービス アカウントの情報を確認し、[完了] をクリックします。

結果

サービス アカウントが [サービス アカウント] 画面に Created というステータスで表示されます。

VMware Cloud Director API を使用してサービス アカウントを作成することもできます。API 要求では、ユーザー API トークンの作成時と同じ API エンドポイントが使用されますが、software_id フィールドがある場合は、サービス アカウントを作成する目的が示されます。

要求の例:
POST /oauth/provider/register 

Accept:application/json

Content-Type:application/json

Authorization:Bearer eyJhbGciOiJSUzI...7g7rA 

Body: { 

    "client_name": "exampleServiceAccount", 

    "software_id": "bc2528fd-35c4-44e5-a55d-62e5c4bd9c99", 

    "scope": "urn:vcloud:role:System%20Administrator", 

    "client_uri": "https://www.companyname.com", 

    "software_version": "1.0" 

} 
応答の例:
{ 

"client_name": "exampleServiceAccount", 

"client_id": "734e3845-1573-4f07-9b6c-b493c9042187", 

"grant_types": [ 

"urn:ietf:params:oauth:grant-type:device_code" 

], 

"token_endpoint_auth_method": "none", 

"client_uri": "https://www.company_name.com", 

"software_id": "bc2528fd-35c4-44e5-a55d-62e5c4bd9c99", 

"software_version": "1.0", 

"scope": "urn:vcloud:role:System%20Administrator" 

} 

次のタスク

サービス アカウントの詳細に表示されるクライアント ID をコピーします。サービス アカウントにアクセス権を付与するには、クライアント ID を使用する必要があります。

サービス アカウントへのアクセス権の付与

サービス アカウントを作成した後に、アプリケーションがアクセス トークンを受け取るための認証を要求した場合は、VMware Cloud Director Service Provider Admin Portalを使用してトークンを付与できます。

注: この手順の途中でタイムアウト期間が終了すると、 Service Provider Admin Portalのサービス アカウントのステータスが Created に戻り、手順を再度開始する必要があります。

前提条件

  1. Service Provider Admin Portalのサービス アカウントの詳細からクライアント ID をコピーします。
  2. アカウントを要求しているアプリケーションが https://site.cloud.example.com/oauth/provider/device_authorization API エンドポイントに OAuth 2.0 Device Authorization Grant RFC 準拠の要求を行っていることを確認します。デバイス認証要求の詳細については、RFC 8628 セクション 3.1を参照してください。
    キー
    client_ID Generated_Client_ID

    アプリケーションからアクセスが要求された場合、Service Provider Admin Portalのサービス アカウントのステータスは Requested に変化します。アプリケーションは、デバイス コード、ユーザー コード、およびいくつかの追加情報を受け取ります。

    要求の例:
    POST /oauth/provider/device_authorization
    Accept:application/json 
    Content-Type: application/x-www-form-urlencoded
    Body:
    client_id=734e3845-1573-4f07-9b6c-b493c9042187
    応答の例:
    {
    "device_code": "tkhZ0uoUMy5xgjJqRJblIq3-g44xy2Ms6TEpv3Z_fKw",
    "user_code": "3VL8-SQVJ",
    "verification_uri": "https://[VCD]/provider/administration/access-control/service-accounts",
    "expires_in": 3600,
    "interval": 60
    }

    デバイスでは、RFC に従って、上記の応答 /oauth/provider/token で指定された頻度(秒単位)でポーリングを実行する必要があります。デバイスでは、VMware Cloud Director からトークンを受け取るまで、または要求がタイムアウトになるまで、デバイス コードを使用する必要があります。

    要求の例:
    POST: /oauth/provider/token
    Accept:application/json 
    Content-Type: application/x-www-form-urlencoded
    Body:
    client_id= 734e3845-1573-4f07-9b6c-b493c9042187&grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code&device_code=tkhZ0uoUMy5xgjJqRJblIq3-g44xy2Ms6TEpv3Z_fKw
    付与前の応答の例:
    {
        "error": "authorization_pending",
        "error_description": "Device authorization request pending",
        "error_uri": null,
        "minorErrorCode": "authorization_pending",
        "message": "Device authorization request pending",
        "stackTrace": null
    }
    付与後の応答の例:
    {
        "access_token": "eyJhbGciOiJSU…HqJaDud1sVA",
        "token_type": "Bearer",
        "expires_in": 2592000,
        "refresh_token": "SsybukUed8SBP2p1AaFiGJhrntQNWZVX"
    }

    アクセス要求の確認または拒否をしなかった場合、ユーザー コードがタイムアウトになります。タイムアウト期間は、デバイス認証要求の応答に表示されます。

    VMware Cloud Director では、アプリケーションと管理者が相互に対応するデバイス コードとユーザー コードを使用する場合にのみ、アプリケーションにプライマリ API トークンを付与します。

  3. アプリケーションからユーザー コードを取得します。手順 4 でこのコードを入力する必要があります。

手順

  1. 上部ナビゲーション バーで [管理] を選択します。
  2. 左側のパネルの [プロバイダ アクセス コントロール] で、[サービス アカウント] を選択します。
  3. [アクセス要求の確認] をクリックします。
  4. 前提条件 3 で取得したアプリケーションのユーザー コードを入力し、[検索] をクリックして、要求されたアクセスの詳細を確認します。
  5. アプリケーションにアクセス権を付与します。
    アプリケーションへのアクセスを拒否すると、 Service Provider Admin Portalのサービス アカウントのステータスが Created に戻ります。

結果

サービス要求のステータスが Granted に変化します。VMware Cloud Director では、サービス アカウントにリンクされているアプリケーションに、API トークンの形式でプライマリ API トークンを付与します。RFC の規定により、応答に含まれるのは、サービス アカウントがすぐに使用できる、ユーザー セッションを表す OAuth アクセス トークンです。アプリケーションで OAuth アクセス トークンをすぐに使用しない場合、構成されたアイドル セッション タイムアウトに従ってセッションがタイムアウトになります。サービス アカウントが明示的にログアウトする場合もあります。これが推奨されるのは、セキュリティ上の理由のほか、サービス アカウントが VMware Cloud Director に対する API 呼び出しを行うために適したテスト実行を提供するためです。アプリケーションが API トークンを取得すると、ステータスは Active に変化します。

次のタスク

  • 割り当てられたサービス アカウント ロール、ソフトウェア ID、ソフトウェア バージョン、クライアント URI、または割り当ての制限を変更するには、サービス アカウントを選択して、[サービス アカウントの編集] をクリックします。変更は次回のトークン更新時に有効になります。
  • サービス アカウントに対するアクセス権を取り消して、付与された API トークンを無効にするには、[更新] をクリックします。VMware Cloud Director は、すべてのアクティブなセッションを終了します。API トークンを取り消してもサービス アカウントは削除されませんが、アカウントのステータスは Created に変化します。アプリケーションがすでに再度アクセスを要求している場合、サービス アカウントのステータスは Requested に変化します。サービス アカウントのステータスを Active にするには、この手順を再度実行してサービス アカウントにアクセス権を付与する必要があります。