IAM ロールを使用して AppStream 2.0 ストリーミングインスタンスで実行されるアプリケーションとスクリプトにアクセス許可を付与する - Amazon AppStream 2.0

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

IAM ロールを使用して AppStream 2.0 ストリーミングインスタンスで実行されるアプリケーションとスクリプトにアクセス許可を付与する

AppStream 2.0 ストリーミングインスタンスで実行されるアプリケーションとスクリプトは、 AWS API リクエストに AWS 認証情報を含める必要があります。IAM ロールを作成して、これらの認証情報を管理できます。IAM ロールは、 AWS リソースへのアクセスに使用できる一連のアクセス許可を指定します。ただし、このロールは 1 人のユーザーに一意に関連付けられるわけではありません。代わりに、それを必要とするすべてのユーザーが引き受けることができます。

IAM ロールは AppStream 2.0 ストリーミングインスタンスに適用できます。ストリーミングインスタンスがロールに切り替える (引き受ける) と、ロールは一時的なセキュリティ認証情報を提供します。アプリケーションまたはスクリプトは、これらの認証情報を使用して、ストリーミングインスタンスで API アクションおよび管理タスクを実行します。 AppStream 2.0 は、一時的な認証情報スイッチを管理します。

AppStream 2.0 ストリーミングインスタンスで IAM ロールを使用するためのベストプラクティス

AppStream 2.0 ストリーミングインスタンスで IAM ロールを使用する場合は、次のプラクティスに従うことをお勧めします。

  • AWS API アクションとリソースに付与するアクセス許可を制限します。

    2. AppStream 0 ストリーミングインスタンスに関連付けられた IAM ロールに IAM ポリシーを作成してアタッチするときは、最小特権の原則に従います。 AWS API アクションまたはリソースへのアクセスを必要とするアプリケーションまたはスクリプトを使用する場合は、必要な特定のアクションとリソースを決定します。次に、アプリケーションまたはスクリプトがこれらのアクションのみを実行できるようにするポリシーを作成します。詳細については、「IAM ユーザーガイド」「Grant Least Privilege」(最小権限を付与する) を参照してください。

  • AppStream 2.0 リソースごとに IAM ロールを作成します。

    AppStream 2.0 リソースごとに一意の IAM ロールを作成することは、最小特権の原則に従うプラクティスです。これにより、他のリソースに影響を与えることなく、リソースのアクセス許可を変更することもできます。

  • 認証情報を使用できる場所を制限します。

    IAM ポリシーでは、IAM ロールを使用してリソースにアクセスするための条件を定義できます。たとえば、リクエスト元の IP アドレスの範囲を指定する条件を含めることができます。これにより、認証情報が環境外で使用されなくなります。詳細については、IAM ユーザーガイドの「追加セキュリティに対するポリシー条件を使用する」を参照してください。

AppStream 2.0 ストリーミングインスタンスで使用する既存の IAM ロールの設定

このトピックでは、Image Builder およびフリートストリーミングインスタンスで使用できるように、既存の IAM ロールを設定する方法について説明します。

前提条件

AppStream 2.0 Image Builder またはフリートストリーミングインスタンスで使用する IAM ロールは、次の前提条件を満たす必要があります。

  • IAM ロールは、 AppStream 2.0 ストリーミングインスタンスと同じ Amazon Web Services アカウントに存在する必要があります。

  • IAM ロールをサービスロールにすることはできません。

  • IAM ロールにアタッチされている信頼関係ポリシーには、プリンシパルとして AppStream 2.0 サービスが含まれている必要があります。プリンシパルは、アクションを実行してリソースにアクセスできる AWS のエンティティです。ポリシーには sts:AssumeRole アクションも含める必要があります。このポリシー設定では、 AppStream 2.0 を信頼されたエンティティとして定義します。

  • IAM ロールを Image Builder に適用する場合、Image Builder は AppStream 2019 年 9 月 3 日以降にリリースされた 2.0 エージェントのバージョンを実行する必要があります。IAM ロールをフリートに適用する場合、フリートは同じ日付以降にリリースされたバージョンのエージェントを使用するイメージを使用する必要があります。詳細については、「AppStream 2.0 エージェントリリースノート」を参照してください。

AppStream 2.0 サービスプリンシパルが既存の IAM ロールを引き受けるようにするには

以下のステップを実行するには、IAM ロールを一覧表示および更新するために必要なアクセス許可を持つ IAM ユーザーとしてアカウントにサインインする必要があります。必要なアクセス許可がない場合は、お客様の Amazon Web Services アカウント管理者に対し、アカウントでこれらのステップを実行するか、必要なアクセス許可をお客様に付与するかのどちらかを依頼します。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで Roles (ロール) を選択します。

  3. アカウントのロールの一覧で、変更するロールの名前を選択します。

  4. [Trust relationships] タブを選択し、続いて [Edit trust relationship] を選択します。

  5. [Policy Document (ポリシードキュメント)]で、信頼関係ポリシーに appstream.amazonaws.com サービスプリンシパルの sts:AssumeRole アクションが含まれていることを確認します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "appstream.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  6. 信頼ポリシーの編集を完了したら、[信頼ポリシーの更新] を選択して変更を保存します。

  7. 選択した IAM ロールが AppStream 2.0 コンソールに表示されます。このロールは、ストリーミングインスタンスで API アクションおよび管理タスクを実行するアクセス許可をアプリケーションとスクリプトに付与します。

AppStream 2.0 ストリーミングインスタンスで使用する IAM ロールを作成する方法

このトピックでは、Image Builder およびフリートストリーミングインスタンスで使用できるように、新しい IAM ロールを作成する方法について説明します。

  1. https://console.aws.amazon.com/iam/IAMコンソールを開きます。

  2. ナビゲーションペインで [Roles] (ロール) を選択してから、[Create role] (ロールを作成する) を選択します。

  3. 信頼できるエンティティの種類の選択 で、AWS サービス を選択します。

  4. AWS サービスのリストから AppStream 2.0 を選択します。

  5. ユースケースの選択 AppStream 2.0 — AppStream 2.0 インスタンスがユーザーに代わって AWS サービスを呼び出せるようにします[Next: Permissions] (次のステップ: 許可) を選択します。

  6. 可能な場合は、アクセス許可ポリシーとして使用するポリシーを選択するか、[ポリシーの作成] を選択して新しいブラウザタブを開き、新しいポリシーをゼロから作成します。詳細については、IAM ユーザーガイドの「IAM ポリシーの作成 (コンソール)」のステップ 4 を参照してください。

    ポリシーを作成したら、そのタブを閉じて元のタブに戻ります。 AppStream 2.0 に付与するアクセス許可ポリシーの横にあるチェックボックスをオンにします。

  7. (オプション) アクセス許可の境界を設定します。このアドバンスド機能は、サービスロールで使用できますが、サービスにリンクされたロールではありません。詳細については、IAM ユーザーガイドの「IAM エンティティのアクセス許可境界」を参照してください。

  8. [Next: Tags] (次へ: タグ) を選択します。オプションで、タグをキーと値のペアとしてアタッチできます。詳細については、IAM ユーザーガイドの「IAM リソースのタグ付け」を参照してください。

  9. [次へ: レビュー] を選択します。

  10. [Role name] (ロール名) に、Amazon Web Services アカウント内で一意のロール名を入力します。他の AWS リソースはロールを参照する可能性があるため、ロールの作成後にロールの名前を編集することはできません。

  11. [ロールの説明] に、デフォルトのロールの説明をそのまま使用するか、新しいロールの説明を入力します。

  12. ロールを確認したら、[Create role] (ロールを作成) を選択します。

AppStream 2.0 ストリーミングインスタンスで IAM ロールを使用する方法

IAM ロールを作成したら、Image Builder を起動するとき、またはフリートを作成するときに、そのロールを Image Builder またはフリートストリーミングインスタンスに適用できます。既存のフリートに IAM ロールを適用することもできます。Image Builder を起動するときに IAM ロールを適用する方法については、Image Builder を起動し、ストリーミングアプリケーションをインストールして設定する を参照してください。フリートを作成するときに IAM ロールを適用する方法については、フリートを作成する を参照してください。

Image Builder またはフリートストリーミングインスタンスに IAM ロールを適用すると、 AppStream 2.0 は一時的な認証情報を取得し、インスタンスに appstream_machine_role 認証情報プロファイルを作成します。一時的な認証情報は 1 時間有効で、新しい認証情報は 1 時間ごとに取得されます。以前の認証情報は失効しないため、有効である限り使用できます。認証情報プロファイルを使用して、 AWS 選択した言語で コマンドラインインターフェイス (AWS CLI)、 AWS Tools for PowerShell、または AWS SDK を使用してプログラムで AWS サービスを呼び出すことができます。

API コールを行う場合、認証情報プロファイルとして appstream_machine_role を指定します。それ以外の場合、アクセス許可が不十分なため、オペレーションは失敗します。

AppStream 2.0 は、ストリーミングインスタンスのプロビジョニング中に指定されたロールを引き受けます。 AppStream 2.0 では、 AWS API コール用に VPC にアタッチされている Elastic Network Interface が使用されるため、アプリケーションまたはスクリプトは、 AWS API コールを行う前に Elastic Network Interface が使用可能になるまで待機する必要があります。Elastic Network Interface が使用可能になる前に API 呼び出しが行われると、呼び出しは失敗します。

以下の例では、appstream_machine_role 認証情報プロファイルを使用して、ストリーミングインスタンス (EC2 インスタンス) を記述し、Boto クライアントを作成する方法を示します。Boto は、Amazon Web Services (AWS) SDK for Python です。

AWS CLI を使用してストリーミングインスタンス (EC2 インスタンス) を記述する

aws ec2 describe-instances --region us-east-1 --profile appstream_machine_role

の AWS ツールを使用してストリーミングインスタンス (EC2 インスタンス) を記述する PowerShell

AWS Tools for PowerShell バージョン 3.3.563.1 以降、Amazon Web Services SDK for .NET バージョン 3.3.103.22 以降を使用する必要があります。 AWS Tools for PowerShell および Amazon Web Services SDK for .NET を含む AWS Tools for Windows インストーラーは、 AWS Tools for PowerShell ウェブサイトからダウンロードできます。

Get-EC2Instance -Region us-east-1 -ProfileName appstream_machine_role

AWS SDK for Python を使用した Boto クライアントの作成

session = boto3.Session(profile_name='appstream_machine_role')