AppStream2.0 インターネット経由でインストールできないアプリをS3経由でインストールする

2020.05.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AppStream 2.0入門ガイドでは、インストールするアプリケーションはインターネットから取得してきていました。ですが実際にAppStreamを利用する際には、配信したいアプリケーションがインターネット公開できるものばかりとは限りません。ということで今回はS3バケット上にインストーラーを置いて、そこからインストールしてみました。

やること概要

S3バケットにインストーラーを置いて、あとはImageBuilderインスタンスからS3にアクセスできるように権限設定をすれば良いです。ざっと以下のことが必要になります。

  • S3バケットを作成・インストーラーアップロード
  • IAMポリシー作成
  • IAMロール作成
  • ImageBuilder作成・接続
  • S3からインストーラー取得
  • インストール

それでは細かく見ていきましょう。

1) S3バケットを作成・インストーラーアップロード

ここで設定を間違えると全世界にバケット公開、みたいなことにもなり得るので注意しましょう。
デフォルトの設定のまま「ブロックパブリックアクセスのバケット設定で「パブリックアクセスをすべてブロック」のままにしておきましょう。

次にインストーラーをアップロードします。

上記画面で右下「次へ」を選ぶと色々と詳細設定ができますが、今回は特に必要ないので左下「アップロード」をクリックでOKです。

2) IAMポリシー作成

ImageBuilderにアタッチするIAMロール、そのIAMロールにアタッチするIAMポリシーを作成します。

  1. IAMポリシー作成画面に移動します。
  2. JSONタブを選択して、ポリシーを記述します。 今回はS3バケットからオブジェクトを取得するだけなので、以下権限だけあればOKです。(バケット名)のところは置き換えてください。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::(バケット名)/*"
            }
        ]
    }

3) IAMロール作成

ImageBuilderにアタッチするIAMロールを作成します。

  1. IAMロール作成画面に移動します。
  2. 最初の画面でAppStreamを選択します。
  3. 次の画面で先程作成したIAMポリシーを検索して選択します。

4) ImageBuilder作成・接続

  1. ImageBuilder作成画面に移動します。
  2. 最初のStep 1: Choose Imageは任意のものを選択ください。
  3. 次のStep 2: Configure Image Builderにて、最下部「IAM role (Advanced)」部をクリックして開き、先程作ったIAMロールを選択してください。
  4. Step3では、選択したサブネットがS3のエンドポイントにアクセスできることを確認しておいてください。NAT Gatewayを設置するなどしてインターネットに対してアウトバウンド通信ができる、もしくはS3のVPCエンドポイントを設置しておく必要があります。
  5. Step4を経てLaunchします。
  6. しばらく待つと作成したImageBuilderのStatusがRunningに変わります(右上の更新アイコンで更新してください)。「Connect」ボタンからImageBuilderに接続します。

5) S3からインストーラー取得

  1. Administratorでログイン
  2. Windows Powershellを開きます。
  3. さっそくAWS CLIでインストーラーを取得してみましょう。 AccessDeniedになります。
  4. なんで?先程アタッチしたIAMロール(as2-imagebuilder-role)の権限でコマンド実行しているんじゃないの?と思ったのでaws sts get-caller-identityで確認します。 アレ、PhotonImageBuilderInstanceってナニモノ…
  5. はい。実はアタッチしたロールの権限を使ってコマンド実行したい場合は、明示的にプロファイルを切り替える必要があります。EC2インスタンスと同じ様に勝手にロールの権限使ってくれるのかと思っていたのですが違うようです。切り替え先のプロファイル名はappstream_machine_roleです。ということで再度コマンド実行してみましょう。 取得できました!
  6. (おまけ profile指定したaws sts get-caller-identity結果)

6) インストール

あとは通常の流れに沿って進めてください。

参考情報