场景如下:
这就是我如何识别哪个客户将作业放入队列中,因此我知道应该向谁收费。
我的问题是:
对于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,我无法收费:(
答案 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"