Вопрос: Что вызывает Access Denied при использовании aws cli для загрузки с Amazon S3?


Я действительно кручусь вокруг в AWS, пытаясь понять, что мне здесь не хватает. Я хотел бы сделать так, чтобы пользователь IAM мог загружать файлы из ведра S3 - не просто полностью публиковать файлы, но я получаю отказ в доступе. Если кто-нибудь сможет понять, что у меня, я буду подтолкнут.

Что я сделал до сих пор:

  • Создал пользователя под названием my-user (для примера)
  • Сгенерированные ключи доступа для пользователя и их размещение в ~ / .aws на экземпляре EC2
  • Создал политику ведра, что я надеялся предоставить доступ для моего пользователя
  • Выполнить команду aws s3 cp --profile my-user s3://my-bucket/thing.zip .

Политика ведра:

{
  "Id": "Policy1384791162970",
  "Statement": [
    {
      "Sid": "Stmt1384791151633",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/my-user"
      }
    }
  ]
}

В результате A client error (AccessDenied) occurred: Access Denied хотя я могу загрузить с помощью той же команды и ключей доступа по умолчанию (root account?).

Я также попытался добавить политику пользователя. Хотя я не знаю, почему это было необходимо, я думал, что это не повредит, поэтому я привязал это к моему пользователю.

{
  "Statement": [
    {
      "Sid": "Stmt1384889624746",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}

Те же результаты.


43
2017-11-19 19:37


Источник




Ответы:


Я тоже боролся с этим, но я нашел ответ здесь https://stackoverflow.com/a/17162973/1750869 что помогло решить эту проблему для меня. Отправляя ответ ниже.


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

Ковш для копирования из - SourceBucket

Ковш для копирования в - DestinationBucket

Идентификатор учетной записи источника AWS - XXXX-XXXX-XXXX

Источник IAM User - src-iam-user

Ниже перечислены политики - пользователь IAM - XXXX-XXXX-XXXX: src-iam-user имеет привилегии s3: ListBucket и s3: GetObject для привилегий SourceBucket / * и s3: ListBucket и s3: PutObject на DestinationBucket / *

На SourceBucket политика должна быть такой:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::SourceBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:GetObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: SourceBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

На DestinationBucket политика должна быть:

{
"Id": "Policy1357935677554",
"Statement": [
    {
        "Sid": "Stmt1357935647218",
        "Action": [
            "s3:ListBucket"
        ],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
    },
    {
        "Sid": "Stmt1357935676138",
        "Action": ["s3:PutObject"],
        "Effect": "Allow",
        "Resource": "arn:aws:s3::: DestinationBucket/*",
        "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
   }
]
}

команда запускается s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1


35
2017-11-19 23:27



Боже мой, ты мой герой. Мне просто не хватало разрешения ListBucket на уровне ковша. Я до сих пор не знаю, зачем мне нужно ведро, чтобы скрыть объект, но все в порядке. Может быть, это только причуда использования команды aws? - Josh Gagnon
Да, это довольно странно. Вы могли бы подумать, что для проверки работоспособности будет достаточно одной политики s3: * (как бы необеспеченной, которая может быть). - Sergio
fml, 2 дня, потраченные впустую на это разрешение ListBucket. хороший улов - chaqke
Провел много времени ... Это был необходимый ответ. ListBucket - bucketname, GetObject - bucketname / * - rsmoorthy


Когда я столкнулся с той же проблемой, выяснилось, что AWS потребовало включения шифрования на стороне сервера. Итак, следующая команда работала успешно для меня:

aws s3 cp test.txt s3://my-s3-bucket --sse AES256

5
2017-09-19 08:53



Благодаря! В моем случае это было --sse aws:kms использовать ведро «default» ... - Michael Yoo


Я бы не рекомендовал вариант «Любой аутентифицированный пользователь AWS», упомянутый Джеймсом.

При этом добавляется ACL на уровне ведра, который позволяет любой учетной записи AWS (а не только вашим пользователям IAM) перечислить / удалить / изменить-acls для этого ведра.

то есть публичное чтение / запись для всех, у кого есть учетная запись aws.


4
2018-06-12 10:51



Вы проверили это? У меня создалось впечатление, что учетная запись AWS на самом деле означает любое лицо, имеющее мою организацию, то есть пользователь, экземпляр EC2, роль IAM, но не кто-то из другой учетной записи. Я могу ошибаться, и я отредактирую свой вклад и быстро проведу проверку своих ведер, если это так. Благодарю. - James Dunmore
Ага. Грантополучатель «Аутентифицированный пользователь» в ACL S3 означает все учетные записи AWS. Он применяет подписанные запросы, но не более того. Вот ссылка: ссылка - Andrew


Мне удалось исправить это без необходимости писать политики - из консоли S3 (web ui) я выбрал ведро, а на вкладке «Разрешения» выбрал «Any Authenticated AWS User» и запустил все поля.

ОБНОВИТЬ: как указано в комментариях «Any Authenticated AWS User» - это не только пользователи вашей учетной записи, это все пользователи, прошедшие аутентификацию AWS, пожалуйста, используйте с осторожностью


3
2018-03-01 13:52



Я полагаю, это создает для вас политику. При нажатии всех ящиков вы получите ListBucket и т. Д. И многое другое. - Josh Gagnon
Я уверен, что это - я просто знаю, что написание политик может быть болью, эти галочки могут дать вам немного больше, но красивое быстрое решение - James Dunmore


Даже если ваши политики IAM настроены правильно, вы все равно можете получить ошибку, например An error occurred (AccessDenied) when calling the <OPERATION-NAME> operation: Access Denied из-за требований MFA (многофакторная аутентификация) на ваши учетные данные. Они могут вас отвлечь, потому что, если вы уже вошли в консоль AWS, вы увидите, что ваши учетные данные работают нормально, а разрешение отклонено сообщение об ошибке из aws cli не особенно полезно.

Есть еще несколько хороших инструкций о том, как настроить MFA с помощью aws cli:

В принципе, вам нужно получить адрес вашего устройства MFA и отправить его с кодом с вашего устройства, чтобы получить временный токен.


0
2017-07-12 17:00





Я просто зашел в WebUI и нажал на ведро, затем пошел на разрешения, а затем пошел в политику. Когда я открыл его, я просто нажал кнопку delete. Я сделал это, поскольку я думаю, что это была конфигурация.

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

даже когда я сделал это с помощью aws-cli, используя

$ aws s3 rb s3://bucket-name --force  

Во всяком случае, это то, что сработало для меня. Политика разрешений запрещает вам удалять ведро.


0
2017-10-14 04:19