Первоначально я настроил SES для получения электронных писем, и в ходе этого процесса я создал политику корзины, которая позволяла службе помещать электронные письма в S3. Теперь у меня есть лямбда-функция, которая должна быть в состоянии использовать STS, чтобы взять на себя роль и получить доступ к тому же сегменту. К сожалению, я не могу определить правильную политику, позволяющую как службе, так и роли IAM получить доступ к одному и тому же сегменту, сейчас я получаю «доступ запрещен». Я использовал симулятор политики, чтобы убедиться, что все остальное функционировало должным образом, например, я добавил общую политику с большим количеством действий для целевой роли, и если я скажу симулятору игнорировать политику сегмента, то он скажет, что МОЖЕТ получить доступ к файлам.
Я пытался создать два оператора, один с основным установленным значением 'services', а другой с целевыми ролями (добавили два только для того, чтобы посмотреть, сработает ли какой-либо из них)
{
"Version": "2012-10-17",
"Id": "Policy1478013193612",
"Statement": [
{
"Sid": "Stmt1478013187203",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::email-01-bucket/*"
},
{
"Sid": "Stmt55",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:sts::[id-num-with-no-dashes]:assumed-role/[role-name]/[session-name]",
"arn:aws:iam::[id-num-with-no-dashes]:role/[role-name]"
]
},
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::email-01-bucket/*"
}
]
}
Я также пытался поместить это в 1 утверждение:
{
"Version": "2012-10-17",
"Id": "Policy1478013193612",
"Statement": [
{
"Sid": "Stmt1478013187203",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:sts::[id-num-with-no-dashes]:assumed-role/[role-name]/[session-name]",
"arn:aws:iam::[id-num-with-no-dashes]:role/[role-name]"
],
"Service": "ses.amazonaws.com"
},
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::email-01-bucket/*"
}
]
}
Кстати, путь к файлу:
ARN: AWS: s3 ::: электронная почта-01-ведро / электронная почта / [файл-идентификатор]
Я не могу поставить ListBucket, так как он выдаст ошибку.
Любая помощь приветствуется: D
Дайте мне знать, если я должен добавить что-нибудь еще
[Update]
Чтобы упростить поиск правильной политики, я опишу то, что у меня настроено в данный момент в симуляторе политики IAM. Я предполагаю, что если мы сможем заставить его работать здесь, то оно должно работать с лямбда-функцией.
Роль: serviceDev
К этой роли прикреплены две политики.
1) serviceFS:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:PutBucketLogging",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::email-01-bucket/*"
}
]
}
2) AWSLambdaBasicExecutionRole
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
В симуляторе политики:
Раскрывающийся список Select Service
установлен на S3
Раскрывающийся список Select Action
установлен на GetObject
Под Resource
> Object
Я ввожу путь к существующему файлу arn:aws:s3:::email-01-bucket/email/u245hnt85uivpfkrrlhgo0jt86gfjgnca2fgocg1
(после двойной проверки, что файл действительно существует)
Как только я это сделаю, слева появится раздел Resource Policies
, в котором будет показана политика Bucket, прикрепленная к моему корзине, со следующей политикой:
{
"Version": "2012-10-17",
"Id": "Policy1478013193612",
"Statement": [
{
"Sid": "Stmt1478013187203",
"Effect": "Allow",
"Principal": {
"Service": "ses.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::email-01-bucket/*"
}
]
}
Теперь вот где я заблудился, возвращаясь к области Resource
> Object
, где я указываю путь к существующему файлу, есть флажок, помеченный Include Resource Policy
, если я сниму флажок затем симулятор говорит, что разрешение было разрешено, НО если я проверю , то я получаю следующую ошибку:
The simulation could not be performed! : Simulation failed!