如何拒绝除一个用户外的所有用户在AWS API Gateway中调用API

时间:2019-08-08 14:12:31

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

除了可以在AWS API网关上调用API终端节点的用户之外,是否有一种方法/策略可以拒绝所有用户?

当前使用的政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::account_id:user/user-name"
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:region:account_id:api_to_be_invoked/*/*"
        }
    ]
}

我在API网关的资源策略中应用了上述策略并进行了部署,但是为了进行测试,我尝试使用另一个管理员用户的访问权限和私钥通过Postman进行POST,但仍然成功完成了,但我没有这样做想要。

有帮助吗?

2 个答案:

答案 0 :(得分:2)

{
"Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": 
                    [  "arn:aws:iam::account_id:user/user-name",
                       "arn:aws:iam::account_id:root"
                    ]
            },
            "Action": "execute-api:Invoke",
            "Resource": "arn:aws:execute-api:region:account_id:api_to_be_invoked/*/*"
        }
    ]
}

答案 1 :(得分:0)

您是否尝试使用 IAM政策条件? 我没有在生产环境中尝试过它,但是它应该可以满足您的需求。

{"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Deny",
        "Action": "execute-api:Invoke",
        "Resource": "arn:aws:execute-api:region:account_id:api_to_be_invoked/*/*",
        "Condition": {
            "StringNotEquals" : {
               "aws:username" : "your_user_name"
             }
          }
    }
]}

请让我知道这个答案是否有帮助。