DynamoDB 資源型政策範例
當您在資源型政策的 Resource 欄位中指定 ARN 時,僅當該 ARN 與其所附加的 DynamoDB 資源 ARN 相符時,政策才會生效。
資料表的資源型政策
下列資源型政策附加至名為 MusicCollection 的 DynamoDB 資料表,授予 IAM 使用者 John 和 Jane 在 MusicCollection 資源上執行 GetItem 與 BatchGetItem 動作的權限。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/username",
"arn:aws:iam::111122223333:user/Jane"
]
},
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
]
}
]
}
串流的資源型政策
下列資源型政策附加至名為 2024-02-12T18:57:26.492 的 DynamoDB 串流,授予 IAM 使用者 John 和 Jane 在 2024-02-12T18:57:26.492 資源上執行 GetRecords、GetShardIterator 與 DescribeStream API 動作的權限。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:user/username",
"arn:aws:iam::111122223333:user/Jane"
]
},
"Action": [
"dynamodb:DescribeStream",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
]
}
]
}
資源型政策:允許對指定資源執行所有動作的存取權
若要允許使用者對資料表及其所有相關索引執行所有動作,您可以使用萬用字元 (*) 來表示與該資料表相關的動作和資源。將萬用字元用於資源時,使用者即可存取 DynamoDB 資料表及其所有相關索引,包括尚未建立的索引。例如,下列政策將授予使用者 John 對 MusicCollection 資料表及其所有索引執行任何動作的權限,包括未來建立的索引。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/role-name"
},
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/index/index-name"
]
}
]
}
跨帳戶存取權資源型政策
您可以為跨帳戶的 IAM 身分指定存取 DynamoDB 資源的權限。例如,您可能需要讓受信任帳戶的使用者讀取資料表內容,但僅能存取特定項目及其特定屬性。下列政策允許受信任帳戶 ID 111111111111 中的使用者 John 透過 GetItem API 存取帳戶 123456789012 的資料表資料。此政策可確保使用者僅能存取主索引鍵為 Jane 的項目,並且只能擷取屬性 Artist 和 SongTitle,無法讀取其他屬性。
如果未指定 SPECIFIC_ATTRIBUTES 條件,系統將傳回項目的所有屬性。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "CrossAccountTablePolicy",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/John"
},
"Action": "dynamodb:GetItem",
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": "Jane",
"dynamodb:Attributes": [
"Artist",
"SongTitle"
]
},
"StringEquals": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
}
}
}
]
}
除了上述資源型政策外,附加於使用者 John 的身分型政策也必須允許相關的 GetItem API 動作,才能使跨帳戶存取權運作。以下範例顯示您必須附加至使用者 John 的身分型政策。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "CrossAccountIdentityBasedPolicy",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem"
],
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": "Jane",
"dynamodb:Attributes": [
"Artist",
"SongTitle"
]
},
"StringEquals": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
}
}
}
]
}
使用者 John 可以在 table-name 參數中指定資料表 ARN,提出 GetItem 請求以存取帳戶 123456789012 中的 MusicCollection 資料表。
aws dynamodb get-item \
--table-name arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
--key '{"Artist": {"S": "Jane"}' \
--projection-expression 'Artist, SongTitle' \
--return-consumed-capacity TOTAL
含 IP 位址條件的資源型政策
您可以套用條件以限制來源 IP 位址、虛擬私有雲端 (VPC),以及 VPC 端點 (VPCE)。您可以根據請求的來源 IP 位址指定權限。例如,您可能僅允許使用者從特定 IP 來源 (如公司 VPN 端點) 存取 DynamoDB 資源。請在 Condition 陳述式中指定這些 IP 位址。
下列範例允許使用者 John 在來源 IP 位址為 54.240.143.0/24 和 2001:DB8:1234:5678::/64 時,存取任何 DynamoDB 資源。
- JSON
-
-
{
"Id":"PolicyId2",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowIPmix",
"Effect":"Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/username"
},
"Action":"dynamodb:*",
"Resource":"*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
}
}
}
]
}
您也可以拒絕所有對 DynamoDB 資源的存取,除非來源是特定的 VPC 端點,例如 vpce-1a2b3c4d。
- JSON
-
-
{
"Id":"PolicyId",
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AccessToSpecificVPCEOnly",
"Principal": "*",
"Action": "dynamodb:*",
"Effect": "Deny",
"Resource": "*",
"Condition": {
"StringNotEquals":{
"aws:sourceVpce":"vpce-1a2b3c4d"
}
}
}
]
}
使用 IAM 角色的資源型政策
您也可以在資源型政策中指定 IAM 服務角色。取得此角色的 IAM 實體,將受限於該角色中所指定的允許動作,以及資源型政策中定義的特定資源集合。
下列範例允許 IAM 實體在 MusicCollection 與 MusicCollection 兩個 DynamoDB 資源上執行所有 DynamoDB 動作。
- JSON
-
-
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" },
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
"arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/*"
]
}
]
}