AWS:通过脚本访问 pinpoint 的 IAM 用户凭证导致 InternalServerError

AWS:通过脚本访问 pinpoint 的 IAM 用户凭证导致 InternalServerError

我正在考虑使用 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。

相关内容