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

Terraform-授权VPC对等连接之间的安全组,terraform,amazon-vpc,terraform-provider-aws,aws-security-group,Terraform,Amazon Vpc,Terraform Provider Aws,Aws Security Group,我在AWS上运行,我有VPC-A和VPC-B 我在两个VPC之间进行了VPC对等 我想允许从VPC-B中的SecurityGroupB到VPC-A中的SecurityGroupA的流量 到目前为止,我使用ruby客户机完成了以下调用 security\u group\u a.授权进入( ip_权限:[ { 从_端口:“-1”, ip_协议:“-1”, 至_端口:“-1”, 用户\标识\组\对:[ { description:“接受来自SecurityGroupB的所有流量”, 组id:安全组id

我在AWS上运行,我有VPC-A和VPC-B 我在两个VPC之间进行了VPC对等

我想允许从VPC-B中的SecurityGroupB到VPC-A中的SecurityGroupA的流量

到目前为止,我使用ruby客户机完成了以下调用

security\u group\u a.授权进入(
ip_权限:[
{
从_端口:“-1”,
ip_协议:“-1”,
至_端口:“-1”,
用户\标识\组\对:[
{
description:“接受来自SecurityGroupB的所有流量”,
组id:安全组id,
vpc_id:vpc_b.id,
vpc_对等_连接_id:peering_连接_id,
},
],
},
]
)
我看过terraform的,但找不到任何与上述设置相同的东西

当我尝试将安全组B放入安全组A的入口时,我得到以下错误:

Error: Error authorizing security group rule type ingress: InvalidGroup.NotFound: You have specified two resources that belong to different networks

我做错了什么?假设已设置对等连接,如何创建允许流量从VPC B上的安全组进入VPC a上的安全组的规则?

如果满足以下条件,则安全组规则可以引用对等VPC中的安全组:

  • 专有网络必须位于同一区域
  • 对等连接必须处于活动状态
  • 如果对等VPC位于另一个帐户中,则引用必须包含作为前缀的帐户号。例如,
    123456789012/sg-1a2b3c4d
    只要满足这些条件,你就不会有问题

    下面是一个关于地形资源外观的示例:

    resource "aws_security_group_rule" "example" {
      type                     = "ingress"
      from_port                = 0
      to_port                  = 65535
      protocol                 = "tcp"
      security_group_id        = "sg-123456"
      source_security_group_id = "sg-789012"
    }
    

    因此@Ben Whaley的回答在入口规则中指定来自另一个VPC的安全组方面是正确的

    关于我收到的错误

    Error: Error authorizing security group rule type ingress: InvalidGroup.NotFound: You have specified two resources that belong to different networks
    
    原因是在将安全组添加到入口规则之前,我必须添加对vpc对等连接的依赖:

    resource "aws_security_group_rule" "vpc_a_to_vpc_b" {
      security_group_id = var.vpc_a_security_group_id
    
      description = "Allow vpc_b to communicate with vpc_a"
      type = "ingress"
      from_port = 0
      to_port = 0
      protocol = "-1"
      source_security_group_id = aws_security_group.vpc_b.id
    
      depends_on = [aws_vpc_peering_connection.vpc_a_to_vpc_b]
    }
    
    

    区别在于
    依赖于

    有点吹毛求疵,但第三种选择是模糊的。如果省略它,那么AWS API会将其解析为正确的帐户ID并附加它。然后,这将创建一个差异,因为Terraform希望将
    123456789012/sg-1a2b3c4d
    更改回
    sg-1a2b3c4d
    ,因为它没有意识到这种损坏。我怀疑,如果你运气不好,在不同帐户中的对等VPC中有多个相同的安全组ID,那么就会发生不好的事情,因为我认为安全组ID不是全局唯一的,只是整个帐户唯一的。但这是一种令人惊讶的行为,我始终建议人们指定帐户ID作为前缀,即使您不介意它创建的Terraform差异(或不使用Terraform)。此外,答案可能会通过链接到VPC对等和安全组的文档而得到改进。