Есть ли способ разрешить всем экземплярам, созданным конкретной учетной записью 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.