将协议设置为all设置.authorize_egress()

时间:2016-08-24 04:57:24

标签: amazon-web-services boto3

我正在尝试执行以下代码

def createSecurityGroup(self, securitygroupname): 
    conn = boto3.resource('ec2') 
    response = conn.create_security_group(GroupName=securitygroupname, Description = 'test')

VPC_NAT_SecurityObject = createSecurityGroup("mysecurity_group")

response_egress_all =  VPC_NAT_SecurityObject.authorize_egress(
        IpPermissions=[{'IpProtocol': '-1'}])

并获得以下异常

  

例外:   调用AuthorizeSecurityGroupEgress操作时发生错误(InvalidParameterValue):仅Amazon VPC安全性   组可以与此操作一起使用。

我尝试了几种不同的组合,但无法将协议设置为全部。我使用了'-1',如boto3文档中所述。有人可以建议如何完成这项工作。

1 个答案:

答案 0 :(得分:0)

(更新)

1.boto3.resource(“ec2”)类实际上是一个围绕客户端类的高级类。您必须使用boto3.resource(“ec2”)。Vpc创建一个提取类实例化,以便附加到特定的VPC ID,例如。

import boto3
ec2_resource = boto3.resource("ec2") 
myvpc = ec2_resource.Vpc("vpc-xxxxxxxx") 
response = myvpc.create_security_group(
   GroupName = securitygroupname, 
   Description = 'test')

2.有时可以直接使用boto3.client(“ec2”)如果你检查boto3 EC2客户端create_security_group,你会看到:

response = client.create_security_group(
  DryRun=True|False,
  GroupName='string',
  Description='string',
  VpcId='string'
 )

如果您使用自动化脚本/模板来重建VPC,例如salt-cloud,你需要给VPC一个标签名称,以便从boto3脚本中自动获取它。当AWS将所有AWS资源ID从8个字母数字迁移到12或15个字符时,这将节省所有麻烦。

另一种选择是使用cloudformation,它允许您放置所有内容并在模板中指定变量来重新创建VPC堆栈。