Я создал небольшой скрипт для взаимодействия с AWS, обновляя группы безопасности и экземпляры EC2.Этот сценарий работает нормально на моей машине, но у меня возникают проблемы при тестировании его на лямбда-консоли AWS.
Я использую бессерверный сервер для развертывания лямбда-функции в веб-сервисах Amazon.Я также создаю роль IAM для этой новой лямбда-функции.
Ошибка, с которой я столкнулся, - это ошибка (InvalidPermission.NotFound).Полный стек ошибок представлен ниже.
Ошибка:
An error occurred (InvalidPermission.NotFound) when calling the RevokeSecurityGroupIngress operation: The specified rule does not exist in this security group.: ClientError
Traceback (most recent call last):
File "/var/task/ipm.py", line 205, in handler
main()
File "/var/task/ipm.py", line 197, in main
sg_ips_remove(to_remove, state_sg, state_ping)
File "/var/task/ipm.py", line 140, in sg_ips_remove
update_security_group("revoke", sg_id, sg_ips, state_ping) # run script to authorize/revoke ip access
File "/var/task/ipm.py", line 53, in update_security_group
sg.update_sg_traffic(sg_rules=obj, sg_id=group_id, update_type=update_type)
File "/var/task/sg.py", line 77, in update_sg_traffic
ec2.revoke_security_group_ingress(GroupId=sg_id, IpPermissions=sg_rules)
File "/var/task/botocore/client.py", line 320, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/var/task/botocore/client.py", line 623, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidPermission.NotFound) when calling the RevokeSecurityGroupIngress operation: The specified rule does not exist in this security group.
Эта ошибка возникает в следующем фрагменте кода.Еще раз, этот код прекрасно работает на моей машине, но вызывает ошибку во время тестирования лямбда-функции.
def update_sg_traffic(sg_id, sg_rules, update_type="authorize"):
""" Update the inbound traffic associated to a SG. It is possible to add or remove IPs from the SG.
"""
assert update_type in ["authorize", "revoke"]
ec2 = boto3.client('ec2')
if update_type == "authorize":
ec2.authorize_security_group_ingress(GroupId=sg_id, IpPermissions=sg_rules)
else:
ec2.revoke_security_group_ingress(GroupId=sg_id, IpPermissions=sg_rules)
Я нахожу эту ошибку странной, потому что она жалуется на правило RevokeSecurityGroupIngress, которое я добавил к роли IAM, указанной в файле serverless.yaml, который представлен ниже.
service: ${self:custom.resourcePrefix}-pingdom-updater
custom:
resourcePrefix: ${self:provider.stage}use1
provider:
stage: ${opt:stage, 's'}
name: aws
runtime: python3.6
memorySize: 128
iamRoleStatements:
- Effect: Allow
Action:
- ec2:AuthorizeSecurityGroupEgress
- ec2:AuthorizeSecurityGroupIngress
- ec2:CreateSecurityGroup
- ec2:DeleteSecurityGroup
- ec2:DescribeInstanceAttribute
- ec2:DescribeInstanceStatus
- ec2:DescribeInstances
- ec2:DescribeNetworkAcls
- ec2:DescribeSecurityGroups
- ec2:RevokeSecurityGroupEgress
- ec2:RevokeSecurityGroupIngress
Resource: "*"
functions:
pingdomUpdater:
handler: ipm.handler
events:
- schedule:
name: ${self:service}-schedule
description: ""
rate: rate(1 day)
plugins:
- serverless-python-requirements
serverless.yaml
Кто-нибудь знает, почему я испытываю эту ошибку?Я ценю любую помощь, которую я могу получить.Спасибо.