AWS Severless IoT 17 – Iot Policy + Cognito Identity

AWS Severless IoT에 대해 알아봅니다.

작성자

홍세민

홍세민

MarcusHong

IOT + Cognito

현재까지의 설정만으로 프론트엔드에서 웹소켓 접속을 시도하면 접속이 되지 않는다. 웹소켓 접속을 하기 위해서는 프론트엔드에 IOT에서 설정한 인증서를 설치하거나, Cognito Identity Pool로 인증된 유저에 Policy를 연동시키는 방법이 있다. Cognito에 로그인 없이 비인증된 권한으로도 Cognito와 연결할 수 있지만, 우리는 Cognito를 사용하기 때문에 Identity Pool에 권한을 연동하는 방법을 사용한다.

Cloudformation

  • 앞서 만들었던 PrivateApisV1에 환경변수를 추가한다.
  • IOTEndPoint는 aws console -> Iot -> Settings 에 가면 확인할 수 있다.
Resource:
  PrivateApisV1:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: src
      Handler: bin/lambda.handler
      Runtime: nodejs6.10
      Role:
        'Fn::GetAtt':
          - BasicExecutionRole
          - Arn
      Environment:
        Variables:
          IOTEndPoint:
            'endpoint'
          IotAccessPolicy:
            Ref: IotAccessPolicy
      Timeout: 30
      VpcConfig:
        SecurityGroupIds:
          - Ref: VPCLambdaSecurityGroup
        SubnetIds:
          - Ref: PublicSubnetA
          - Ref: PublicSubnetB
      Events:
        ProxyApiRoot:
          Type: Api
          Properties:
            RestApiId:
              Ref: ApiGatewayApi
            Path: /v1
            Method: ANY
        ProxyApiGreedy:
          Type: Api
          Properties:
            RestApiId:
              Ref: ApiGatewayApi
            Path: '/v1/{proxy+}'
            Method: ANY

express.js

  • Identity Pool에 생성된 ID는 유니크 값이므로 회원가입이나 최초 유저 정보 입력 시에 한번만 처리하면 된다.
  • 아래는 express.js 에서 Cognito Identity Id에 권한을 연동하는 예제이다.
  • 추가된 Policy에 만약 연동된 계정이 있다면 수동으로 삭제해야 Policy를 삭제할 수 있다.

Tags : aws 

comments powered by Disqus