如何使用boto3在不同帐户的安全组之间添加安全组规则?

时间:2018-07-13 19:18:22

标签: amazon-web-services boto3

我对boto3的世界还很陌生,正尝试将其(版本1.7.57)用于
a)在帐户A,VPC A中创建一个安全组(简称为sg-a)
b)在帐户B,VPC B中创建一个安全组(简称为sg-b)
c)创建一组规则,让他们彼此交谈

a)和b)使用起来很容易

ec2_client.create_security_group(...)

更新:
为了确保完整性,请在create_security_group调用上添加更多信息。如果您使用ec2客户端的create_security_group()调用(而不是VPC Resource风格),并且不想在默认VPC中创建安全组,请确保包含VpcId参数。

ec2_client.create_security_group
(  
    Description='This is a description',
    GroupName='SecurityGroupTest',
    VpcId=some_vpc_id
)

结束更新

我从返回的那些呼叫中获得了安全组ID(例如“ sg-a”和“ sg-b”),然后尝试使用这些ID来制定规则:

ec2_client.authorize_security_group_ingress(
    FromPort=80,
    ToPort=80,
    IpProtocol='tcp',
    GroupId='sg-a',
    SourceGroup='sg-b',
    GroupOwner='Account B's ID'
)

这会导致以下错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Unknown parameter in input: "GroupOwner", must be one of: CidrIp, FromPort, GroupId, GroupName, IpPermissions, IpProtocol, SourceSecurityGroupName, SourceSecurityGroupOwnerId, ToPort, DryRun
Unknown parameter in input: "SourceGroup", must be one of: CidrIp, FromPort, GroupId, GroupName, IpPermissions, IpProtocol, SourceSecurityGroupName, SourceSecurityGroupOwnerId, ToPort, DryRun

这似乎与AWS API文档有所不同 https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html
其中列出source-groupgroup-owner作为AWS API authorize-security-group-ingress调用的有效参数。实际上,

aws ec2 authorize-security-group-ingress --group-id sg-a  --protocol tcp --port 80 --source-group sg-b --group-owner <Accont B's ID>

做工精美。

所以。。。 a)boto3尚未更新以支持这些参数

b)我想念一些东西。

我希望我缺少一些东西。

1 个答案:

答案 0 :(得分:2)

这是工作代码。

注意:

  1. 您必须启用VPC对等。
  2. 安全组仅在同一区域内工作。您不能在其他区域中指定安全组。

Python:

ip_perm = [{
    'IpProtocol': 'tcp',
    'FromPort': 22,
    'ToPort': 22,
    'UserIdGroupPairs': [{
        'GroupId': src_sg_id,   # ID (starts with sg-...)
        'UserId': src_account   # The account number of the other side
    }]
}]

response = client.authorize_security_group_ingress(
    IpPermissions=ip_perm,
    GroupId=sg_id)      # This is the security group to add the rule to

注意:如果要在控制台中执行此操作,请将“入站源”指定为accountno / sg-id。