AWS:通过脚本访问精确定位的IAM用户凭据会导致InternalServerError

我正在考虑使用AWS pinpoint将推送通知发送到我的移动应用程序。 我已经通过控制台创build和configuration了应用程序,现在我想对其进行编写脚本。 推荐的方法是创build一个IAM用户,让用户访问精确定位的服务,然后使用用户的凭证。

所以我创build了一个完全访问精确定位服务的用户。

用户页面的屏幕截图显示了精确的权限

我的政策JSON直接从示例http://docs.aws.amazon.com/pinpoint/latest/developerguide/permissions-actions.html复制,除了我删除了mobileanalytics因为我只想使用推送通知。

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobiletargeting:*", ], "Resource": "*" } ] } 

然后,我将用户凭据复制到〜/ .aws / credentials中,并尝试使用CLI获取应用程序的列表,并给我一个内部服务器错误。 我确信凭证文件的格式和我使用的命令行是正确的,因为如果我使用根证书,它的工作原理。

显然,现在我已经畅通无阻了,因为我现在可以只使用root访问权限,但是能够遵循AWS最佳实践是一件好事。

使用根证书

 (aws)$ aws pinpoint get-apps { "ApplicationsResponse": { "Item": [ { "Id": "7b7a69448a524f94a8bde1c8b2ce9ef7", "Name": "emissionphone_MobileHub" } ] } } 

iam用户凭证失败

 (aws)$ cp ~/.aws/credentials.iam_user ~/.aws/credentials (aws)$ aws pinpoint get-apps An error occurred (InternalServerErrorException) when calling the GetApps operation (reached max retries: 4): Internal server error 

再次使用根证书工作

 (aws)$ cp ~/.aws/credentials.root ~/.aws/credentials (aws)$ aws pinpoint get-apps { "ApplicationsResponse": { "Item": [ { "Id": "7b7a69448a524f94a8bde1c8b2ce9ef7", "Name": "emissionphone_MobileHub" } ] } } 

另外请注意,它与服务器错误,而不是Access Denied ,这似乎表明与精确的服务,而不是我的凭据问题…

回答我自己的问题,这是因为我为取消mobileanalytics所做的小改动。 如果我改变政策

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobiletargeting:*", "mobileanalytics:*" ], "Resource": "*" } ] } 

IAM用户凭证也可以工作

 (aws)$ cp ~/.aws/credentials.iam_user ~/.aws/credentials (aws)$ aws pinpoint get-apps { "ApplicationsResponse": { "Item": [ { "Id": "7b7a69448a524f94a8bde1c8b2ce9ef7", "Name": "emissionphone_MobileHub" } ] } } 

所以它看起来像推送通知默认情况下使用移动分析,无论你是否希望他们。