7

私のサービスでは、データへのアクセスを承認するためにユーザー グループが必要です。

AppSync ドキュメントのグループ認証の例は、ユーザー プール クレームに基づいています。IAM 認証を使用しているため、$context.identity にはクレームや類似の情報は含まれません。

たとえば、 https ://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html のトピック「ユースケース: グループが新しいレコードを作成できる」を参照してください。

#set($expression = "")
#set($expressionValues = {})
#foreach($group in $context.identity.claims.get("cognito:groups"))
    #set( $expression = "${expression} contains(groupsCanAccess, :var$foreach.count )" )
    #set( $val = {})
    #set( $test = $val.put("S", $group))
    #set( $values = $expressionValues.put(":var$foreach.count", $val))
    #if ( $foreach.hasNext )
    #set( $expression = "${expression} OR" )
    #end
#end
{
    "version" : "2017-02-28",
    "operation" : "PutItem",
    "key" : {
        ## If your table's hash key is not named 'id', update it here. **
        "id" : { "S" : "$context.arguments.id" }
        ## If your table has a sort key, add it as an item here. **
    },
    "attributeValues" : {
        ## Add an item for each field you would like to store to Amazon DynamoDB. **
        "title" : { "S" : "${context.arguments.title}" },
        "content": { "S" : "${context.arguments.content}" },
        "owner": {"S": "${context.identity.username}" }
    },
    "condition" : {
        "expression": "attribute_not_exists(id) OR $expression",
        "expressionValues": $utils.toJson($expressionValues)
    }
}

ユーザーテーブルから、ユーザーがこの権限を付与するグループに属しているかどうかを確認するだけでよいと思います。ただし、DynamoDB 条件は他のテーブルのクエリをサポートしていないようです。

4

1 に答える 1