如何利用Amazon 身份访问管理获得更好的SQS访问控制

日期: 2015-04-02 作者:Judith Myerson翻译:Ranma 来源:TechTarget中国 英文

本文介绍了如何利用Amazon Identity AccessManagement(Amazon身份访问管理)来获得对AmazonSimple Queue Service(Amazon简单队列服务)更好的控制。

有了Amazon Simple Queue Service策略,你就可以授予另外的AWS账户用户权限来使用你的队列。而对于Identity Access Management策略,你就无法这样做。这就意味着你可以通过使用IAM来获得对Simple Queue Service更好的访问控制。

如果没有IAM,SQS就会自动给队列创建者利用此队列访问所有Amazon SQS行为的权限。

有了IAM,创建者不再被赋予自动权限,除非他正在使用的是AWS安全凭据。任何有权创建队列的用户必然有权使用其他的SQS行为,这样他们就能利用创建的队列来做事。

SQS和IAM策略图

图1显示了一个简单的SQS策略。此策略为AWSAccount 1和AWS Account 2赋予了权限来使用队列queue_abc中任何允许的行为。

图1

有了IAM,图2显示了用户John和Carol已经拥有了使用queue_abc任何行为的权限。这些用户必须在你自身的AWS Account下创建才能对队列进行访问。

图2

包含在“*”中的Amazon SQS行为列表得以扩展,从而来可以让用户John和Carol对队列进行创建、删除和排列。源文件中的sqs:*使用了Amazon Resource Name(ARN)格式,它显示了你在队列中已经进行注册的所有区域。

四个IAM策略示例

下面列出了三个示例,包括设置简单IAM策略以及对策略中条件元素的使用。

示例1:允许用户创建并使用其自身的队列

此策略允许用户John访问john_queue中的所有SQS行为。SQS并不会将此队列后续使用的权限赋给队列的创建者。而有了IAM,你就能够给用户John赋予权限来使用所有的SQS行为。

{

  “Version”: “2012-10-17”,

  “Statement”:[{

     “Effect”:”Allow”,

     “Action”:”sqs:*”,

     “Resource”:”arn:aws:sqs:*:123456789012:john_queue*”

     }

警告:如果你在策略中指定多个区域(sqs:*),系统会给出一个Resource错误信息,但实际上当你已经注册了一个AWS账户时你就已经注册了一个区域,如US East (N. Virginia)。要解决此问题,可以像下面一样用us-east-1来代替通配符“*”。

“arn:aws:sqs:us-east-1:123456789012:john_queue*”

示例2:允许开发人员编写消息来共享测试队列

此策略允许开发人员群组在命名为CloudTestQueue的AWS Account用户队列上使用SQS的SendMessageReceiveMessage行为。

{

  “Version”: “2012-10-17”,

  “Statement”:[{

     “Effect”:”Allow”,

     “Action”:[“sqs:SendMessage”,”sqs:ReceiveMessage”],

     “Resource”:”arn:aws:sqs:us-east-1:123456789012:CloudTestQueue”

     }

   ]

}

 

警告:如果开发人员群组被拒绝访问,那么他们就不能收发SQS消息。要解决此问题,需要在你自身的AWS账户中创建群组。

示例3:允许合作伙伴向特定队列发送消息

此策略允许WheelCo 群组中作为伙伴公司的用户Tom在WheelQueue上操作SendMessage行为。除了在WheelQueue上的SendMessage权限,它不允许WheelCo群组拥有操作任何其他SQS行为的权限。

{

  “Version”: “2012-10-17”,

  “Statement”:[{

        “Effect”:”Allow”,

        “Action”:”sqs:SendMessage”,

        “Resource”:”arn:aws:sqs:us-east-1:123456789012:WheelQueue”

     },

     {

        “Effect”:”Deny”,

        “NotAction”:”sqs:SendMessage”,

        “NotResource”:”arn:aws:sqs:us-east-1:123456789012:WheelQueue”

     }

   ]

}

警告:你必须在第二条语句中显式地使用“deny”来覆盖第一条语句中的“allow”。

示例4:允许开发人员编写消息来共享测试队列

条件元素是策略语句中最为复杂的部分。它可以包含多重条件,并且每个条件都能包含多重键值对。

让我们看看用户Bob必须满足的三个条件以及如何使用策略条件和键让其能访问你的SQS队列。    

条件1:时间在2014年5月16日上午11点之后

“DateGreaterThan”: {“aws:CurrentTime”:”2014-05-16T11:00:00Z”

DateGreaterThan条件指示了当前时间键开始生效的时间点。

条件2:2014年5月16日下午11点之前

“DateLessThan”: {“aws:CurrentTime”: “2014-05-16T15:00:00Z”

DateLessThan条件指示了当前时间键失效的时间点。

条件3:来自IP地址范围为193.167.176.0/24或193.167.143.0/24的请求

“IpAddress”: {“aws:SourceIp”:[“193.167.176.0/24″,”193.167.143.0/24”]

ipAddress条件指示了在theSourceIP键中指定的IP地址范围。

以下是一个简单策略,它在Statement元素中包含了条件。

{

  “Version”: “2012-10-17”,

  “Statement”:[{

                       “Effect”:”Allow”,

                       “Action”:”sqs:*”,

                       “Resource”:”arn:aws:sqs:us-east-1:123456789012:queue_xyz”

“Condition”:  {

                                   “DateGreaterThan” : {

                                               “aws:CurrentTime” : “2014-05-16T11:00:00Z”

                                   },

                                   “DateLessThan”: {

                                               “aws:CurrentTime” : “2014-05-20T15:00:00Z”

                                   },

                                   “IpAddress” : {

                                               “aws:SourceIp” : [“193.167.176.0/24″,”193.167.143.0/24”]

           }

                       }

 }

  ]

}

警告:如果在DateGreaterThan条件中设置的SOURCEIP键开始生效之前用户Bob试图访问queue_xyz将会遭到拒绝。要解决此问题,需要像下面一样将当前的时间键设置变更为早于2014-05-16的日期,这样用户Bob就可以访问队列了。

“DateGreaterThan”:{“aws:CurrentTime”: “2014-05-10T11:00:00Z”}                       

IAM策略中的SQS Amazon行为

以下是IAM策略中你可以用于队列的SQS行为列表。

SendMessage

ReceiveMessage

ChangeMessageVisibility

DeleteMessage

GetQueueAttributes

GetQueueUrl

CreateQueue

DeleteQueue

ListQueues

最后三个行为是在引入IAM之后添加的。

总结

在你编写策略之前,要确保你已经在自己的账户中创建了用户或群组。总是对策略进行测试以确保在将至投入使用前能正常工作。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

翻译

Ranma
Ranma

相关推荐