[アップデート] AWS Amplify で SSR コンピューティングサービスに IAM ロールを付与できるようになりました

[アップデート] AWS Amplify で SSR コンピューティングサービスに IAM ロールを付与できるようになりました

Clock Icon2025.02.20

いわさです。

AWS Amplify は SSR フレームワークをサポートしています。
従来 Amplify の SSR 向けには CloudWatch Logs を出力するための IAM サービスロールの概念はあったのですが、サーバーサイドでレンダリングされる際にサービスロールのような形で IAM ロールを使ってポリシーを設定することは出来ませんでした。

先日のアップデートで新たに「コンピューティングロール」の機能が追加され、SSR が実行されるコンピューティングサービスに IAM ロールを割り当てることができるようになりました。

https://aws.amazon.com/about-aws/whats-new/2025/02/amplify-hosting-iam-roles-ssr-applications/

これによって他の AWS マネージドサービスと同様に、コンピューティング側で取得済みのクレデンシャルをアプリケーションコードが使えるようになり、SSR のために独自でクレデンシャルの取得や設定を行わなくても良くなります。

使い方については AWS 公式ブログでも紹介されているのですが、Amplify コンソール周りの設定方法などもう少しいくつか確認したかった点があったので試してみることにしました。
基本的なアプリケーションコードは以下のブログ記事を踏襲しています。

https://aws.amazon.com/blogs/mobile/iam-compute-roles-for-server-side-rendering-with-aws-amplify-hosting/

上記記事のように S3 に格納されている画像をクライアントコンポーネントでレンダリングさせます。事前に S3 バケットを作成し、適当な画像を格納済みです。

S3_バケット___S3___ap-northeast-1.png

ローカル実行

まずローカルで実行してみます。
画像を表示させようとしても表示されませんでした。

Create_Next_App.png

コンソールのログから Access Denied が発生していることが確認できます。

 ✓ Compiled /api/image in 189ms (649 modules)
[S3 Image Request] Starting - Bucket: hoge0220amplify, Key: hoge.png
[S3 Image Request] Creating GetObjectCommand...
[S3 Image Request] Sending request to S3...
[S3 Image Request] AWS S3 Error: {
  message: 'Access Denied',
  code: 'AccessDenied',
  requestId: '45X3BVZQ8X3RC9RK',
  statusCode: 403
}
[S3 Image Request] Request completed
 GET /api/image 500 in 599ms

Amplify デプロイしてサーバー実行

続いてこのアプリケーションを Git リポジトリにプッシュし、Amplify の Git 連携機能で新規アプリケーションとして作成します。
まず、新規アプリケーション作成時には今回追加されたコンピューティングロールを指す項目はありませんでした。アプリケーション作成時に指定できるのは従来どおりのログ用のロールのみみたいです。

7BC019E8-CBBF-4396-B696-367255FC0890.png

この時点で一度アプリケーションを Amplify Hosting 経由で実行してみますが、当然ながら S3 のオブジェクトにはアクセスすることが出来ません。

2514576A-1201-4B16-93E3-76E844487EC6.png

モニタリングメニューから SSR コンピューティングが出力するログを確認することが出来ます。
こちらを見てみましょう。

D5860E2A-8D88-4570-BA18-45296FA06200.png

クレデンシャルの取得が出来ていないですね。SSR の権限周りでうまくいかない場合はこのあたりのログをチェックするとトラブルシューティングが出来そうですね。

[S3 Image Request] Unexpected error: Error [CredentialsProviderError]: Could not load credentials from any providers

4CDE9DE5-B29C-4CDF-B9D0-3E26366D3335.png

コンピューティングロールを設定

今回のアップデートで次のメニューが追加されています。
サービスロールの概念は前からありましたが IAM ロールのメニューはありませんでしたね。
そしてその中にコンピューティングロールのエリアが用意されています。これか。

8518866A-5178-4719-A837-B6435BE95DFC.png

ここで設定できるロールですが、amplify.amazonaws.comサービスを信頼してsts:AssumeRoleさせれる必要があります。
上記を手動で設定するか信頼されたエンティティタイプで Amplify を選択しましょう。

3624B789-301F-46AA-8642-398B5E177F24.png

コンピューティングロールですが、全てのブランチがデフォルトで使用するロールを基本的に使うことが出来ますが、ブランチごとにその設定を無視して別のコンピューティングロールを使うことも出来ます。
本番・ステージングの権限分離とか、うまくコントロールできそうです。

C02D069D-1342-4C5A-9CF5-003E89615129.png

なお、全ての IAM ロールが選択肢として表示されるのですが前述のとおり Amplify を信頼したロール以外は次のようにエラーとなります。

The compute role provided cannot be assumed by Amplify. Please verify the role exists and has the correct trust relationship.

B1B6301C-B42F-437F-A186-F02A6D5FD19E.png

以下の状態で IAM ロールの設定が保存されている状態です。

CD4C334D-0CA6-45D4-BFE6-7F538F58FC5D.png

ロールの更新をアプリケーションへ反映させるために特に再起動などのステップはないので、このまま先ほどのアプリケーション上でリロードしてみます。

06F1D237-BE01-43D7-99A4-9D67511AA4FD.png

次は SSR の処理で S3 バケットに無事アクセスすることが出来ました。

さいごに

本日は AWS Amplify で SSR コンピューティングサービスに IAM ロールを付与できるようになったので試してみました。

これは地味に嬉しいですね。
SSR が前提であれば今後は基本的に必須な機能になるのではないでしょうか。やむを得ずアクセスキーの利用をしていた方などは是非こちらを試してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.