如何在无服务器的 AWS Cognito 中创建组并授予不同的权限

Mon*_*ffy 2 amazon-web-services node.js amazon-cognito aws-lambda serverless-framework

我正在 AWS 中使用无服务器框架创建一个应用程序。我正在使用 NodeJS 编写 Lambda。在应用程序中我想创建两个不同的角色

  1. 行政
  2. 用户

在我的serverless.yaml文件中,我为这些用户类型创建了两个不同的 Cognito 用户池组

AdminUserPoolGroup:
      Type: AWS::Cognito::UserPoolGroup
      Properties:
        GroupName: "admins"
        Precedence: 0
        UserPoolId: 
          Ref: CognitoUserPool

NormalUserPoolGroup:
      Type: AWS::Cognito::UserPoolGroup
      Properties: 
        GroupName: users
        Precedence: 1
        UserPoolId:
          Ref: CognitoUserPool
Run Code Online (Sandbox Code Playgroud)

我想向这两个组授予不同的访问级别,例如管理员可以创建帖子,用户只能查看它们。经过一些研究后,我发现这可以通过将策略附加到组来完成。但我找不到使用无服务器框架来做到这一点的方法。

jog*_*old 6

您需要指定资源RoleArn的属性AWS::Cognito::UserPoolGroup

AdminUserPoolGroup:
  Type: 'AWS::Cognito::UserPoolGroup'
  Properties:
    GroupName: "admins"
    Precedence: 0
    UserPoolId: !Ref CognitoUserPool
    RoleArn: !GetAtt AdminRole.Arn # Get the ARN of the role defined below

AdminRole: # The IAM role for admins
  Type: 'AWS::IAM::Role'
  Properties:
    ...role properties...
Run Code Online (Sandbox Code Playgroud)

了解AWS::IAM::Role如何定义角色(您必须声明AWS::IAM::Policy资源并在角色中引用它们)。