我的一个项目使用了dynamodb表,但我们在该项目上的开发人员很少。我们希望提供用户特定的密钥和访问密钥,以便他们只能使用特定的dynamodb表,例如(一个表仅用于读访问,一个表用于读写访问)。
答案 0 :(得分:1)
您可以使用与此类似的IAM政策并将其附加到您的群组或用户:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "StatementForTable1",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:BatchGetItem"
],
"Resource": [
"arn:aws:dynamodb:REGION:ACCOUNT:table/Table1"
]
},
{
"Sid": "StatementForTable2",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:REGION:ACCOUNT:table/Table2"
]
}
]
}
答案 1 :(得分:1)
正如Here所述:
以下策略可以附加到IAM组并为用户提供 以编程方式访问名称的DynamoDB表的权限 匹配用户的名字。例如,用户Bob可以执行任何操作 名为Bob的表中的DynamoDB操作。该政策可以附加到 包含允许每个用户管理自己的用户的组 DynamoDB表。
因此,如果您要为表格的特定用户授予 FULL 访问权限,则可以将政策设置为:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "arn:aws:dynamodb:AWS-REGION-IDENTIFIER:ACCOUNT-ID-WITHOUT-HYPHENS:table/${aws:username}"
}]
}
使用IAM策略条件进行细粒度访问控制
例如,假设我们要授予限制对表中特定属性的访问权限的权限:
IAM政策示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LimitAccessToSpecificAttributes",
"Effect": "Allow",
"Action": [
"dynamodb:UpdateItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:BatchGetItem",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"UserId",
"TopScore"
]
},
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES",
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
}
}
}
]
}
说明:
这部分是让相关用户可以执行的操作。
"Action": [
"dynamodb:UpdateItem",
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:BatchGetItem",
"dynamodb:Scan"
],
如第一个示例中所述,访问点描述
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
]
这里使用关键字'ForAllValues:StringEquals'。指定的用户 只能请求属性“UserId”和“TopScore”。
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"UserId",
"TopScore"
]
}
可以在以下说明中理解StringEqualsIfExists的定义:
权限策略中的StringEqualsIfExists子句确保了 以下内容:
如果用户指定Select参数,则其值必须为 SPECIFIC_ATTRIBUTES。此要求会阻止API操作 返回任何不允许的属性,例如索引 投影。如果用户指定ReturnValues参数,那么它 值必须为NONE,UPDATED_OLD或UPDATED_NEW。这是必需的 因为UpdateItem操作还执行隐式读取操作 在更换之前检查项目是否存在,以便这样做 如果请求,可以返回先前的属性值。限制 ReturnValues以这种方式确保用户只能读取或写入 允许的属性。 StringEqualsIfExists子句仅保证 可以使用其中一个参数 - Select或ReturnValues 请求,在允许的操作的上下文中。
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES",
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
}
您可以找到完整的样本here。