在创建acl时,网络ACL与非默认VPC中的子网关联

时间:2015-04-10 06:27:31

标签: amazon-web-services amazon-vpc aws-cli

我正在尝试使用aws cli从头开始设置一个新的VPC。 我需要的VPC基础结构需要各种子网和与之关联的网络ACL。我创建的网络ACL默认情况下不与任何子网关联,因为它是非默认VPC,因此默认关联不到位。这种情况给我带来两种情况:

  1. 在创建网络ACL时将网络ACL与子网关联 - create-network-acl aws cli命令不支持它。

  2. 替换旧的子网关联 - 要替换子网关联,我需要有一个旧的关联ID。如前所述,没有子网关联已存在,因此没有过去的关联可以替换为。

  3. 是否有解决此问题的工作,或者是否支持案例1,是否有任何命令。

3 个答案:

答案 0 :(得分:2)

我是AWS的新手,我也有完成任务的任务。我是如何实现的:

# get both resource and client
ec2 = boto3.resource( 'ec2' )
ec2_client = boto3.client('ec2' )

# associating an ACL with a subnet is a mess:
# 1) create your own ACL
# 2) all subnets are connected to a default ACL - find this ACL
# 3) get all the association IDs of this connection
# 4) call replace_network_acl_association with your own ACL ID

# create the ACL in your vpc
networkACL = ec2.create_network_acl( VpcId = vpc.id )

# get default ACL
response = ec2_client.describe_network_acls( NetworkAclIds=[], Filters=[] )

# get association IDs
myAssociations = []
for acl in response['NetworkAcls']:
    if( acl["VpcId"] == vpc.id and len( acl['Associations'] ) > 0 ):
        myAssociations = acl['Associations']
        break

# replace them to our ACL
for a in myAssociations:
    ec2_client.replace_network_acl_association(
        AssociationId = a['NetworkAclAssociationId'],
        NetworkAclId = networkACL.id
    )

答案 1 :(得分:1)

使用CLI构建复杂的堆栈是一个非常低级别的解决方案,我不建议这样做。 我会创建一个cloudformation堆栈。它可以是修复堆栈,也可以是具有输入参数的更通用堆栈。您可以轻松地手动测试它,如果它运行良好,那么您可以通过CLI调用create Cloudformation将其集成到您的应用程序中。

答案 2 :(得分:1)

我看到CLI或API(例如BOTO3)的最佳方式是重新关联子网。最初创建子网时,它与默认的VPC ACL相关联。然后您可以自己将其重新关联到正确的ACL。