AWS 默认访问策略 SNS 主题和 SQS q
Posted
技术标签:
【中文标题】AWS 默认访问策略 SNS 主题和 SQS q【英文标题】:AWS default Access Policy SNS topics and SQS q's 【发布时间】:2020-05-12 16:39:04 【问题描述】:为了进一步加强我们解决方案的安全性,我们现在正在研究使用的 SNS 主题和 SQS 队列。我们所有的组件都位于同一个 AWS 账户中。
首先,我们希望根据 IP 限制对 SQS 队列的访问。所以只允许来自我们的 NAT 网关 IP 的请求。我们不允许匿名访问我们的 SQS 队列。
但似乎没有办法实现这一点,因为 SQS 队列的创建者 - AWS 账户 ID - 默认具有访问权限。因此,您无法为同一 AWS 账户 ID 中的其他用户创建有效权限。因为这个新创建的用户 user2 将属于同一个 AWS 账户 ID,具有相同的权限集。
我的理解是否正确,只要他们的 IAM 策略允许,同一 AWS 账户 ID 中的所有用户默认都可以访问所有创建的 SQS 队列?我的假设是否正确,SNS 主题也有同样的行为?
以下是我想要实施的政策。除了这个政策,我没有其他适用于此 SQS q 的政策。但它不尊重源 IP 条件。当我使用正确的 AWS 访问密钥/秘密组合时,我仍然可以从任何地方连接。仅当我将 AWS 委托人设置为 * - 所有人 - 策略似乎才有效。
"Version": "2012-10-17",
"Id": "arn:aws:sqs:eu-west-1:4564645646464564:madcowtestqueue/SQSDefaultPolicy",
"Statement": [
"Sid": "Sid1589365989662",
"Effect": "Allow",
"Principal":
"AWS": "arn:aws:iam::4564645646464564:user/user2"
,
"Action": [
"SQS:DeleteMessage",
"SQS:SendMessage",
"SQS:ReceiveMessage"
],
"Resource": "arn:aws:sqs:eu-west-1:143631359317:madcowtestqueue",
"Condition":
"IpAddress":
"aws:SourceIp": "1.1.1.1"
]
参考:
Using identity-based policies with Amazon SQS - Amazon Simple Queue Service
Using identity-based policies with Amazon SNS - Amazon Simple Notification Service
【问题讨论】:
SNS 和 SQS 都支持基于资源的策略。因此,您不仅限于使用基于身份的策略来控制访问。为 sqs 提供的链接还显示了如何使用基于 IP 地址的 sqs 资源策略。 能否编辑您的问题以阐明您的要求?例如,不清楚您所说的“为同一 AWS 账户 id 中的另一个用户创建有效权限”是什么意思。 【参考方案1】:亚马逊 SQS
Amazon SQS 能够定义Amazon SQS policies。除了 IAM 策略之外,还可以使用这些策略授予对队列的访问权限。
例如,可以添加允许匿名访问队列的策略,这对于外部应用程序向队列发送消息很有用。
有趣的是,这些策略还可用于控制通过 IP 地址访问队列。
为了对此进行测试,我做了以下操作:
创建了一个 Amazon SQS 队列 使用 Amazon EC2 实例向队列发送消息 -- 成功 向 SQS 队列添加了以下策略:
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [
"Sid": "Queue1_AnonymousAccess_AllActions_IPLimit_Deny",
"Effect": "Deny",
"Principal": "*",
"Action": "SQS:SendMessage",
"Resource": "arn:aws:sqs:ap-southeast-2:xxx:queue",
"Condition":
"NotIpAddress":
"aws:SourceIp": "54.1.2.3/32"
]
IP 地址是我的 Amazon EC2 实例的 IP 地址。
然后我尝试再次从 EC2 实例向队列发送消息 -- 成功 然后我从自己的计算机上运行了相同的命令 -- 不成功因此,SQS 策略似乎可以覆盖通过 IAM 授予的权限。
(小心...我在队列中添加了拒绝sqs:*
的策略,但我无法编辑策略或删除队列!我必须使用 root 帐户删除它。)
亚马逊 SNS
使用此访问策略,我设法通过 Amazon SNS 实现了相同的结果:
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
"Sid": "__default_statement_ID",
"Effect": "Deny",
"Principal":
"AWS": "*"
,
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:ap-southeast-2:xxx:topic",
"Condition":
"NotIpAddress":
"aws:SourceIp": "54.1.2.3/32"
]
【讨论】:
您好约翰,感谢您的回复。我了解我可以制定包含源 IP 等条件的访问策略。但此设置似乎仅在您将 AWS 委托人设置为所有人时才有效。我的目标是通过不允许匿名访问(仅允许特定的 AWS 帐户 ID)以及设置源 IP 来获得额外的安全层。但这似乎不可行,因为我注意到每当我配置具有 AWS 主体集和源 IP 条件的策略时,它都会被忽略,因为似乎默认策略开始生效 - AWS 账户中的所有用户都可以访问。这就是我最初的问题。 能否请您确认您想要实现的规则集?请尽可能清楚地描述它,因为不清楚您所说的“仅特定的 AWS 账户 id”是什么意思,以及是否需要与 IP 地址规则结合或作为 替代 IP 地址规则。例如,您是说“如果它来自此 IP 地址,它总是可以的,或如果它来自具有正确权限的 IAM 用户,它总是可以的”?随意更新问题以添加这些额外的详细信息,而不是将其作为评论。以上是关于AWS 默认访问策略 SNS 主题和 SQS q的主要内容,如果未能解决你的问题,请参考以下文章