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 アクションとリソースに付与するアクセス許可を制限します。

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

  • 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 ストリーミングインスタンスと同じ AWS アカウントに存在する必要があります。

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

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

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

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

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

  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. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. ナビゲーションペインで [Roles] を選択し、続いて [Create role] を選択します。

  3. [Select type of trusted entity (信頼されたエンティティのタイプの選択)] で、[AWS サービス] を選択します。

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

  5. [ユースケースの選択] で、[AppStream 2.0 — Allows AppStream 2.0 instances to call AWS services on your behalf (AppStream 2.0 — AppStream 2.0 インスタンスがお客様に代わって AWS のサービスを呼び出すことを許可)] はすでに選択されています。[Next: Permissions (次へ: アクセス許可)] を選択します。

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

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

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

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

  9. [Next: Review] を選択します。

  10. [ロール名] に、AWS アカウント内で一意のロール名を入力します。他の AWS リソースがロールを参照している場合があるため、作成後はロールの名前を変更できません。

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

  12. ロールを確認し、[ロールの作成] を選択します。

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

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

イメージビルダーまたはフリートストリーミングインスタンスに IAM ロールを適用すると、AppStream 2.0 は一時的な認証情報を取得し、インスタンスに [AppStream_Machine_Role] 認証情報プロファイルを作成します。一時的な認証情報は 6 時間有効で、新しい認証情報は 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 は、アマゾンウェブサービス (AWS)SDK for Python です。

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

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

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

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

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

AWS SDK for Python を使用して Boto クライアントを作成する

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