Nano Hash - криптовалюты, майнинг, программирование

Не удалось загрузить файл AWS S3 + кросс-аккаунта

Я создал ведро с именем (яблочное ведро) в «учетной записи AWS 1» и предоставил доступ к другой «учетной записи AWS 2» для загрузки файлов в яблочное ведро.

Загрузка файла выполнена успешно из «учетной записи 2» в корзину учетной записи 1.

Где, когда я загружаю файл с S3 (яблочное ведро), я получаю отказ в доступе в консоли.

моя политика ведра

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::******:role/role-name",
                    "arn:aws:iam::******:root"
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:ListBucketVersions",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::apple-bucket/*",
                "arn:aws:s3:::apple-bucket"
            ]
        },
        {
            "Sid": "Access1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:ListBucketVersions",
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::apple-bucket/*",
                "arn:aws:s3:::apple-bucket"
            ]
        }
    ]
}

Примечание. Из командной строки я могу загрузить файл, используя «учетные данные QA AWS», но не с учетными данными «PROD AWS».


  • Что вы подразумеваете под учетной записью QA AWS? Вы имеете в виду роль или реальную учетную запись AWS? Если это учетная запись, какого пользователя вы используете внутри учетной записи? Что вы подразумеваете под успешной загрузкой из учетной записи QA в корзину Prod - как вы загружаете из учетной записи? Вы также говорите об учетных данных QA AWS и учетных данных Prod AWS — это учетные данные для пользователей IAM или корневые учетные данные? Не стесняйтесь редактировать свой вопрос, чтобы уточнить. 04.08.2017
  • Политика, которую вы показали, предоставляет всем во всем мире доступ к вашему apple-bucket. Если вы утверждаете, что это не работает, отредактируйте свой вопрос и включите примеры команд, которые не работают, и показанную ошибку. 04.08.2017
  • @JohnRotenstein мне кажется, что упускается из виду аспект разрешений S3, который задокументирован, но, возможно, не в явном виде с точки зрения его полного значения: в частности, когда A создает объект в ведре B, A владеет объектом ... и в политике сегмента B отсутствуют полномочия для предоставления разрешений на объекты в сегменте B, принадлежащие A, если только A не предоставляет bucket-owner-full-control при создании объекта, тем самым делегируя полномочия B и делая применимой политику сегмента. Что вы думаете? 05.08.2017
  • Ах! Да, это может соответствовать описанию от @Vinod. Можно решить, передав bucket-owner-full-control во время загрузки или выполнив КОПИЮ на месте для всех объектов, чтобы добавить это разрешение. (Возможно, для этого потребуется использовать учетные данные root или сделать это от лица, которое выполнило загрузку.) 06.08.2017

Ответы:


1

Как обсуждали Майкл и Джон (в комментариях), вы можете исправить ACL объектов S3, скопировав существующие объекты, или избежать проблем с загрузкой, обеспечив правильную настройку ACL при загрузке.

Недавно мне пришлось столкнуться с этой проблемой в довольно больших масштабах (миллионы объектов без надлежащих ACL). После того, как мне пришлось нести затраты времени и средств на копирование на месте для всех этих объектов, я установил политику сегмента, чтобы гарантировать, что все объекты, загруженные в сегмент, должны предоставлять bucket owner full control.

В этом примере политики показано, как разрешить определенной учетной записи AWS загружать объекты в корзину, требуя при этом соответствующих списков ACL для объектов:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "AllowSourceAccount0123456789ToPutObjects",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::0123456789:root"
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::apple-bucket/*"
    },
    {
        "Sid": "RequireAllUploadedObjectsToAssignFullControlToBucketOwner",
        "Effect": "Deny",
        "Principal": {
            "AWS": "*"
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::apple-bucket/*",
        "Condition": {
            "StringNotEquals": {
                "s3:x-amz-acl": "bucket-owner-full-control"
            }
        }
    }
]
}

Ключом является явное запрещение, которое проверяет заголовок x-amz-acl: bucket-owner-full-control и отказывает при любой загрузке, если он не установлен. При использовании интерфейса командной строки AWS для загрузки файлов необходимо установить флаг --acl Bucket-owner-full-control.

Пример:

aws s3 cp example-file.txt s3://apple-bucket/example-file.txt --profile aws-profile-name --acl bucket-owner-full-control

30.11.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..