Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AmazonServiceException:用户无权执行:dynamodb:可描述状态代码:400;错误代码:AccessDeniedException_Android_Amazon Web Services_Amazon Dynamodb_Amazon Iam_Amazon Cognito - Fatal编程技术网

Android AmazonServiceException:用户无权执行:dynamodb:可描述状态代码:400;错误代码:AccessDeniedException

Android AmazonServiceException:用户无权执行:dynamodb:可描述状态代码:400;错误代码:AccessDeniedException,android,amazon-web-services,amazon-dynamodb,amazon-iam,amazon-cognito,Android,Amazon Web Services,Amazon Dynamodb,Amazon Iam,Amazon Cognito,我原本以为这个问题是由于区域不匹配造成的,但在更改区域后,我在尝试此处找到的Amazon AWS示例时仍然遇到以下错误: 一切或多或少都是一样的,我唯一改变的是将DBclient区域更改为US\u EAST\u 1,在这里托管我的测试表,并使用“Amazon Cognoto Starter code”页面中的信息修改常量文件,该页面是通过遵循Cognoto get started文档生成的 对于我的Cognito_AndroidAppUnauth_DefaultRole角色策略,我修改了默认

我原本以为这个问题是由于区域不匹配造成的,但在更改区域后,我在尝试此处找到的Amazon AWS示例时仍然遇到以下错误:

一切或多或少都是一样的,我唯一改变的是将
DBclient
区域更改为
US\u EAST\u 1
,在这里托管我的测试表,并使用“Amazon Cognoto Starter code”页面中的信息修改常量文件,该页面是通过遵循Cognoto get started文档生成的

对于我的
Cognito_AndroidAppUnauth_DefaultRole
角色策略,我修改了默认的移动分析和同步服务权限,以包括对所有表(无论是否存在)上所有操作的访问:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CognitoPolicy",
            "Action": [
                "mobileanalytics:PutEvents",
                "cognito-sync:*"
            ],
            "Effect": "Allow",
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "DynamoDBPolicy",
            "Effect": "Allow",
            "Action": [
                "dynamodb: *"
            ],
            "Resource": "*"
        }
    ]
}
那么,当使用了正确的区域并且Unauth策略应该允许表访问时,为什么它声称它没有权限呢

EDIT:Stacktrace当调用DynamoDB资源(createtable)上的方法时,如果它被证明有用的话

   com.amazonaws.AmazonServiceException: User: arn:aws:sts::[My Account ARN]:assumed-role/Cognito_AndroidAppUnauth_DefaultRole/ProviderSession is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:[My Account ARN]:table/test_table (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: SDELNSMLO10EV7CM2STC1R9RU3VV4KQNSO5AEMVJF66Q9ASUAAJG)
            at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(Unknown Source)
            at com.amazonaws.http.AmazonHttpClient.executeHelper(Unknown Source)
            at com.amazonaws.http.AmazonHttpClient.execute(Unknown Source)
            at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(Unknown Source)
            at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.createTable(Unknown Source)
            at com.amazonaws.demo.userpreferencesom.DynamoDBManager.createTable(DynamoDBManager.java:72)
            at com.amazonaws.demo.userpreferencesom.UserPreferenceDemoActivity$DynamoDBManagerTask.doInBackground(UserPreferenceDemoActivity.java:99)
            at com.amazonaws.demo.userpreferencesom.UserPreferenceDemoActivity$DynamoDBManagerTask.doInBackground(UserPreferenceDemoActivity.java:85)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)

与Amazon工程师合作,发现问题出在策略配置中:

"dynamodb: *"
应该是

"dynamodb:*"

一个空格能做的事情真是太神奇了。

在我的例子中,我的表名包含了一个“/”字符,这是无效的。从表名中删除“/”字符解决了问题。

您可以改为向lambda角色分配权限,如下所示:


Cool,我正要发布这篇文章-AWS支持也非常好:)是的,GitHub问题比AWS论坛要好得多,至少在使用亚马逊提供的示例资源方面是如此。如果它是您自己设计的其他疯狂代码,它们可能不会有帮助,因为它与示例项目无关。XP@KurtWagner:策略配置位于何处?@anasazem应位于IAM控制台中。
"dynamodb:*"