DynamoDB 資源型政策範例 - Amazon DynamoDB

DynamoDB 資源型政策範例

當您在資源型政策的 Resource 欄位中指定 ARN 時,僅當該 ARN 與其所附加的 DynamoDB 資源 ARN 相符時,政策才會生效。

注意

請以資源特定資訊取代斜體文字。

資料表的資源型政策

下列資源型政策附加至名為 MusicCollection 的 DynamoDB 資料表,授予 IAM 使用者 JohnJaneMusicCollection 資源上執行 GetItemBatchGetItem 動作的權限。

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 使用者 JohnJane2024-02-12T18:57:26.492 資源上執行 GetRecordsGetShardIteratorDescribeStream 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 資料表及其所有相關索引,包括尚未建立的索引。例如,下列政策將授予使用者 JohnMusicCollection 資料表及其所有索引執行任何動作的權限,包括未來建立的索引。

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 的項目,並且只能擷取屬性 ArtistSongTitle,無法讀取其他屬性。

重要

如果未指定 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/242001: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 實體在 MusicCollectionMusicCollection 兩個 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/*" ] } ] }