Почему AWS отказывает в разрешении, если IAM настроен на разрешение всех? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь запустить скрипт, который создает таблицы в DynamoDB.Первая таблица создается просто отлично, но во 2-й таблице возникает проблема с правами доступа, которая, похоже, связана с IAM.

Это инструмент безопасности python, который требует начальной настройки и частично создает две таблицы DynamoDB.,Я могу создать первую таблицу просто отлично, но сталкиваюсь с проблемами со второй таблицей.

Роль пользователя имеет широко открытые разрешения AWS, поэтому я не вижу, как это проблема.

Python3.7.3, если необходима версия.

Traceback (most recent call last):
  File "argos_config_setup.py", line 28, in check_account_table
    response = client.describe_table(TableName=argos_account_table)
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.ResourceNotFoundException: An error occurred (ResourceNotFoundException) when calling the DescribeTable operation: Requested resource not found: Table: argos_accounts not found

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "argos_config_setup.py", line 240, in <module>
    check_account_table()
  File "argos_config_setup.py", line 34, in check_account_table
    create_account_table(argos_account_table)
  File "argos_config_setup.py", line 103, in create_account_table
    for accounts_itr in account_iterator:
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__
    response = self._make_request(current_kwargs)
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request
    return self._method(**current_kwargs)
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/generic_user/.virtualenvs/myvenv/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.AccessDeniedException: An error occurred (AccessDeniedException) when calling the ListAccounts operation: You don't have permissions to access this resource.

ПОЛИТИКА AWS JSON

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

Предполагается создание 2-й таблицы DynamoDB.

Ниже приведенофункция create_account_table

    org_client = boto3.client('organizations')
    paginator = org_client.get_paginator('list_accounts')
    account_iterator = paginator.paginate()
    accounts = []
    for accounts_itr in account_iterator:
        for account in accounts_itr['Accounts']:
            accounts.append({'id': account['Id'], 'name': account['Name'], 'email': account['Email'],
                             'environment': ''})
    dynamodb_client = boto3.client('dynamodb')
    dynamodb_client.create_table(
        AttributeDefinitions=[
            {
                "AttributeName": "id",
                "AttributeType": "S"
            }
        ],
        TableName=argos_account_table,
        KeySchema=[
            {
                "AttributeName": "id",
                "KeyType": "HASH"
            }
        ],
        BillingMode='PAY_PER_REQUEST'
    )

    dynamodb_resource = boto3.resource('dynamodb')
    table = dynamodb_resource.Table(argos_account_table)
    with table.batch_writer() as batch:
        for account in accounts:
            batch.put_item(
                Item={
                    'id': account['id'],
                    'name': account['name'],
                    'email': account['email'],
                    'environment': account['environment'],
                }
)

1 Ответ

2 голосов
/ 31 мая 2019

Не видя, как вы создаете таблицы, я могу сказать вам только две вещи:

Первая ошибка, с которой вы столкнулись, это то, что вы пытаетесь описать таблицу, которая не может быть найдена (ошибка 404)

При попытке справиться с необнаруженной ошибкой таблицы кажется, что ваш код пробовал вызов ListAccounts, который зависит от ваших настроек организации AWS.Похоже, ваш пользователь также не имеет разрешения ListAccounts.

Не могли бы вы опубликовать фрагмент того, как вы пытаетесь создать таблицы, потому что здесь мы можем видеть только то, что вы делаете вызов descriptionTable вместо createTable.

...