AWS + без сервера - (InvalidPermission.NotFound) Указанное правило не существует в этой группе безопасности - PullRequest
0 голосов
/ 14 сентября 2018

Я создал небольшой скрипт для взаимодействия с 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

Кто-нибудь знает, почему я испытываю эту ошибку?Я ценю любую помощь, которую я могу получить.Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы путаете роли IAM с группами безопасности VPC.

Полученная ошибка означает, что правило группы безопасности не существует для указанной группы безопасности.Это не имеет никакого отношения к ролям IAM.

Если ваша цель - добавить / удалить разрешения для ролей IAM, вам потребуется переписать код для работы с политиками IAM.

...