在 Amazon RDS 中创建、修改和删除资源的权限策略
以下各节展示了授予和限制资源访问权限的权限策略示例:
允许用户在 Amazon 账户中创建数据库实例
以下是支持 ID 为 123456789012
的账户为您的 Amazon 账户创建数据库实例的示例策略。该策略要求新数据库实例的名称以 test
开头。新数据库实例还必须使用 MySQL 数据库引擎和 db.t2.micro
数据库实例类。此外,新数据库实例必须使用以 default
开头的选项组和数据库参数组,并且它必须使用 default
子网组。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateDBInstanceOnly", "Effect": "Allow", "Action": [ "rds:CreateDBInstance" ], "Resource": [ "arn:aws:rds:*:123456789012:db:test*", "arn:aws:rds:*:123456789012:og:default*", "arn:aws:rds:*:123456789012:pg:default*", "arn:aws:rds:*:123456789012:subgrp:default" ], "Condition": { "StringEquals": { "rds:DatabaseEngine": "mysql", "rds:DatabaseClass": "db.t2.micro" } } } ] }
此策略包含一个为 用户指定以下权限的语句:
该策略可让该账户使用 CreateDBInstance API 操作创建数据库实例(这还适用于 create-db-instance Amazon CLI 命令和 Amazon Web Services Management Console)。
Resource
元素指定用户可以执行操作的资源。使用 Amazon Resource Name (ARN) 指定资源。此 ARN 包括资源所属服务的名称(rds
)、Amazon 区域(在该示例中,*
指示任何区域)、Amazon 账号(在该示例中,123456789012
为账号)以及资源的类型。有关创建 ARN 的更多信息,请参阅Amazon RDS 中的 Amazon 资源名称(ARN)。该示例中的
Resource
元素为用户指定有关资源的以下策略限制:新数据库实例的数据库实例标识符必须以
test
开头 (例如,testCustomerData1
、test-region2-data
)。新数据库实例的选项组必须以
default
开头。新数据库实例的数据库参数组必须以
default
开头。新数据库实例的子网组必须是
default
子网组。
Condition
元素指定数据库引擎必须是 MySQL 并且数据库实例类必须是db.t2.micro
。Condition
元素指定策略生效的条件。您可以通过使用Condition
元素添加其他权限或限制。有关指定条件的更多信息,请参阅Amazon RDS 的策略条件键。此示例指定rds:DatabaseEngine
和rds:DatabaseClass
条件。有关rds:DatabaseEngine
的有效条件值的信息,请参阅 CreateDBInstance 中的Engine
参数下的列表。有关rds:DatabaseClass
的有效条件值的信息,请参阅 数据库实例类支持的数据库引擎 。
该策略不指定 Principal
元素,因为在基于身份的策略中,您未指定获取权限的委托人。附加了策略的用户是隐式委托人。向 IAM 角色附加权限策略后,该角色的信任策略中标识的委托人将获取权限。
有关 Amazon RDS 操作的列表,请参阅服务授权参考中的 Amazon RDS 定义的操作。
允许用户对任何 RDS 资源执行任何 Describe 操作
以下权限策略对用户授予权限以运行以 Describe
开头的所有操作。这些操作显示有关 RDS 资源 (如数据库实例) 的信息。Resource
元素中的通配符 (*) 表示可对账户拥有的所有 Amazon RDS 资源执行操作。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowRDSDescribe", "Effect": "Allow", "Action": "rds:Describe*", "Resource": "*" } ] }
允许用户创建使用指定数据库参数组和子网组的数据库实例
以下权限策略授予权限以允许用户仅创建必须使用 mydbpg
数据库参数组和 mydbsubnetgroup
数据库子网组的数据库实例。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "rds:CreateDBInstance", "Resource": [ "arn:aws:rds:*:*:pg:mydbpg", "arn:aws:rds:*:*:subgrp:mydbsubnetgroup" ] } ] }
授予权限以允许对在特定标签中包含两个不同值的资源执行操作
您可以在基于身份的策略中使用条件,以便基于标签控制对 Amazon RDS 资源的访问。以下策略所授予的权限允许对 stage
标签设置为 development
或 test
的实例执行 CreateDBSnapshot
API 操作。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowAnySnapshotName", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:snapshot:*" }, { "Sid":"AllowDevTestToCreateSnapshot", "Effect":"Allow", "Action":[ "rds:CreateDBSnapshot" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }
以下策略所授予的权限允许对 stage
标签设置为 development
或 test
的实例执行 ModifyDBInstance
API 操作。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowChangingParameterOptionSecurityGroups", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource": [ "arn:aws:rds:*:123456789012:pg:*", "arn:aws:rds:*:123456789012:secgrp:*", "arn:aws:rds:*:123456789012:og:*" ] }, { "Sid":"AllowDevTestToModifyInstance", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance" ], "Resource":"arn:aws:rds:*:123456789012:db:*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }
防止用户删除数据库实例
以下权限策略授予权限以防止用户删除特定数据库实例。例如,您可能想禁止任何非管理员用户删除您的生产数据库实例。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyDelete1", "Effect": "Deny", "Action": "rds:DeleteDBInstance", "Resource": "arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance" } ] }
拒绝对资源的所有访问
您可以明确拒绝对资源的访问。拒绝策略优先于允许策略。以下策略明确拒绝用户管理资源的能力:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "rds:*", "Resource": "arn:aws:rds:us-east-1:123456789012:db:mydb" } ] }