Amazon SQS Sender Id不一致

时间:2015-02-19 10:10:45

标签: amazon-web-services amazon-sqs

场景如下:

  • 我有几个AWS账户正在写的Amazon SQS队列。
  • 我正在为特定的亚马逊帐户ID列表提供写入权限。
  • 每次从此队列中获取消息时,我也要求" SenderId"属性。

这就是我如何识别哪个客户将作业放入队列中,因此我知道应该向谁收费。

我的问题是:

对于AWS账号为12345的客户A,SenderId为12345。 它看起来像一个帐户ID。

对于AWS账号为67890的客户B,SenderId为AFFFFCCUQBTZHXXMBGLTBK。 看起来完全随机......突然出现......

亚马逊AWS文档中没有任何内容表明发件人ID可以不是亚马逊帐户ID。好吧,除了匿名访问,情况并非如此。

  

问:在匿名访问的情况下,邮件的“SenderId”属性值是多少?   当AWS账户ID不可用时,Amazon SQS会提供IP地址,例如匿名用户发送消息时。

在官方API页面中,这是关于SenderId的说法

  

SenderId - 返回发件人的AWS账号(或IP地址,如果允许匿名访问)。

关于为什么会出现这种不一致的任何想法?

P.S。:我为什么关心?如果我无法映射SenderId,我无法收费:(

1 个答案:

答案 0 :(得分:1)

好的人,我在这里怀疑亚马逊身份管理器,我在这个论坛中找到了原因https://forums.aws.amazon.com/thread.jspa?messageID=390680

  

如果SQS消息的发送者使用IAM凭证,那么SenderId将是IAM用户ID,这与" AWSAccessKeyID"

不同      

如果SQS消息的发送者使用" root" AWS凭证,然后SenderId将是根帐号。

     

此信息由IAM提供:

     root用户

AmazonIdentityManagement iam = new AmazonIdentityManagementClient(new BasicAWSCredentials(accessKey, secretKey));

GetUserResult getRootUserResult = iam.getUser();
System.out.println("RootUserId: "+ getRootUserResult.getUser().getUserId());
  

打印出类似" 123412341234"

的数字      

而对于特定的Iam用户:

GetUserRequest getUserRequest = new GetUserRequest().withUserName("sqsuser");
GetUserResult getUserResult = iam.getUser(getUserRequest);
System.out.println("UserId: "+ getUserResult.getUser().getUserId());
  

打印出" AIDADEADBEEF123"