Запустите Python Script внутри Python и проверьте, выводится ли значение - оператор If - PullRequest
0 голосов
/ 29 октября 2019

У меня есть скрипт Python3, который в основном проходит через список номеров учетных записей Amazon AWS (использует Boto3), проверяет, не старше ли их ключи доступа, чем x дней, и сообщает об этом.

Я хотел бы сделать свой отчет приятным, проверив, есть ли у вывода пользователь (-и) или нет, и вывести его в файл для отправки SNS мне.

Вот код, который я уже пробовал:

if not os.system("python3 ListUsersWithAccessKeysOlderThan90Days.py " + accountNumber):
            print("No Content", file=reportName)
        else:
            print("Content", file=reportName)

Я уже пробовал это тоже:

        if os.system("python3 ListUsersWithAccessKeysOlderThan90Days.py " + accountNumber) == " ":
            print("No Content", file=reportName)
        else:
            print("Content", file=reportName)

Но я, кажется, только получаю это вмой выходной файл:

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content

В идеале мне бы хотелось, чтобы он выглядел следующим образом:

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Running on account accountNumber - accountLabel - accountEnvironment
Content

Running on account accountNumber - accountLabel - accountEnvironment
No Content

Нет содержимого = Нет необходимости вращать клавиши доступа. Контент = пользователь нуждается в повороте ключа.

Я могу добиться этого в Bash, но я не возражаю, пытаясь заставить его работать в Python3.

Вот мой пример Bash:

if [[ -z "$(python3 ListUsersWithAccessKeysOlderThan90Days.py ${ACCOUNT})" ]]; then
        echo -e "$ACCOUNT ($LABEL) is up to date no need to report\n" >> $REPORT
    else
    echo -e "$ACCOUNT Need keys rotating" >> $REPORT 
    fi

Любая помощь будет наиболее ценной.

Спасибо,

1 Ответ

0 голосов
/ 31 октября 2019

Статус пользователей и учетных данных IAM можно получить из отчета об учетных данных AWS . Это, вероятно, удовлетворит большинство потребностей.

Если вы предпочитаете Python, то я написал базовый скрипт, который можно использовать для распечатки всех пользователей IAM в учетной записи, чьи ключи доступа старше 90 дней (независимо откогда они в последний раз использовали эти ключи).

import sys
import boto3
from datetime import datetime, timedelta, timezone

DAYS = 90

iam = boto3.client('iam')
sts = boto3.client('sts')

identity = sts.get_caller_identity()
account = identity['Account']
header_printed = False

count = 0
today = datetime.now(timezone.utc)

# Get all IAM users in this AWS account
for user in iam.list_users()['Users']:
    arn = user['Arn']
    username = user['UserName']

    # Get all access keys for this IAM user
    keys = iam.list_access_keys(UserName=username)

    # Test each key's age and print those that are too old
    for key in keys['AccessKeyMetadata']:
        akid = key['AccessKeyId']
        created = key['CreateDate']
        created_delta = today - created

        # if this access key is older than DAYS
        if created + timedelta(days=DAYS) < today:
            count += 1
            response = iam.get_access_key_last_used(AccessKeyId=akid)
            akid_last_used = response['AccessKeyLastUsed']

            if not header_printed:
                header_printed = True
                print(f'Account, Username, Access Key, Age, Last Used')

            print(f'{account}, {username}, {akid}, {created_delta.days} ', end = '')

            # Only keys that have actually been used will have last used date
            if 'LastUsedDate' in akid_last_used:
                last_used = akid_last_used['LastUsedDate']
                last_used_delta = today - last_used
                print(flast_used_delta.days)
            else:
                print('none')

sys.exit(count)

Это распечатает список ключей доступа за 90 дней в формате CSV. Например:

Account, Username, Access Key, Age, Last Used
123456784321, james, AKIAJ7PL4POLWNEXAMPLE, 91, 1
123456784321, frank, AKIAL2CV9LKWEXAMPLE, 200, 100
123456784321, mary, AKIAYTWHD3BNMLEXAMPLE, 97, none

Age - это сколько дней ключу доступа. Last Used - это сколько дней прошло с момента последнего использования учетных данных. Надеюсь, что это окажется полезным.

Код выхода скрипта - это число ключей старше 90 дней, поэтому вы можете использовать этот код завершения в скрипте оболочки, чтобы решить, что делать дальше. Например:

#!/bin/bash

python3 scripts_older_than_90days.py > oldkeys.csv
count=$?

if [ $count -eq 0 ]
then
  echo "All access keys good"
else
  echo "Count of old keys" $count
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...