Boto3 向非默认 VPC 中的安全组添加入站规则

Boto3 Adding an Inbound Rule to a Security Group in a Non Default VPC

我正在尝试向非默认 VPC 中的安全组添加入站规则。我正在使用此代码:

import boto3

ec2 = boto3.client('ec2')

def modify_sg_add_rules():
        response = ec2.authorize_security_group_ingress(
        IpPermissions=
        [
            { 
                'FromPort': 3306,
                'IpProtocol': 'tcp',
                'IpRanges': 
                    [
                        {
                        'CidrIp': '64.192.85.294/32',
                        'Description': 'My home IP',
                        },
                    ],
                'ToPort': 3306,
                'UserIdGroupPairs': 
                    [
                        {
                            'Description': 'My home IP',
                            'GroupId': 'sg-0123',
                            # 'GroupName': 'mysql-sg-0123',
                            'VpcId': 'vpc-0f93q3',
                        },
                    ]
            },
        ],
    )

但是,我收到以下错误:

botocore.exceptions.ClientError:调用AuthorizeSecurityGroupIngress操作时出现错误(MissingParameter):请求中必须包含参数groupName或groupId

我已经试过了,包括组名,但还是不行。

使用安全组 ID 有效:

data = client_ec2.authorize_security_group_ingress(
        GroupId='sg-01b8f7d6ae1022a20',
        IpPermissions=[
            {'IpProtocol': 'tcp',
             'FromPort': 80,
             'ToPort': 80,
             'IpRanges': [{'CidrIp': '0.0.0.0/0'}]},
            {'IpProtocol': 'tcp',
             'FromPort': 22,
             'ToPort': 22,
             'IpRanges': [{'CidrIp': '0.0.0.0/0'}]}
        ])
print('Ingress Successfully Set %s' % data)

输出:

Ingress Successfully Set {'ResponseMetadata': {'RequestId': xxxx, 'HTTPStatusCode': 200, 'HTTPHeaders': ......}}

应该也可以通过编程方式获取安全组 ID - 按安全组名称过滤。