Разрешить доступ к S3 Bucket из всех экземпляров EC2 конкретной учетной записи - PullRequest
0 голосов
/ 22 мая 2019

Есть ли способ разрешить всем экземплярам, ​​созданным конкретной учетной записью AWS, доступ к корзине S3?

Я хотел бы предоставить данные, которые клиенты должны будут очень просто загрузить в свои экземпляры.В идеале, автоматически с помощью опции post_install сценария AWS ParallelCluster .

Однако, похоже, для этого требуется много настроек, как описано в этом руководстве AWS:
https://aws.amazon.com/premiumsupport/knowledge-center/s3-instance-access-bucket/

Это неосуществимо для меня.Клиенты не должны создавать роли IAM.

Лучшее, что я придумал на данный момент, - это предоставление S3 bucket доступа к определенной учетной записи AWS, а затем работа с ключами доступа:

export AWS_ACCESS_KEY_ID=<key-id>
export AWS_SECRETE_ACCESS_KEY=<secret-key>

aws s3 cp s3://<bucket> . --recursive

К сожалению, это также не идеально, поскольку я хотел бы предоставить готовые сценарии AWS Parallelcluster post_install.Эти сценарии должны автоматически загружать необходимые данные при запуске кластера.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Есть ли способ разрешить всем экземплярам, ​​созданным конкретной учетной записью AWS, доступ к корзине S3?

Да. Это двухэтапный процесс. В итоге:
1) С вашей стороны ведро должно доверять идентификатору учетной записи других учетных записей, которые будут к нему обращаться, и вы должны решить, какие вызовы вы разрешите.
2) В других учетных записях, которые будут получать доступ к корзине, экземпляры должны быть авторизованы для выполнения вызовов AWS API в вашей корзине с использованием политик IAM.

Более подробно:

Шаг 1: Давайте разберемся с этим и разберем его. В вашем ведре вам нужно будет настроить политику ведра следующим образом:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "111",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ACCOUNT_ID_TO_TRUST:root"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME_HERE/*"
        }
    ]
}

Дополнительные примеры политик сегментов можно найти в документации AWS здесь .

ПРЕДУПРЕЖДЕНИЕ 1:"arn: aws: iam :: ACCOUNT_ID: root" будет доверять всему, у кого есть разрешения для подключения к вашему ведру в другой учетной записи AWS. Это не должно быть проблемой для того, что вы пытаетесь сделать, но лучше всего вы полностью понимаете, как эта политика работает для предотвращения несчастных случаев.

ПРЕДУПРЕЖДЕНИЕ 2: Не предоставлять s3:* - вам необходимо ограничить разрешения для таких действий, как s3:GetObject и т. Д. Здесь есть веб-сайт, который поможет вам сгенерировать эти политики здесь . s3:* будет содержать delete разрешений, которые при неправильном использовании могут привести к неприятным сюрпризам.

Теперь, как только это будет сделано, великая работа - это то, что с вашей стороны покрыто.

Шаг 2: Другим учетным записям, которые хотят считывать данные, придется назначить роль экземпляра для запускаемых им экземпляров ec2, и для этой роли потребуется политика, предоставляющая доступ к вашему сегменту. Затем эти экземпляры могут запускать команды CLI AWS на вашей корзине, при условии, что ваша политика корзины разрешает вызов на вашей стороне, а политика экземпляра разрешает вызов на их стороне. Политика, которая должна быть присоединена к роли экземпляра, должна выглядеть примерно так:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::YOUR_BUCKET_NAME_HERE/*"
    }
  ]
}

Имейте в виду, только то, что эта политика предоставляет s3:*, это не означает, что они могут что-то сделать в вашем ведре, если только у вас нет s3:* в вашей политике ведра. Действия этой политики будут ограничены тем, на что вы устанавливали разрешения в своей политике сегментов.

Это неосуществимо для меня. Клиенты не должны создавать роли IAM.

Если у них есть учетная запись AWS, им решать, как они решат получить доступ к корзине, пока вы определяете политику корзины, которая доверяет их учетной записи, остальное остается за ними. Они могут создать роль экземпляра ec2 и предоставить ей разрешения для вашего сегмента или пользователя IAM и предоставить ему доступ к вашему сегменту. Это не имеет значения.

Лучшее, что я придумал на данный момент, - это предоставление S3 bucket доступа к определенной учетной записи AWS, а затем работа с ключами доступа:

Если код будет запускаться на экземпляре ec2, плохая практика - использовать ключи доступа и вместо этого следует использовать роль экземпляра ec2.

В идеале, автоматически через CloudFormation при запуске экземпляра.

Я думаю, вы имеете в виду экземпляр userdata , который вы можете определить через CloudFormation.

0 голосов
/ 22 мая 2019

Вы говорите: «Клиенты не должны создавать роли IAM». Это совершенно правильно.

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

Затем, когда вы создаете экземпляр Amazon EC2 для своих клиентов, сопоставьте роль IAM с экземпляром. После этого ваши клиенты смогут использовать Интерфейс командной строки AWS (CLI) для доступа к корзине S3 (список, загрузка, загрузка или любые другие разрешения, которые вы добавили в роль IAM).

Если вы хотите, чтобы данные автоматически загружались при первом создании их экземпляра , тогда вы можете добавить Сценарий пользовательских данных , который будет выполняться при запуске экземпляра. Это позволяет загружать файлы из S3 в экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...