我是AWS的新手。我正在使用Spring Boot开发应用程序。我使用AWS cognito
进行登录和注册。我在 cognito 中创建了一个名为ROLE_ADMIN
的组,并与我也创建为ROLE_ADMIN_IAM
的 IAM角色建立联系。
我正在使用AWS Api gateway
(HTTP Apis,但类似的是REST Apis)与Apis通信。 然后将Cognito jwt授权器集成到Api网关中。
一切正常。我现在面临的问题是,当用户登录时,我需要根据其在认知组中的角色来防止Apis的出现。因此,我尝试将策略附加到IAM角色(已经创建的ROLE_ADMIN_IAM
)上,但是它不起作用。
这就是我对ROLE_ADMIN_IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": [
"apigateway:GET"
],
"Resource": [
"arn:aws:apigateway:ap-south-1::/apis/09bccr0"
]
}
]
}
我也尝试限制所有资源。但不起作用
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "*",
"Resource": "*"
}
]
}
恐怕我尝试的方法是对还是错?我已经工作好几天了。但是找不到任何解决方案。请任何人给我一个解决方案。预先感谢。
更新1。
由于这行不通,因此我创建了一个身份池并为其附加了用户池ID和客户端ID。它会自动为身份验证用户和取消身份验证用户创建两个角色。然后,我转到Api网关,并将授权者更改为IAM
。文档本身说,当我们使用IAM
作为授权者时,我们需要使用Signature 4版本。 (我改用 cognito jwt 的 IAM ,因为我找不到任何文档或文章说我在使用时可以使用 cognito jwt 用于定义角色的身份池。
在react应用程序中,我使用amplify。当我配置身份池时,成功登录后它将提供临时Accesskey和SecretKey。我尝试将其与邮递员->授权-> AWS Signature结合使用,它始终提供{"message":"Forbidden"}
答案 0 :(得分:0)
在Cognito用户池中创建组时,需要将适当的IAM角色附加到该组。允许实际API调用的IAM策略应如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
]
}
]
}
您只需要用API网关ARN,方法和端点替换演示字符串。请注意“ execute-api:Invoke”操作。
权限“ apigateway:GET”不允许您调用API,而是获取有关API的服务信息。 “ apigateway:*”权限允许您进行管理AWS API调用,而不是实际的API调用。
有关更多信息,请查看以下文章: