Как изменить группу безопасности RDS с помощью boto3?

Я восстанавливаю (= создаю новый экземпляр) снимок состояния MySQL RDS, используя boto3. К сожалению, группа безопасности не копируется, вместо этого ей назначается группа безопасности по умолчанию, которая не имеет ограничений на входящий трафик.

Глядя на исходный экземпляр RDS, я вижу правильную группу безопасности (sg-a247eec5), прикрепленную к экземпляру RDS. Эта группа безопасности отображается в разделе EC2 - Группы безопасности и VPC - Группы безопасности, но не в разделе RDS - Группы безопасности. .

Я использую restore_db_instance_from_db but_db_instance_from_db но не вижу, где бы я прикрепил эту группу безопасности к новому экземпляру.

Я могу легко подключить правильную группу безопасности с помощью пользовательского интерфейса AWS (изменив свой экземпляр RDS).

На EC2 есть modify_instance_attribute клиент, который может изменять группы безопасности, но для него требуется InstanceId, который я не получаю из своего экземпляра RDS. Единственное, что я могу найти, это DBInstanceIdentifier.

Меня тоже смущает попытка установить правильные разрешения IAM. У меня есть RDS ARN: arn: aws: rds: ap-southeast-2: ‹account_id>: db: ‹db_instance_name>, но ModifyInstanceAttribute указан в Amazon EC2. Выбор обоих в редакторе политики дает мне сообщение об ошибке, указывающее, что ARN недействителен (что имеет смысл).


person kev    schedule 13.10.2017    source источник


Ответы (1)


Каждый раз, когда вы используете API restore_db_instance_from_db_snapshot, по умолчанию применяются default security group и default parameter group. То же самое описано в справочнике по RDS API.

Целевая база данных создается из точки восстановления исходной базы данных с большей частью исходной конфигурации с группой безопасности по умолчанию и группой параметров БД по умолчанию.

Обходной путь - использовать API modify_db_instance после завершения восстановления. 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',
)

Кроме того, вам нужна роль, выполняющая указанные выше операции с базой данных, чтобы иметь следующие разрешения политики.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1507879517000",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance",
                "rds:ModifyDBInstance",
                "rds:RebootDBInstance",
                "rds:RestoreDBInstanceFromDBSnapshot"
            ],
            "Resource": [
                "arn:aws:rds:*:XXXXXXXXXX:db:*"
            ]
        }
    ]
}
person Madhukar Mohanraju    schedule 13.10.2017
comment
rds:CreateDBInstance не требовалось. Кроме того, это просто идеальный ответ. Большое спасибо! - person kev; 16.10.2017