Amplify 認証ルール

導入
Amplifyアプリケーションのデータアクセスのパターンは主に二つあります。ひとつは公開データへのアクセス、もうひとつは特定のユーザーにだけ許可されたデータへのアクセスです。この特定のユーザーというのは、サインインしているユーザー、特定のユーザー、あるいは特定のユーザーグループのことを指します。@authディレクティブを使用することで、これらのアクセスの認可ルールを設定することが可能です。ただし、認可ルールは「Deny-by-default(デフォルトで拒否)」の原則に基づいています。つまり、特定の認可ルールが明示的に設定されていない場合、そのアクセスは拒否されるということです。
type Todo @model @auth(rules: [{ allow: owner }]) {
content: String
}
上記の例では、「Todo」のowner(アイテムの作成者)である、サインインした各ユーザーが、自分自身の「Todo」を作成、閲覧、更新、削除することができます。
また、Amplifyは許可される操作を制限するだけでなく、複数の認可ルールを組み合わせることも可能です。さらに、細かい粒度でフィールドレベルの認可を適用することもできます。
type Todo @model @auth(rules: [
{ allow: public, operations: [read]},
{ allow: owner }
]) {
content: String
}
上記の例では、誰でも(公開)全ての「Todo」を読むことができますが、owner(認証済みユーザー)は自分自身の「Todo」を作成、閲覧、更新、削除することができます。

グローバル認可ルール(初心者向け)
新しいGraphQLスキーマを作成する際に、初心者が始めやすいようにグローバル認可ルールが設定されています。しかし、本番環境では、このグローバル認可ルールを削除し、それぞれのモデルに対して個別にルールを適用することが推奨されています。
input AMPLIFY { globalAuthRule: AuthRule = { allow: public } }
グローバル認可ルール(この場合、{ allow: public })は、GraphQLスキーマ内の全てのデータモデルに適用されます。

認可戦略
以下は、あなたのユースケースに合った認可戦略を選択するためのガイドです:
推奨されるユースケース | 戦略 | プロバイダー |
---|---|---|
ユーザーやデバイスが匿名の公開データアクセス。AppSync APIキーを持つ人は誰でもアクセスが許可されます。 | public | apiKey |
本番環境の公開データアクセスに推奨。AWS IAMの制御を使用して、認証されていないユーザーやデバイスに権限を付与する公開データアクセス。 | public | iam |
ユーザーごとのデータアクセス。アクセスはレコードの"owner"に限定されます。デフォルトでは、amplify add authのCognitoユーザープールを利用します。 | owner | userPools / oidc |
サインインしたユーザーのどんなデータアクセスでも。所有者ベースのアクセスとは異なり、どのサインインユーザーでもアクセスが可能です。 | private | userPools / oidc / iam |
ユーザーグループごとのデータアクセス。特定の、または動的に設定されたグループのユーザーがアクセス可能です。 | group | userPools / oidc |
Lambda関数内で自分自身のカスタム認可ルールを定義する | custom | function |