我已经设置了API网关,以便使用IAM进行身份验证,我喜欢用户获得临时凭据的想法,然后可以使用这些凭据访问服务。此设置还有助于配置已验证和未验证用户都可以访问的端点。
承诺(至少在我看来(是,我们可以使用这些临时凭据(或等效令牌(访问所有服务。
我发现的限制似乎是从API网关执行的lamdas。虽然在";事件";告诉我用户已经通过身份验证,我找不到AssumeRole
的方法作为针对API网关进行身份验证的Cognito Identity。
我尝试使用STS
到AssumeRole
作为在CognitoIdentityPool
中定义的已验证用户的角色。
AssumeRoleWithWebIdentity
感觉更适合,但在传递到lambda的过多字段中,我不确定是否有WebIdentityToken
。
到目前为止,我一直在使用HTTP API网关。我看到API网关中的REST端点可以使用Cognito Authoriser。据我所知,这将不允许未经身份验证/访客用户通过Cognito身份池。
我可以看到,有了AWS Amplify和临时IAM凭据,客户可以直接访问服务,这在很大程度上是有效的。然而,我想提供一个简化的后端,以保持客户端更轻。
有可能产生其中一种可能的结果吗?
- 让lambda作为Cognito Identity IAM角色执行
- 在lambda中,承担Cognito Identity IAM角色。这里有我丢失的代币吗
我不喜欢让lambda访问整个S3存储桶或DynamoDB表,我更喜欢设置用户级策略,只有当我能够承担该身份的角色时,我才能应用这些策略。
任何建议、指导和帮助都将不胜感激!
我假设您正在Cognito组中配置IAM角色,这样您就可以为不同的组分配不同的权限。
我可以想出两种选择来实现你想要的。
选项1
-
IAM角色将有一个名为"信任策略"的部分,允许Cognito担任该角色。您必须对此进行修改,以允许Lambda也承担该角色。
-
在Lambda执行角色中,确保它也具有允许Lambda承担其他角色的权限。
-
在Lambda代码中,要调用的API应该是
AssumeRole
(而不是AssumeRoleWithWebIdentity
等其他变体(。
选项2
由于IAM角色控制对AWS服务的访问,因此您可以让客户端直接调用AWS API,而不是使用Lambda来引导一切。