我正在考虑使用 AWS pinpoint 向我的移动应用程序发送推送通知。我已经通过控制台创建并配置了应用程序,现在我想针对它编写脚本。建议的方法是创建一个 IAM 用户,授予该用户访问 pinpoint 服务的权限,然后使用该用户的凭证。
因此我创建了一个对精确定位服务具有完全访问权限的用户。
我的策略 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 获取应用程序列表,但它给出了内部服务器错误。我确信凭证文件的格式和我使用的命令行是正确的,因为如果我使用根凭证,它就可以正常工作。
显然,我现在已经解除了阻止,因为我现在只能使用根访问权限,但能够遵循 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
使用 root 凭据再次工作
(aws)$ cp ~/.aws/credentials.root ~/.aws/credentials
(aws)$ aws pinpoint get-apps
{
"ApplicationsResponse": {
"Item": [
{
"Id": "7b7a69448a524f94a8bde1c8b2ce9ef7",
"Name": "emissionphone_MobileHub"
}
]
}
}
还要注意,它会因服务器错误而失败,而不是Access Denied
,这似乎表明精确定位服务存在问题,而不是我的凭据存在问题......
答案1
回答我自己的问题,这是因为我做了一个小改动来删除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"
}
]
}
}
因此,无论您是否愿意,推送通知似乎默认使用 mobileanalytics。