当前位置: 首页 > 知识库问答 >
问题:

AWS默认访问策略SNS主题和SQS q

祝锐
2023-03-14

为了进一步加强我们解决方案的安全性,我们现在正在研究使用的SNS主题和SQS队列。我们的所有组件都位于同一个AWS帐户中。

首先,我们希望限制对基于IP的SQS队列的访问。因此,只允许来自NAT网关IP的请求。我们不允许匿名访问SQS队列。

但似乎没有办法实现这一点,因为SQS队列的创建者(AWS帐户id)在默认情况下具有访问权限。因此,您无法在同一AWS帐户id中为其他用户创建有效权限。因为新创建的用户user2将属于同一AWS帐户id,具有相同的权限集。

我的理解是否正确,即同一个AWS账户ID中的所有用户默认都可以访问所有创建的SQS队列,只要他们的IAM策略允许?我的假设对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"
        }
      }
    }
  ]
}

参考:

>

在Amazon SNS中使用基于身份的策略-Amazon Simple Notify Service

共有1个答案

钱欣然
2023-03-14

亚马逊SQS

Amazon SQS能够定义Amazon SQS策略。除了IAM策略之外,还可以使用这些策略来授予对队列的访问权限。

例如,可以添加允许匿名访问队列的策略,这对于外部应用程序向队列发送消息非常有用。

有趣的是,这些策略还可用于通过IP地址控制对队列的访问。

为了测试这一点,我做了以下工作:

  • 创建了一个Amazon 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:的策略,我无法编辑该策略或删除队列!我必须使用根帐户删除它。)

亚马逊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"
        }
      }
    }
  ]
}
 类似资料:
  • 在SNS中,我设置了一个主题。 在IAM中,我设置了一个策略,允许仅从特定IP地址访问ARN主题: 我已将此策略附加到一个组,并将用户添加到此组。 从C#windows应用程序,我现在可以从策略中列出的指定SourceIp订阅和发布主题。 但是在这种情况下,我需要使用IAM用户的AccessKey和SecretAccessKey。 只要SourceIp是正确的,有没有一种方法可以绕过需要访问密钥和

  • 默认情况下,身份认证并不需要访问资源。当安全约束(如果有)包含的url-pattern 是请求 URI 的最佳匹配,且结合了施加在请求的 HTTP 方法上的 auth-constraint(指定的角色),则身份认证是需要的。同样,一个受保护的传输是不需要的,除非应用到请求的安全约束结合了施加在请求的HTTP方法上的 user-data-constraint(有一个受保护的transport-gua

  • 我正在尝试按照本指南将消息从未加密的SNS主题传递到加密的SQS队列。我能够完成“为AWS服务配置KMS权限”步骤,但在“为生产者配置KMS权限”步骤中遇到了问题。我已经创建了IAM角色,但是将这个角色附加到我的SNS主题是我特别困惑的地方。以下是我自己的研究无法回答的一些问题: IAM角色是否可以附加到特定项目(SNS主题、SQS队列等)?如果没有,还有什么其他方法可以授予特定项目的权限 当说明

  • 我有一个将消息发布到AWS SNS主题字符串的NodeJS应用程序和一个AWS SQS订阅。在SQS控制台上,我可以看到发布的消息。但是,我不清楚SQS队列的访问策略。 问题 当将消息传递到SQS队列时,作为订阅的结果,哪个用户是有效的?与发表该主题的人相同? 只有在使用时,才能使消息流入队列。那么,我应该如何定义一个限制性策略,使消息只能作为订阅的结果写入队列? 创建具有权限的队列的AWS SQ

  • 我们的目标是创建只允许登录用户访问S3的S3 bucket和IAM角色策略。 我们在S3 bucket上托管私人文件,可以从web和移动应用程序访问。我们试图通过Amazon Cognito添加一层安全性,使用一个未经身份验证的角色,这样任何登录到我们应用程序的用户都可以访问S3 bucket。 使用AWS-SDK for JS并遵循基本的设置,我们可以在Amazon Cognito identi

  • 我已将以下策略附加到IAM用户: 现在,有了附加了上述策略的IAM用户的访问凭据,我试图运行以下命令: 其中,文件policy.json的内容为: 我得到了一个 调用PutBucket策略操作时发生错误(AccessDended):拒绝访问 现在我想知道为什么? 用户的策略语句允许对资源执行: 这就是我试图用我的上述政策所做的。那么,为什么访问被拒绝?