Нет необходимости использовать Bucket Policy для вашего сценария. Политика корзины применяется к корзине Amazon S3 и обычно используется для предоставления доступа, который указан c для корзины (например, publi c access).
Использование роли IAM
Если вы хотите sh предоставить групповой доступ для определенного c пользователя IAM, группы IAM или роли IAM, то разрешения должны быть присоединены к объекту IAM, а не к корзине.
(Для get-session-token
см. Конец моего ответа.)
Настройка
Давайте начнем с создания роли IAM, аналогичной той, которая была у вас. Я выбираю Создать роль , затем для доверенного лица выбираю Другая AWS учетная запись (поскольку это будет пользователь IAM, а не служба).
I затем создайте встроенную политику для роли IAM, чтобы разрешить доступ к корзине:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
(Обычно не рекомендуется назначать разрешения s3:*
, поскольку это позволяет пользователю удалить содержимое и даже удалить корзину. Попробуйте ограничить его минимальными разрешениями, которые фактически требуются.)
Доверительные отношения в роли IAM определяют, кому разрешено предполагать роль. Это может быть один человек или кто-либо другой в учетной записи (если им было разрешено звонить AssumeRole
). В моем случае я назначу его всей учетной записи:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY-ACCOUNT-ID:root"
},
"Action": "sts:AssumeRole"
}
]
}
Теперь есть несколько различных способов занять роль ...
Простой метод: IAM Роль в файле учетных данных
CLI AWS имеет возможность указать роль IAM в файле учетных данных и автоматически примет на себя роль.
См .: Использование роли IAM в AWS CLI
Чтобы использовать это, я добавляю раздел в свой файл .aws/config
:
[profile foo]
role_arn = arn:aws:iam::MY-ACCOUNT-ID:role/MY-ROLE-NAME
source_profile = default
Я мог бы затем просто использовать это с помощью:
aws s3 ls s3://my-bucket --profile foo
Это успешно позволяет мне получить доступ к этому указанному c сегменту.
Сложный метод: Примите роль самостоятельно
Скорее чем позволить AWS CLI делать всю работу, я также могу взять на себя роль:
aws sts assume-role --role-arn arn:aws:iam::MY-ACCOUNT-ID:role/MY-ROLE-NAME --role-session-name foo
{
"Credentials": {
"AccessKeyId": "ASIA...",
"SecretAccessKey": "...",
"SessionToken": "...",
"Expiration": "2020-02-11T00:43:30+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROA...:foo",
"Arn": "arn:aws:sts::MY-ACCOUNT-ID:assumed-role/MY-ROLE-NAME/foo"
}
}
Затем я добавил эту информацию в файл .aws/credentials
:
[foo2]
aws_access_key_id = ASIA...
aws_secret_access_key = ...
aws_security_token= ...
Да, вы можете добавить это в файл учетных данных, используя aws configure --foo2
, но он не запрашивает токен безопасности. Поэтому вам необходимо отредактировать файл учетных данных, чтобы добавить эту информацию в любом случае.
Затем я использовал профиль:
aws s3 ls s3://my-bucket --profile foo2
Это позволило мне успешно получить доступ и использовать корзину.
Использование GetSessionToken
В приведенных выше примерах используется IAM Role . Это обычно используется для предоставления доступа к нескольким учетным записям или для временного принятия более мощных учетных данных (например, администратора, выполняющего важные операции).
Ваш вопрос содержит ссылки get-session-token
. Это обеспечивает временных учетных данных на основе существующих учетных данных пользователя и разрешений . Таким образом, они не могут получить дополнительные разрешения в рамках этого вызова API.
Этот вызов обычно используется либо для предоставления токена MFA, либо для предоставления ограниченных по времени учетных данных для целей тестирования. Например, я мог бы предоставить вам учетные данные, которые позволят вам эффективно использовать моего пользователя IAM, но только в течение ограниченного времени.