Open12

AWSの勉強をする

erikoeriko

適当にAWSの勉強記録を残します

コメント大歓迎

気が向いたときに記事にまとめます

erikoeriko

とりあえずCognitoとは…
認証とかユーザー管理ができるもの

  • ユーザープール
    アプリケーションのユーザーサインアップ、サインインに使う
  • IDプール
    他のAWSサービスにアクセスするための認証

ただアプリにサインイン機能をつけたいだけならユーザープールでよさそう?

erikoeriko

Amplifyとは????
とりあえず@aws-amplify/ui-reactを入れてログイン画面作れたけど、
AmplifyUIとAWSコンソールにあるAWS Amplifyは別?

erikoeriko

日本語化
https://ui.docs.amplify.aws/react/connected-components/authenticator/customization#confirm-sign-up-page-translations

I18n.putVocabularies(translations)I18n.setLanguage('ja')を追加する

import { Amplify, I18n } from 'aws-amplify';
import { Authenticator, translations } from '@aws-amplify/ui-react';

I18n.putVocabularies(translations);
I18n.setLanguage('ja');

手動設定しないとダメな箇所もあった

I18n.putVocabularies(translations);
I18n.putVocabularies({
  ja: {
    "Enter your Username": "ユーザー名",
    "Enter your Password": "パスワード",
    "Please confirm your Password": "パスワード再入力",
    "Reset Password": "パスワードリセット"
  }
});
I18n.setLanguage('ja');
erikoeriko

https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/user-pool-lambda-challenge.html

Amazon Cognito がホストする UI は、カスタム認証フローをサポートしていません。

カスタム属性をサインイン時に入力させる、カスタム認証チャレンジのLambdaトリガーを使う、にはUI自作する必要がある。

用意されたUIは意外と自由じゃない。。。

erikoeriko

AWS CLI
ユーザー作成

aws cognito-idp admin-create-user --user-pool-id [ユーザープールID] --username [ユーザー名] --user-attributes Name="属性名",Value="値"

パスワードを変更してステータスを確認済みにする

aws cognito-idp admin-create-user --user-pool-id [ユーザープールID] --username [ユーザー名] --password [パスワード]
erikoeriko

LambdaからCognitoにアクセスしたい

まずアクセス権限を付与する
IAM→ポリシー→AmazonCognito~→ポリシーの使用状況で対象のLambda関数をアタッチ

AWS SDKをLambdaでインポートして使う
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-cognito-identity-provider/index.html

Lambdaで使うときのインポートはこう書く

import { CognitoIdentityProviderClient, AddCustomAttributesCommand } from "@aws-sdk/client-cognito-identity-provider";

const AWS = require('aws-sdk');は前のバージョンの書き方らしい

erikoeriko

Lambdaからパラメータストアを参照する

Lambda関数→レイヤー
AWSレイヤー AWS-Parameters-and-Secrets-Lambda-Extensionを追加する

http://localhost:2773/systemsmanager/parameters/get/?name=hogehoge
にHTTPリクエスト

ポートはデフォルトで2773。ログでも確認できた。
ヘッダーに必要なトークンは環境変数から取得できる。

  const params = {
    method: 'GET',
    headers: {
      'X-Aws-Parameters-Secrets-Token': process.env.AWS_SESSION_TOKEN,
    }
  };

  const response = await fetch("http://localhost:2773/systemsmanager/parameters/get/?name=hogehoge", params);