2017-06-22 19 views
0

amazon Dynamo DBを初めて使用しています。アクセスが拒否されました。
これから私を助けてください。AWS DynamoDBのAccessDeniedException

エラー:

User: arn:aws:sts::xx:assumed-role/Cognito_SampleUnauth_Role/CognitoIdentityCredentials is not authorized to perform: dynamodb:DescribeTable on resource: arn:xxx

答えて

1

まず、あなたの想定したロールは、DynamoDBのにアクセスする権限を持っていることを確認してください。

ラップトップからEC2/Beanstalkではなくアプリを実行する場合は、STS認証情報(http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html)を設定してください。

AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials); 
     amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint); 
     amazonDynamoDB.setRegion(Region.getRegion(Regions.valueOf(amazonAWSRegion))); 
     return new DynamoDBMapper(amazonDynamoDB); 

とDynamoDBMapperであなたのようなCRUD操作を行うことができますが:あなたはDynamoDBMapperのinstanseを作成することができます。その後

public Credentials getCredentialsFromAssumedRole() { 
     AWSSecurityTokenService awsSecurityTokenService = AWSSecurityTokenServiceClientBuilder.defaultClient(); 
     AssumeRoleRequest assumeRequest = new AssumeRoleRequest() 
       .withRoleArn("arn:aws:iam::XX:role/assume-role-DynamoDB-ReadOnly") 
       .withDurationSeconds(3600) 
       .withRoleSessionName("assumed-role-session"); 

     AssumeRoleResult assumeResult = awsSecurityTokenService.assumeRole(assumeRequest); 
     Credentials credentials = assumeResult.getCredentials(); 
     return credentials; 
    } 

:想定したロールから認証情報を受信するために

は、次のように使用することができます

dynamoDBMapper.save(entity); 
dynamoDBMapper.load(Entity.class, entityId); 

@karthik、これは以前と同じですか?何が起こっているのかを理解するためにコードを投稿してください。

+0

私は次のURLの例を使用しています。私はこのアプリケーション "DynamoDBMapper_UserPreference_Cognito"を使用しています..そのアプリケーションで私は自分の認証情報と地域のみを変更します.. https://github.com/awslabs/aws-sdk-android-samples .. – karthik