因此,我目前正在制作一个包含多个索引的DynamoDB表,并尝试管理访问控制。
我有一个我不想用作二级索引分区或排序键的密钥(organizationId),因为它在查询方面几乎没有意义。
DynamoDB表
DynamoDB二级索引
以下IAM策略条件是否会根据organizationId
有效地限制对二级索引的访问"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"anOrganizationId / Variable"
]
}
}
答案 0 :(得分:0)
以下权限策略允许使用dynamodb:Attributes条件键对二级索引(此处为示例索引名称:TopScoreDateTimeIndex)进行查询。该策略还将查询限制为仅请求已投影到索引中的特定属性。 请注意“资源和条件”部分
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "QueryOnlyProjectedIndexAttributes",
"Effect": "Allow",
"Action": [
"dynamodb:Query"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/index/TopScoreDateTimeIndex"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"TopScoreDateTime",
"GameTitle",
"Wins",
"Losses",
"Attempts"
]
},
"StringEquals": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
}
}
}
]
}
答案 1 :(得分:0)
好吧,我的建议是-您实际上可以将第二个索引设为“ OrganizationId#processId”-搜索时应始终知道组织ID-因为您计划我猜测要搜索具有特定过程的组织中的所有项目ID?
这应该为您解决(在索引上,而不是在表上)
"Condition": {
"ForAllValues:StringLike": {
"dynamodb:LeadingKeys": "${aws:PrincipalTag/organizationId}#*"
},
如果我假设标签带有组织ID