Amazon ec2 如何使用boto3更改RDS安全组?

Amazon ec2 如何使用boto3更改RDS安全组?,amazon-ec2,amazon-rds,aws-security-group,Amazon Ec2,Amazon Rds,Aws Security Group,我正在使用恢复(=创建新实例)RDS MySQL快照。不幸的是,安全组没有被复制,而是被分配了默认的安全组,该安全组对传入流量没有限制 查看源RDS实例,我可以看到连接到RDS实例的正确安全组(sg-a247eec5)。此安全组在EC2-安全组和VPC-安全组下可见,但在RDS-安全组下不可见 我正在使用,但我看不到将该安全组附加到新实例的位置 通过使用AWS UI(修改我的RDS实例),我可以轻松地连接正确的安全组 EC2客户端上有一个可以更改安全组的实例,但它需要一个InstanceId,我

我正在使用恢复(=创建新实例)RDS MySQL快照。不幸的是,安全组没有被复制,而是被分配了默认的安全组,该安全组对传入流量没有限制

查看源RDS实例,我可以看到连接到RDS实例的正确安全组(sg-a247eec5)。此安全组在EC2-安全组和VPC-安全组下可见,但在RDS-安全组下不可见

我正在使用,但我看不到将该安全组附加到新实例的位置

通过使用AWS UI(修改我的RDS实例),我可以轻松地连接正确的安全组

EC2客户端上有一个可以更改安全组的实例,但它需要一个InstanceId,我无法从RDS实例中获得该ID。我只能找到DBInstanceIdentifier


试图设置正确的IAM权限也让我感到困惑。我有一个RDS ARN:ARN:aws:RDS:ap-Southast-2::db:但是ModifyInstanceAttribute列在Amazon EC2下。在策略编辑器中选择这两个选项会给我一个错误,说明ARN无效(这是有意义的)。

无论何时使用从\u db\u snapshotapi还原\u db\u instance\u,默认行为都是应用
默认安全组
默认参数组
。这一点在中有记录

目标数据库是从源数据库还原点创建的 使用最原始的配置和默认的安全性 组和默认的DB参数组

解决方法是在恢复完成后使用修改\u db\u实例api。 DBInstanceIdentifier对于RDS实例而言,就像InstanceId对于EC2实例一样

将上面使用的相同的DBInstanceIdentifier作为此api的输入

response = client.modify_db_instance(
    DBInstanceIdentifier='string',
    DBSecurityGroups=[
        'string',
    ], /* If you are using ec2 security groups then remove this and use VpcSecurityGroupIds. */

    VpcSecurityGroupIds=[
        'string',
    ],
    DBParameterGroupName='string',
    ApplyImmediately=True,

)
我认为您需要同时更改安全组和参数组(除非您对默认组没有意见)。如果要更改参数组,则还需要重新启动db实例,以使设置生效

response = client.reboot_db_instance(
    DBInstanceIdentifier='string',
)
此外,您需要执行上述db操作的角色具有以下策略权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1507879517000",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance",
                "rds:ModifyDBInstance",
                "rds:RebootDBInstance",
                "rds:RestoreDBInstanceFromDBSnapshot"
            ],
            "Resource": [
                "arn:aws:rds:*:XXXXXXXXXX:db:*"
            ]
        }
    ]
}

rds:CreateDBInstance
不需要。除此之外,这只是一个完美的答案。谢谢你!