
Я пытаюсь создать политику контейнера, которая будет предоставлять доступ из экземпляра ec2 или ecs, чтобы предоставить им возможность putObject для определенного контейнера.
У меня есть несколько основных вопросов:
1) Является ли политика Bucket правильным решением, если все, что вам нужно сделать, это предоставить доступ из ec2 к bucket в пределах одной учетной записи? В документах, похоже, много говорится о доступе между учетными записями.
2) Каким должен быть принцип, чтобы этого добиться? Например, есть ли принцип, который я могу установить, который просто скажет "предоставить доступ из любого ресурса в этой учетной записи aws"?
3) Я добился этого, указав роль IAM экземпляра ec2 в принципе (см. ниже). Но является ли это предпочтительным способом сделать это?
{
"Version": "2012-10-17",
"Id": "Policy1563569774763",
"Statement": [
{
"Sid": "Stmt1563569772515",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::XXXX:role/S3_Read_All"
]
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::some-test-bucket-12345/*"
}
]
}
Спасибо заранее! Мне трудно это осознать.
решение1
Ваша интуиция была права. Если все, что вы хотите сделать, это предоставить доступ к контейнеру в том же аккаунте, то, вероятно, проще простоиспользовать политику IAM. Вы бы прикрепили такую политику кроль, который в свою очередь будет присоединен к экземпляру EC2.
Следует отметить, что, принимая во внимание политику, изложенную в первой ссылке:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListObjectsInBucket",
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::bucket-name"]
},
{
"Sid": "AllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": ["arn:aws:s3:::bucket-name/*"]
}
]
}
В первом операторе "ListObjectsInBucket" ресурс установлен на контейнер. ARN равен arn:aws:s3:::bucket-name
(нет *
там). Во втором операторе arn установлен на arn:aws:s3:::bucket-name/*
. /*
There означает "все объекты в контейнере имя-контейнера". Некоторые действия IAM применяются к контейнерам, другие — к объектам.
Вы также можете использовать префикс, например arn:aws:s3:::bucket-name/prefix*
, , который предоставит доступ ко всем объектам, имя которых начинается с "prefix". Помните, что имя объекта в S3 — это полное имя, включая маркеры пути ("/"), то есть "/path/to/object", а не просто "object". В S3 нет каталогов.
Другое дело, что когда вы прикрепляете роль к экземпляру EC2, вы даете любому, кто имеет доступ к экземпляру, те же разрешения, что и у роли. Поэтому убедитесь, что любой пользователь, который может войти в экземпляр EC2, также должен иметь доступ к контейнеру S3.
Помните, что уровень доступа объекта (пользователя, экземпляра ec2, лямбда-функции и т. д.) к контейнеру задается набором политик, полученным в результате объединения политик IAM и политик контейнера. И операторы Deny имеют приоритет. Вам нужно использовать только один из них, когда и объект, и контейнер находятся в одной учетной записи, и политики IAM, вероятно, являются естественным выбором. При перекрестном доступе к учетным записям политики контейнера используются для предоставления доступа к другой учетной записи для контейнера, по сути. Политика IAM также устанавливается в другой учетной записи.