我的项目之一使用DynamoDB表,但是我们在该项目上的开发人员很少。我们想给出用户特定的秘密密钥和访问密钥,以便它们只能使用特定的DynamoDB表,例如(仅用于阅读访问的一个表,一个表格读写访问)。
您可以使用类似于此的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"
]
}
]
}
如下所示:
以下策略可以附加到IAM组并为用户提供 允许编程访问名称的DynamoDB表 匹配用户的名称。例如,用户BOB可以执行任何 表中的DynamoDB动作名为Bob。该政策可以附加到 一个包含允许每个人管理自己的用户的组 DynamoDB表。
因此,如果要授予完整访问表的特定用户,则可以按照以下方式设置策略:
{
"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"
],
如第一个样本中所述,访问点desc。
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
]
在这里,带有关键字" forallValues:string equals"。指定的用户 只能请求属性" UserId"one_answers" TopScore"。
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"UserId",
"TopScore"
]
}
可以在以下说明中理解字符串Equequalsifexists的定义:
"权限策略 以下:
如果用户指定选择参数,则其值必须为 特定_attributes。该要求阻止了API动作 返回任何不允许的属性,例如从索引 投影。如果用户指定returnValues参数,则 值必须无,updated_old或updated_new。这是必需的 因为updateItem操作还执行隐式读取操作 要检查一个物品是否在替换之前存在,以便 如果要求,可以返回以前的属性值。限制 以这种方式返回价值可确保用户只能读取或编写 允许的属性。StringEqualsifexists的条款仅确保 这些参数之一 - 选择或返回值 - 可以使用 请求,在允许的操作的上下文中。
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES",
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
}
您可以在这里找到完整的样本。