数据库安全组只能与使用 API 版本的 VPC 数据库实例关联

Posted

技术标签:

【中文标题】数据库安全组只能与使用 API 版本的 VPC 数据库实例关联【英文标题】:DB Security Groups can only be associated with VPC DB Instances using API versions 【发布时间】:2015-06-08 15:38:55 【问题描述】:

我有以下代码在 aws 中创建 RDS 实例:

import boto.rds

REGION="us-east-1"
INSTANCE_TYPE="db.t1.micro"
ID = "mysql-db-instance-database-test2"
USERNAME="root"
PASSWORD = "pass"
DB_PORT = 3306
DB_SIZE = 5
DB_ENGINE = "MySQL5.1"
DB_NAME = "databasetest2"
SECGROUP_HANDLE="default"

print "Connecting to RDS"

conn = boto.rds.connect_to_region(REGION)

print "Creating a RDS Instance"

instance = conn.create_dbinstance(ID, DB_SIZE, INSTANCE_TYPE, USERNAME, PASSWORD, port=DB_PORT, engine=DB_ENGINE,db_name=DB_NAME, security_groups = [SECGROUP_HANDLE],)

print instance

但我总是遇到与安全组相关的错误:

数据库安全组只能与使用 API 版本 2012-01-15 到 2012-09-17 的 VPC 数据库实例相关联。

谁能帮忙解决这个问题?

如果我使用 vpc_security_groups 而不是 security_groups 我有:

 <Message>Invalid security group , groupId= f, u, d, t, e, a, l, groupName=.</Message>

【问题讨论】:

这将有助于查看堆栈跟踪和确切的错误消息。基于this similar thread,我有一种预感,您会遗漏一些错误消息(即某些特定的 API 版本)... 感谢您的评论。我忘记了完整的信息,但现在我用它更新了问题! 【参考方案1】:

VPC 中的 RDS 实例不能是 RDS 安全组的成员。相反,VPC 中的 RDS 应位于 VPC 安全组中。在 boto 中,使用 vpc_security_groups 参数(以 VPC 安全组 ID 作为其值)而不是 security_groups 参数。对于create_dbinstance(),另请参阅boto RDS docs。

【讨论】:

Upaang 的回答也很有趣。您可以改用版本 2,在这种情况下,create_dbinstance() 保持相同的功能,但 vpc_security_groups 参数已更改为 vpc_security_group_ids 感谢您的回答。但我不明白为什么我有这个 vpc 错误。我没有使用任何 vpc,我的问题代码中没有任何与 vpc 相关的内容,只有我遇到的错误。但我尝试使用 vpc_security_groups 而不是 security_groups 但不起作用! 我也有这个:TypeError: create_dbinstance() got an unexpected keyword argument 'vpc_security_group_ids'【参考方案2】:

Boto 正在将 RDSConnection 从版本 1 迁移到版本 2。您可以查看 this - 之前我们可以使用get_all_dbinstances() 获取所有db_instances,但现在我们只能使用describe_db_instances() 获取。 尝试使用vpc_security_group()。 新版RDS即RDS2的官方文档为here。

【讨论】:

【参考方案3】:

可能有效。我的脚本没有收到错误,但我的客户是。我猜这是因为我有一个默认的 VPC 安全组,AWS 正在默默地使用它,而他没有。

boto.rds.RDSConnection.APIVersion = '2012-09-17'

想法是,由于此 API 在指定范围内(在末尾),因此错误将不适用。

我的想法来自https://github.com/boto/boto/issues/2923

【讨论】:

以上是关于数据库安全组只能与使用 API 版本的 VPC 数据库实例关联的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk:将数据库安全组迁移到 VPC 安全组

如何从 AWS 胶水访问 VPC 中的 aws 资源?

aws 创建基于vpc的elasticsearch service

Terraform - 在 VPC 对等连接之间授权安全组

如何描述 VPC 的安全组?

数据库实例和EC2安全组在不同的VPC,cloudFormation错误