Веб-Службы Amazon — Terraform Aws S3 — Запретить Всем Пользователям, Кроме Определенного Пользователя

  • Автор темы Amd_sempron
  • Обновлено
  • 22, Oct 2024
  • #1

У меня есть ведро, которое мне нужно ограничить конкретным пользователем. Я написал следующий сценарий, но, похоже, он по-прежнему позволяет всем пользователям работать с этим ведром.

resource "aws_s3_bucket" "vulnerability-scans" {

bucket = "vulnerability-scans"
}

resource "aws_s3_bucket_policy" "vulnerability-scans" {

bucket = aws_s3_bucket.vulnerability-scans.id

policy = data.aws_iam_policy_document.vulnerability-scans.json
}

data "aws_iam_policy_document" "vulnerability-scans" {

statement {

principals {

type = "AWS"

identifiers = [

aws_iam_user.circleci.arn,

]

}

actions = [

"s3:PutObject",

"s3:GetObject",

"s3:ListBucket",

]

resources = [

aws_s3_bucket.vulnerability-scans.arn,

"${aws_s3_bucket.vulnerability-scans.arn}/*",

]

}
}

#amazon-web-services #terraform #amazon-s3

Amd_sempron


Рег
22 Nov, 2011

Тем
66

Постов
201

Баллов
551
  • 25, Oct 2024
  • #2

Прежде всего давайте разберемся, как роли и политики работают в AWS. Чтобы пользователь мог получить доступ к корзине, мы можем разрешить это тремя способами:

  1. Разрешите это, используя политику IAM, прикрепленную к роли, которую принимает на себя пользователь;
  2. Разрешите это с помощью политики сегмента;
  3. К группе пользователя прикреплена политика или существует политика, непосредственно прикрепленная к пользователю, которая разрешает доступ к сегменту.

Это явные

data "aws_iam_policy_document" "vulnerability-scans" {

statement {

not_principals {

type = "AWS"

identifiers = [

aws_iam_user.circleci.arn

]

}

effect = "Deny"

actions = [

"s3:*"

]

resources = [

aws_s3_bucket.vulnerability-scans.arn,

"${aws_s3_bucket.vulnerability-scans.arn}/*",

]

}
}
policies. The user will have access if there is at least on policy from above granting him/her access.

Важно то, что явный

{

"Id": "bucketPolicy",

"Statement": [

{

"Action": "s3:*",

"Effect": "Deny",

"NotPrincipal": {

"AWS": [

"arn:aws:iam::1234567890:user/alloweduser"

]

},

"Resource": [

"arn:aws:s3:::examplebucket",

"arn:aws:s3:::examplebucket/*"

]

}

],

"Version": "2012-10-17"
}
takes precedence of an explicit
NotPrincipal
. Итак, если мы хотим запретить доступ конкретному пользователю, нам нужно создать политику корзины с явным
Deny
. In order to do this, мы можем использовать
Allow
.

Пример политики сегмента:

Deny

Код Terraform для этой политики:

Allow
 

Atanskiy


Рег
10 Jun, 2020

Тем
87

Постов
209

Баллов
674
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно