我对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-group
和group-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)我想念一些东西。
我希望我缺少一些东西。
答案 0 :(得分: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。