AWS Bucket Policy — когда ее использовать

AWS Bucket Policy — когда ее использовать

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

Связанный контент