Max*_*rgi 4 amazon-web-services aws-api-gateway aws-cognito
我从 AWS 上的无服务器开始,我使用 AWS Cognito 进行用户身份验证和授权。对于我在文档和示例中看到的内容,您可以创建组以允许某些用户能够使用 Api 网关端点,将角色和策略附加到该组。我尝试了这个,然后制作了一个简单的客户端并尝试使用两个不同的用户,并且两者都能够获得 200 状态代码,而不是其中一个获得它是未经授权的。为了创建角色,我转到 IAM,创建角色,身份提供商访问角色,授予对 Web 身份提供商的访问权限,然后我选择 Amazon Cognito 并选择我的 Cognito 用户池。信任关系:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1_8TAUVKbGP"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"my-arn-resourse-from-api-gateway"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后我将此角色分配给我的管理员组并将用户添加到该组,这应该允许通过在用户登录时将该策略附加到该用户来访问该 Api Gateway 资源。但是当我尝试使用不在该组中的用户时仍然有效。顺便说一下,在请求中的 Api Gateway 资源上,我对我的认知池进行了授权。
非常感谢!
好吧,我终于让它完美地工作了!问题出在我的 IAM 角色中,在信任关系文档中
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "identity_pool_id"
},Run Code Online (Sandbox Code Playgroud)
在该部分中,我没有使用我的身份池 ID,而是使用了我的用户池 ID。修复后,我取回了凭据,并使用这些凭据在 Postman 中进行了尝试,并且效果很好。然后我将同一用户更改为另一个角色,但访问被按计划拒绝!以简单的方式使用角色授权最重要的部分是因为agent420说使用AWS_IAM方法来保护api,然后剩下的由aws处理。
| 归档时间: |
|
| 查看次数: |
1995 次 |
| 最近记录: |