Amplify FunctionsからIAM認証でAPIを呼ぶ時につまずいた時の対応メモ

技術メモ

今回、こちらの記事を参考にAmplify FunctionsからIAM認証でAPIをたたく実装を試みました。

しかし、実際に開発していく中で以下の2点に関してつまずいたため、その対処法を備忘録として残しておきます。

  1. AppSyncに追加する認証プロバイダー
  2. amplify/backend/api/API名/schema.graphql ファイル内に記載の内容

1. に関して、記事内では、amplify update apiコマンドでAPIに認証プロバイダーを追加するステップがありますが、ここではIAMのみを追加の対象としています。

このままだとエラーが発生するため、Amazon Cognito User Poolも追加する必要がありました。

2. に関して、記事内ではamplify/backend/api/API名/schema.graphqlファイルに以下のように記載するとあります。

type Todo
  @model
  @auth(rules: [
    { allow: private, provider: userPools},
    { allow: private, provider: iam }
  ]){
  id: ID!
  url: String
}

ただし、これだとターミナルでamplify pushコマンド実行時にエラーが発生します。

そのため、Cognitoの未認証ユーザーに対しての権限設定を追加する必要がありました。

type Todo
  @model
  @auth(rules: [
    { allow: public, operations: [read, create, delete, update] } //この行を追加
    { allow: private, provider: userPools},
    { allow: private, provider: iam }
  ]){
  id: ID!
  url: String
}

以上、簡単ですが冒頭の記事を参考にAmplify FunctionsからIAM認証でAPIを呼ぶ処理の実装時につまずいた2点とその対処法の共有でした。

同様の問題でつまずいている方の助けとなれば幸いです。

ただ、2. のCognitoの未認証ユーザーに対して読み書きを許可するのは、あまりよろしくないと思うので今後しっかり対応する必要があると思っています。

コメント

タイトルとURLをコピーしました