With admin actions
Amplify Auth can be managed with the AWS SDK's @aws-sdk/client-cognito-identity-provider package. This package is intended to use server-side, and can be used within a Function. This example focuses on the addUserToGroup action and will be defined as a custom mutation.
To get started, create an "ADMINS" group that will be used to authorize the mutation:
import { defineAuth } from "@aws-amplify/backend"
export const auth = defineAuth({  loginWith: {    email: true,  },  groups: ["ADMINS"]})Next, create the Function resource:
import { defineFunction } from "@aws-amplify/backend"
export const addUserToGroup = defineFunction({  name: "add-user-to-group",})Then, in your auth resources, grant access for the function to perform the addUserToGroup action. Learn more about granting access to auth resources.
import { defineAuth } from "@aws-amplify/backend"import { addUserToGroup } from "../data/add-user-to-group/resource"
export const auth = defineAuth({  loginWith: {    email: true,  },  groups: ["ADMINS"],  access: (allow) => [    allow.resource(addUserToGroup).to(["addUserToGroup"])  ],})You're now ready to define the custom mutation. Here you will use the newly-created addUserToGroup function resource to handle the addUserToGroup mutation. This mutation can only be called by a user in the "ADMINS" group.
import type { ClientSchema } from "@aws-amplify/backend"import { a, defineData } from "@aws-amplify/backend"import { addUserToGroup } from "./resource"
const schema = a.schema({  addUserToGroup: a    .mutation()    .arguments({      userId: a.string().required(),      groupName: a.string().required(),    })    .authorization((allow) => [allow.group("ADMINS")])    .handler(a.handler.function(addUserToGroup))    .returns(a.json())})
export type Schema = ClientSchema<typeof schema>
export const data = defineData({  schema,  authorizationModes: {    defaultAuthorizationMode: "iam",  },})Lastly, create the function's handler using the exported client schema to type the handler function, and the generated env to specify the user pool ID you'd like to interact with:
import type { Schema } from "../resource"import { env } from "$amplify/env/add-user-to-group"import {  AdminAddUserToGroupCommand,  CognitoIdentityProviderClient,} from "@aws-sdk/client-cognito-identity-provider"
type Handler = Schema["addUserToGroup"]["functionHandler"]const client = new CognitoIdentityProviderClient()
export const handler: Handler = async (event) => {  const { userId, groupName } = event.arguments  const command = new AdminAddUserToGroupCommand({    Username: userId,    GroupName: groupName,    UserPoolId: env.AMPLIFY_AUTH_USERPOOL_ID,  })  const response = await client.send(command)  return response}In your frontend, use the generated client to call your mutation using the group name and the user's ID.
import type { Schema } from "../amplify/data/resource"import { generateClient } from "aws-amplify/data"
const client = generateClient<Schema>()
await client.mutations.addUserToGroup({  groupName: "ADMINS",  userId: "5468d468-4061-70ed-8870-45c766d26225",})