如果今天有多個團隊在同一個 AWS 帳號上開發不同系統,並且在 DynamoDB 上建置多張 Table ,為了要避免誤刪 Table ,或者不小心修改到其他團隊 Table 的設定,可以幫不同團隊在 AWS 上建立不同 User 或 Role,如同昨天Day 10: 建立 IAM User的步驟。設定過程中或完成後,就可以對該 User 或 Role 綁定客製化的 Policy ,對不同團隊做不同權限管控。
假設在 DynamoDB 有兩張 Table ,分別是 Articles
和 wwww
,今天想要讓 judy-2
這個 User 只能存取 Articles
的這張 Table,可以在設定 Policy 時, Resource 鎖定在 Articles
這張 Table 。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DescribeTableForConsole",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable"
],
"Resource": [
"arn:aws:dynamodb:*:262969866776:table/Articles"
]
},
{
"Sid": "AllowDynamodbQuery",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query"
],
"Resource": [
"arn:aws:dynamodb:*:262969866776:table/Articles"
]
}
]
}
用 cli 測試可以看到 Articles
的資料能夠被撈出來。
測試 wwww
這張 Table ,可以看到會被 AWS 擋住不能讀取,簡單實現不同 User 的權限管控。
但是上面的 Policy 設定會有一個缺點,因為 DynamoDB 的 console 會使用 ListTables 一次撈取所有 Table ,所以如果是使用 console 存取 DynamoDB ,會連原本的 Articles
也看不到。
必須把 ListTables
的權限加進去(而且是所有 Table ),才能夠順利在 console 看到 Articles
。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListTableForConsole",
"Effect": "Allow",
"Action": [
"dynamodb:ListTables"
],
"Resource": [
"arn:aws:dynamodb:*:262969866776:table/*"
]
},
{
"Sid": "DescribeTableForConsole",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable"
],
"Resource": [
"arn:aws:dynamodb:*:262969866776:table/Articles"
]
},
{
"Sid": "AllowDynamodbQuery",
"Effect": "Allow",
"Action": [
"dynamodb:Scan",
"dynamodb:Query"
],
"Resource": [
"arn:aws:dynamodb:*:262969866776:table/Articles"
]
}
]
}
但是連 wwww
也被看到了怎麼辦?別擔心,沒有給 DescribeTable
的權限, wwww
的一切還是會被封印住 😂。