AWS: Python Script для получения списка корзины S3, имеющей кросс-аккаунт с использованием boto3 - PullRequest
0 голосов
/ 28 ноября 2018

Есть ли какой-нибудь способ, которым мы можем проверить, какая корзина имеет кросс-аккаунт, используя boto3?если нет, предложите другой способ сделать то же самое (используя только скрипт).

У меня несколько аккаунтов aws.например: prod, dev, QA, rep1 и т. д. Я использую цикл для перехода к каждой учетной записи и создаю список групп, имеющих доступ к нескольким учетным записям.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Спасибо, Джон. Я создал нижеприведенный скрипт для проверки корзины, имеющей доступ к нескольким учетным записям или нет, на основе политики корзины.Но не уверен, что этого достаточно, или необходимо выполнить дополнительную проверку в сценарии

import boto3
import json

REGIONS = 'ap-south-1'
ACCOUNT = '*************'
AWS_ACCESS_KEY_ID = '*******************'
AWS_SECRET_ACCESS_KEY = '*****************************'
client = boto3.client('s3', REGIONS, aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
flag = "cross account access -- no"
try:
    result = client.get_bucket_policy(Bucket='testingcrossaccount')
    policy = json.loads(result['Policy'])
    statements = policy['Statement']
    for statement in statements:
        effect = statement['Effect']
        principal = statement['Principal']
        try:
            keywords = principal['AWS']
            if isinstance(keywords, str):
                keywordarr = keywords.split(":")
                if (ACCOUNT != keywordarr[4] and effect == "Allow"):
                    flag = "cross account access -- yes"
            elif isinstance(keywords, list):
                for key in keywords:
                    keywordarr = key.split(":")
                    if (ACCOUNT != keywordarr[4] and effect == "Allow"):
                        flag = "cross account access -- yes"
                        break                   
            if (flag == "cross account access -- yes"):
                break
        except:
            if (principal == "*" and effect == "Allow"):
                flag = "cross account access -- yes"
 except:
    flag = "cross account access -- no"

print (flag)
0 голосов
/ 28 ноября 2018

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

Если у вас есть заблокированный публичный доступ , то сегмент доступен только для другой учетной записи, если это позволяет Политика Bucket.

Похоже, что IAM Policy Simulator (который также имеет API) не поддерживает тестирование между учетными записями, так что это, очевидно, не вариант.

Ваш единственный выбор будетнеобходимо проанализировать каждую Bucket Policy, чтобы определить, какой доступ предоставляется.

Кроме того, вы также захотите решить, что вы подразумеваете под «наличием доступа».Как правило, GetObject является тестом на возможность загрузки объектов, но политика может также предоставлять разрешение на просмотр содержимого корзины, загрузки в корзину и т. Д.

...