将授权添加到使用amplify cli创建的函数

问题描述 投票:0回答:1

我创建了一个lambda函数,将我的React应用程序中创建的新用户添加到我的cognito用户池中的一个组中。

我使用this guide from the docs来通过AppSync调用lambda函数。

现在,当我运行该函数时,我得到以下预期错误:

用户:[编辑]无权执行:cognito-idp:资源上的AdminAddUserToGroup:[编辑]

到目前为止,我已将此附加策略添加到CustomResources.json中的角色:

{
  "PolicyName": "CognitoAuthLambdaFunction",
  "PolicyDocument": {
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": ["cognito-idp:AdminAddUserToGroup"],
        "Resource": [
          {
            "Fn::Sub": [                        
              "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:setUsersGroup-${env}",
              { "env": { "Ref": "env" } }
            ]
          }
        ]
      }
    ]
  }
}

如何动态引用cognito用户池以便我可以在envs之间切换?

amazon-web-services amazon-cloudformation amazon-cognito aws-amplify
1个回答
0
投票

我假设您在问题中给出的策略是Lambda执行策略,即在运行时传递给Lambda的策略。此策略将授权在Lambda中运行的代码调用给定的API列表。

如果我的假设是正确的,则策略中存在错误,因为资源属性是指您的Lambda函数本身(ARN以arn:aws:lambda开头),而它应该引用您要授予访问权限的用户池(ARN应该从arn:aws:cognito-identity)。

https://docs.aws.amazon.com/cognito/latest/developerguide/resource-permissions.html

假设Cognito用户池是在同一个CloudFormation模板中创建的,您可以使用Fn::GetAtt内部函数访问Cognito用户池ARN,例如

{ "Fn::GetAtt" : [ "logical_resource_id_cognito_user_pool", "ARN" ] }

有关https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html资源类型的可用属性,请参阅AWS::Cognito::UserPool

© www.soinside.com 2019 - 2024. All rights reserved.