AWS
Cognito User Pool
Serverless FW

Serverless FrameworkでCognito User Poolsの認証付きAPIを作る

Cognito User Poolsを会員基盤としている場合、APIの認証をかなり簡単に作ることができます。そう、Serverless Frameworkなら。

$ sls -v

1.23.0

serverless.yml

こんな感じで書きましょう。

service:
  name: cognito-apis

provider:
  name: aws
  runtime: nodejs8.10
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "*"
      Resource:
        - "arn:aws:cognito-idp:us-east-1:*:userpool/us-east-1_XXXXXX"

functions:
  hello:
    handler: index.handler
    events:
      - http:
          path: hello
          method: get
          cors: true
          integration: lambda
          authorizer:
            name: authorizer
            arn: arn:aws:cognito-idp:us-east-1:999999999999:userpool/us-east-1_XXXXXX

authorizerにarn: COGNITO_USER_POOL_ARNを設定することで、Cognito User Poolsを使った認証が簡単にできます。

ユーザー名をAPI側で使いたい場合

adminGetUserとかしたくなった場合、authorizerを以下のように変更しましょう。

          authorizer:
            name: authorizer
            arn: arn:aws:cognito-idp:us-east-1:999999999999:userpool/us-east-1_XXXXXX
            claims:
              - 'cognito:username'

claimsを設定することで、event.cognitoPoolClaimsに値が入ってきます。ちなみにここはcustom:hogeのようなカスタム属性も設定できます。

尤も

CloudFormationのラッパーということを考えれば、SAMでも十分簡単にできるとは思うんですけどね。手に馴染んでる方優先しました。


Random posts

GitHubHomeEnglish