在AWS中控制角色权限

时间:2020-11-09 10:38:38

标签: amazon-web-services aws-api-gateway amazon-cognito amazon-iam

我是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"}

1 个答案:

答案 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调用。

有关更多信息,请查看以下文章:

Management calls

Execution calls