如何让未经身份验证的 Cognito 用户访问 AWS 上的 Dynamobdb?
how do I let unauthenticated Cognito users access the Dynamobdb on AWS?
与 Parse 相比,AWS 有一些学习曲线:)
- 我在 dynamodb 中创建了一个名为 "dynamotest"
的 table
- IAM 显示我定义了以下角色 (policygen-Cognito_awst1Unauth_Role-201603071632):
{
"Version": "2012-10-17",
"Statement":[
{
"Sid": "Stmt1457368244000",
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Resource": [
"arn:aws:dynamodb:eu-west-1:579313493028:table/dynamotest"
]
}
]
}
在 Xamarin 应用程序中,我有以下代码:
// 测试对 Dynamo 的访问
var client = new AmazonDynamoDBClient(credentials, RegionEndpoint.EUWest1);
Table table = Table.LoadTable(client, "dynamotest");
var book = new Document();
book["Id"] = 101;
book["Title"] = "Book 101 Title";
book["ISBN"] = "11-11-11-11";
book["Authors"] = new List<string> { "Author 1", "Author 2" };
book["InStock"] = new DynamoDBBool(true);
book["QuantityOnHand"] = new DynamoDBNull();
table.PutItemAsync(book);
"credentials" 是使用 Cognito 身份池 ID 创建的未经身份验证的用户的 Cognito 凭据。 Cognito 与这些凭据同步工作正常。
运行这段代码没有数据放table.I也试过使用对象持久化模型,结果一样。
我错过了什么步骤?没有错误 - 如果数据没有从 table 中丢失,我什至不知道出了什么问题。
所以两个问题:
1/ 如何为未经身份验证的 Cognito 用户启用对 Dynamodb 的访问。我需要创建一些任意用户并附加 role/policy 吗??? Regionpoint 有问题吗(因为我在欧洲)?
2/ 如何使用适用于 Xamarin 的 AWS 开发工具包检查 errors/problems?
请帮忙 - 谢谢!!
使用具有未经身份验证的 Cogntio 身份的 dynamodb 的一般流程是您创建一个身份池并将自动生成的 unauth 策略修改为允许访问您的 dynamodb table 的新策略。然后,您可以将 Cogntio 凭据用于未经身份验证的身份,以对 dynamodb 执行操作。
如果您可以将您的 'table.PutItemAsync(book) 更改为 'await table.PutItemAsync(book)' 然后将该代码包装在 try/catch 块中,它将捕获您可以记录的服务异常并调试实际错误是什么。
以下是一些特定于您的用例的文档,用于将 DynamoDb 与 Cogntio 结合使用
http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/dynamodb_om.html
http://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/dynamodb-integration-docmodel.html
与 Parse 相比,AWS 有一些学习曲线:)
- 我在 dynamodb 中创建了一个名为 "dynamotest" 的 table
- IAM 显示我定义了以下角色 (policygen-Cognito_awst1Unauth_Role-201603071632):
{ "Version": "2012-10-17", "Statement":[ { "Sid": "Stmt1457368244000", "Effect": "Allow", "Action": [ "dynamodb:*" ], "Resource": [ "arn:aws:dynamodb:eu-west-1:579313493028:table/dynamotest" ] } ] }
在 Xamarin 应用程序中,我有以下代码:
// 测试对 Dynamo 的访问
var client = new AmazonDynamoDBClient(credentials, RegionEndpoint.EUWest1);
Table table = Table.LoadTable(client, "dynamotest");
var book = new Document();
book["Id"] = 101;
book["Title"] = "Book 101 Title";
book["ISBN"] = "11-11-11-11";
book["Authors"] = new List<string> { "Author 1", "Author 2" };
book["InStock"] = new DynamoDBBool(true);
book["QuantityOnHand"] = new DynamoDBNull();
table.PutItemAsync(book);
"credentials" 是使用 Cognito 身份池 ID 创建的未经身份验证的用户的 Cognito 凭据。 Cognito 与这些凭据同步工作正常。
运行这段代码没有数据放table.I也试过使用对象持久化模型,结果一样。
我错过了什么步骤?没有错误 - 如果数据没有从 table 中丢失,我什至不知道出了什么问题。
所以两个问题: 1/ 如何为未经身份验证的 Cognito 用户启用对 Dynamodb 的访问。我需要创建一些任意用户并附加 role/policy 吗??? Regionpoint 有问题吗(因为我在欧洲)?
2/ 如何使用适用于 Xamarin 的 AWS 开发工具包检查 errors/problems?
请帮忙 - 谢谢!!
使用具有未经身份验证的 Cogntio 身份的 dynamodb 的一般流程是您创建一个身份池并将自动生成的 unauth 策略修改为允许访问您的 dynamodb table 的新策略。然后,您可以将 Cogntio 凭据用于未经身份验证的身份,以对 dynamodb 执行操作。
如果您可以将您的 'table.PutItemAsync(book) 更改为 'await table.PutItemAsync(book)' 然后将该代码包装在 try/catch 块中,它将捕获您可以记录的服务异常并调试实际错误是什么。
以下是一些特定于您的用例的文档,用于将 DynamoDb 与 Cogntio 结合使用
http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/dynamodb_om.html http://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/dynamodb-integration-docmodel.html