はじめに
前回に引き続き、AWS上にWebアプリのデータを簡単に保存・取得する方法を考えていきます。
今回は、GraphQLスキーマーの編集をします。
関連ページ
https://qiita.com/too/items/fae2879ea36f00c3ae10
https://docs.amplify.aws/cli/graphql/authorization-rules/
@authの設定
AWS Amplifyで作成した GraphQLのスキーマーは、初期状態では、ほぼ下記の様になっています。
# This "input" configures a global authorization rule to enable public access to
# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules
input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!
type Storage @model {
id: ID!
data: String!
}
この中に、気になる文言があります。
# This "input" configures a global authorization rule to enable public access to
# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules
input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!
FOR TESTING ONLY!
とは、気になる文言ですね。。。
上記の指示通り、https://docs.amplify.aws/cli/graphql/authorization-rules/
で確認してみました。
なになに、、、。input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!
が記述してあると、誰でもCreate/Read/Update/Deleteができる状態になります。
ということで、スキーマ定義を直していきます。
まず、上記の一文をコメントアウトします。
代わりに データモデルに対して、@auth
でアクセス権を設定します。
今回の場合、誰でもアクセス可能としたいので、allow:public
を設定します。
# This "input" configures a global authorization rule to enable public access to
# all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules
# input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY!
type Storage @model @auth(rules: [{ allow: public }]){
id: ID!
data: String!
}
上記修正後、amplify push
を実施して、スキーマー設定を反映させます。
今回の場合、@auth
を allow:pubic
にしましたが、
Cognitoを使ったユーザー認証を行なって、
自分のデータ以外アクセスできない様にしたい場合は、allow:owner
を設定します。
以上です。