【问题标题】:How to change RDS Security Group using boto3?如何使用 boto3 更改 RDS 安全组?
【发布时间】:2018-03-25 04:07:46
【问题描述】:

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

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

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

我可以使用 AWS UI(修改我的 RDS 实例)轻松附加正确的安全组。

EC2 客户端上有 modify_instance_attribute 可以更改安全组,但它需要一个 InstanceId,我不是从我的 RDS 实例中获得的。我唯一能找到的是 DBInstanceIdentifier

尝试设置正确的 IAM 权限也让我感到困惑。我有一个 RDS ARN:arn:aws:rds:ap-southeast-2::db: 但 ModifyInstanceAttribute 列在 Amazon EC2 下。在策略编辑器中同时选择这两个选项会给我一个错误,提示 ARN 无效(这是有道理的)。

【问题讨论】:

    标签: amazon-ec2 amazon-rds aws-security-group


    【解决方案1】:

    每当您使用 restore_db_instance_from_db_snapshot api 时,默认行为是应用 default security groupdefault parameter groupRDS API reference 中记录了相同的内容。

    目标数据库是从源数据库还原点创建的 具有大多数原始配置和默认安全性 组和默认的数据库参数组。

    解决方法是在还原完成后使用 modify_db_instance 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,
    
    )
    

    我相信您需要同时更改安全组和参数组(除非您可以使用默认组)。如果要更改参数组,则还需要重启数据库实例才能使设置生效。

    response = client.reboot_db_instance(
        DBInstanceIdentifier='string',
    )
    

    另外,您需要执行上述数据库操作的角色拥有以下策略权限。

    {
        "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 不需要。除此之外,这只是一个完美的答案。谢谢大家!
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2021-11-05
    • 2017-08-01
    • 2016-04-08
    • 2015-06-07
    相关资源
    最近更新 更多