本文介绍了如何利用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*”
此策略允许开发人员群组在命名为CloudTestQueue的AWS Account用户队列上使用SQS的SendMessage和ReceiveMessage行为。
{
“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 |
|
最后三个行为是在引入IAM之后添加的。
总结
在你编写策略之前,要确保你已经在自己的账户中创建了用户或群组。总是对策略进行测试以确保在将至投入使用前能正常工作。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
翻译
相关推荐
-
亚马逊关系型数据库Aurora正式发布
经过了长时间的测试,亚马逊近期正式发布了Aurora关系型数据库服务,目前在三个地区已经开放使用。
-
你为什么要使用亚马逊云数据库?
Amazon RDS减少或是免除了开发人员的管理职责,这是开发人员使用它来管理数据库的优势之一。
-
DBA不可不知的Amazon RedShift 性能监控工具
RedShift平台负担了大量的集群和数据库管理工作,但也并非面面俱到。有些AWS工具便填补了监控方面的空白。
-
AWS Aurora解析:用户可自主管理秘钥
Amazon在AWS re:Invent云计算大会上,AWS发布了分布式关系数据库Aurora的预览版、以及对应的AWS配置和密钥管理。但一些重要细节并未公开。