我创建了一个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之间切换?
我假设您在问题中给出的策略是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
。