将对 AWS 资源的访问限制在一个特定区域

Restricting access to AWS resources to one specific region

我正在尝试将我的 lambda 完全访问权限限制在特定区域。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:*",
                "dynamodb:*",
                "events:*",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "iam:PassRole",
                "lambda:*",
                "logs:*",
                "s3:*"
                
            ],
            "Resource": "*",
        "Condition": {
                "StringEquals": {
                    "aws:RequestedRegion": "us-east-1"
                }
        }       
        }
    ]
}

这是我的政策。

但目前,它不工作用户仍然可以访问 lambda 并且它在另一个区域具有完全访问权限。

我在这里错过了什么?

您的 IAM 用户可能被允许在不同区域执行您的操作,因为您的政策仅 Allow 并且他们有其他政策允许不受限制的访问。

要解决此问题,您可以在策略中使用 Deny 语句,如 AWS: Denies access to AWS based on the requested Region 中所述。 Deny 总是赢,这意味着策略将优先于任何允许。

因此,根据链接的 AWS 文档,您的政策可能是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "cloudwatch:*",
                "dynamodb:*",
                "events:*",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListAttachedRolePolicies",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "iam:PassRole",
                "lambda:*",
                "logs:*",
                "s3:*"
                
            ],
            "Resource": "*",
        "Condition": {
                "StringNotEquals": {
                    "aws:RequestedRegion": "us-east-1"
                }
        }       
        }
    ]
}

请注意,在 AWS 文档中,他们也使用 NotAction,而不是 Action。因此,您必须考虑您希望用户能够做什么或不能做什么。但在你的情况下,我认为 Action 没问题。