我正在尝试使用SDK本身(Location(中的一些新的Amazon定位服务端点,但遇到了一些不一致的错误。
即使IAM角色geo:*
中允许所有内容(对于每个资源都相同(,我也总是发现locationClient.listGeofences
之类的函数未授权的错误。
任意地,其他一些函数,如getMapStyleDescriptor
、searchPlaceIndexForText
或calculateRoute
,都不会产生问题。这些函数在geo:...
中使用各自的策略,所以我很困惑它是如何检测某些策略而不检测其他策略的。
这个错误很常见,它显示了以下内容和已经允许的策略:
Uncaught (in promise) AccessDeniedException: User: arn:aws:sts::xxxx:assumed-role/AmazonLocationTestRole/CognitoIdentityCredentials is not authorized to perform: geo:ListGeofences on resource: arn:aws:geo:eu-west-1:xxxx:*
请注意,访问权限适用于Cognito中身份池中未经身份验证的用户,但这不应该是问题所在。
const client = new AWS.Location({
credentials: credentials,
region: AWS.config.region
});
console.log(await client.listGeofences({
CollectionName: "explore.geofence-collection"
}).promise())
console.log(await client.getMapStyleDescriptor({
MapName: mapName
}).promise());
以防万一,IAM角色中的信任关系如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "eu-west-1:xxxx"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "unauthenticated"
}
}
}
]
}
亚马逊定位服务中每种资源的每一项政策都是允许的。
你知道会发生什么吗?
非常感谢!
根据https://docs.aws.amazon.com/location/latest/developerguide/authenticating-using-cognito.html#cognito-创建用户池未经身份验证的身份只能访问以下操作:
- geo:GetMap*
- geo:搜索位置索引*
- geo:BatchUpdateDevicePosition
- geo:计算路线