既存の Cognito リソースを使用する
Amplify Auth は、既存の Amazon Cognito ユーザープールと ID プールを使用するように設定できます。チーム環境にいる場合や、以前に認証リソースを作成した企業の一部である場合は、クライアントライブラリを直接設定するか、Amplify バックエンドで AWS Cloud Development Kit (AWS CDK) を使用して参照を保持することができます。
Amplify バックエンドなしで認証リソースを使用する
Amplify バックエンドなしで既存のリソースを使用するには、クライアントライブラリを直接設定します。
import { Amplify } from "aws-amplify"
Amplify.configure({ Auth: { Cognito: { userPoolId: "<your-cognito-user-pool-id>", userPoolClientId: "<your-cognito-user-pool-client-id>", identityPoolId: "<your-cognito-identity-pool-id>", loginWith: { email: true, }, signUpVerificationMethod: "code", userAttributes: { email: { required: true, }, }, allowGuestAccess: true, passwordFormat: { minLength: 8, requireLowercase: true, requireUppercase: true, requireNumbers: true, requireSpecialCharacters: true, }, }, },})Amplify バックエンドで認証リソースを使用する
AWS コンソールを通じたリソースの作成や、別のチームによって作成されたリソースの使用など、Amplify アプリのコンテキスト外で Amazon Cognito リソースを作成した場合は、referenceAuth を使用して既存のリソースを参照できます。ユーザープール、ユーザープールクライアント、ID プール、および ID プール上に設定された認証済みおよび未認証の IAM ロールが必要です。
import { referenceAuth } from '@aws-amplify/backend';
export const auth = referenceAuth({ userPoolId: 'us-east-1_xxxx', identityPoolId: 'us-east-1:b57b7c3b-9c95-43e4-9266-xxxx', authRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthauthenticatedU-xxxx', unauthRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthunauthenticate-xxxx', userPoolClientId: 'xxxx',});また、access プロパティを使用して、他の Amplify バックエンドリソースから認証リソースへのアクセス許可を付与することもできます。例えば、ユーザーの詳細情報を取得する必要があるファンクションがある場合は、以下のようになります:
import { referenceAuth } from '@aws-amplify/backend';import { getUser } from "../functions/get-user/resource";
export const auth = referenceAuth({ userPoolId: 'us-east-1_xxxx', identityPoolId: 'us-east-1:b57b7c3b-9c95-43e4-9266-xxxx', authRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthauthenticatedU-xxxx', unauthRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthunauthenticate-xxxx', userPoolClientId: 'xxxx', access: (allow) => [ allow.resource(getUser).to(["getUser"]), ],});さらに、groups プロパティを使用してユーザープール内のグループを参照することもできます。これは、アプリケーションでグループを操作し、グループメンバーシップに基づくストレージなどのリソースへのアクセスを提供したい場合に便利です。
import { referenceAuth } from '@aws-amplify/backend';import { getUser } from "../functions/get-user/resource";
export const auth = referenceAuth({ userPoolId: 'us-east-1_xxxx', identityPoolId: 'us-east-1:b57b7c3b-9c95-43e4-9266-xxxx', authRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthauthenticatedU-xxxx', unauthRoleArn: 'arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthunauthenticate-xxxx', userPoolClientId: 'xxxx', groups: { admin: "arn:aws:iam::xxxx:role/amplify-xxxx-mai-amplifyAuthadminGroupRole-xxxx", },});チーム環境では、デプロイメントコンテキストに応じて異なる認証リソースセットを参照したいかもしれません。例えば、別の「ステージング」環境からリソースを再利用するべき staging ブランチと、別の「本番」環境からリソースを再利用するべき production ブランチがある場合です。この場合は、環境変数を使用することをお勧めします。
import { referenceAuth } from '@aws-amplify/backend';
export const auth = referenceAuth({ userPoolId: process.env.MY_USER_POOL_ID, identityPoolId: process.env.MY_IDENTITY_POOL_ID, authRoleArn: process.env.MY_AUTH_ROLE_ARN, unauthRoleArn: process.env.MY_UNAUTH_ROLE_ARN, userPoolClientId: process.env.MY_USER_POOL_CLIENT_ID,});環境変数は、サンドボックスデプロイメント用にマシン上で個別に設定し、ブランチデプロイメント用に Amplify コンソールで設定する必要があります。