iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Build on AWS

亞馬遜熱帶雨林生存日記系列 第 11

Day 11: DynamoDB IAM 實戰 - Table Level 權限設計和踩坑實錄

  • 分享至 

  • xImage
  •  

如果今天有多個團隊在同一個 AWS 帳號上開發不同系統,並且在 DynamoDB 上建置多張 Table ,為了要避免誤刪 Table ,或者不小心修改到其他團隊 Table 的設定,可以幫不同團隊在 AWS 上建立不同 User 或 Role,如同昨天Day 10: 建立 IAM User的步驟。設定過程中或完成後,就可以對該 User 或 Role 綁定客製化的 Policy ,對不同團隊做不同權限管控。

假設在 DynamoDB 有兩張 Table ,分別是 Articleswwww ,今天想要讓 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 的一切還是會被封印住 😂。


上一篇
Day 10: 建立 IAM User
系列文
亞馬遜熱帶雨林生存日記11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言