DynamoDB 基于资源的策略示例
当您在基于资源的策略的 Resource
字段中指定 ARN 时,只有当指定的 ARN 与其关联的 DynamoDB 资源的 ARN 匹配时,该策略才会生效。
表的基于资源的表策略
以下附加到名为 MusicCollection
的表的基于资源的策略,为 IAM 用户 John
和 Jane
授予对 MusicCollection
资源执行 GetItem 和 BatchGetItem 的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333
:user/
",
"arn:aws:iam::111122223333
:user/Jane
"
]
},
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem"
],
"Resource": [
"arn:aws:dynamodb::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/
",
"arn:aws:iam::111122223333
:user/Jane
"
]
},
"Action": [
"dynamodb:DescribeStream",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator"
],
"Resource": [
"arn:aws:dynamodb::123456789012
:table/MusicCollection
/stream/2024-02-12T18:57:26.492
"
]
}
]
}
用于对指定资源执行所有操作的基于资源的策略
要允许用户对表以及与表关联的所有索引执行所有操作,可以使用通配符(*)来表示与该表关联的操作和资源。为资源使用通配符将允许用户访问 DynamoDB 表及其所有关联索引,包括尚未创建的索引。例如,以下策略将授予用户 John
对 MusicCollection
表及其所有索引(包括将来要创建的任何索引)执行任何操作的权限。
- JSON
-
-
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "1111",
"Effect": "Allow",
"Principal":"arn:aws:iam::111122223333
:user/
",
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb::123456789012
:table/MusicCollection
",
"arn:aws:dynamodb::123456789012
:table/MusicCollection
/index/*"
]
}
]
}
用于跨账户访问的基于资源的策略
您可以为跨账户 IAM 身份指定访问 DynamoDB 资源的权限。例如,您可能需要来自可信账户的用户获得读取您表内容的权限,条件是他们只能访问这些项目中的特定项目和特定属性。以下策略允许来自可信 AWS 账户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::123456789012
:table/MusicCollection
"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": "Jane
",
"dynamodb:Attributes": [
"Artist",
"SongTitle"
]
},
"StringEquals": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
}
}
}
]
}
用户可以在 table-name
参数中指定表 ARN 来访问账户 123456789012
中的表 MusicCollection
,以此发出 GetItem
请求。
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 源(例如公司 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":"arn:aws:iam::111111111111
:user/
",
"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/
" },
"Action": "dynamodb:*",
"Resource": [
"arn:aws:dynamodb::123456789012
:table/MusicCollection
",
"arn:aws:dynamodb::123456789012
:table/MusicCollection
/*"
]
}
]
}