Детализированные разрешения для документов политики в AWS

#permissions #amazon-s3 #authorization #amazon-web-services #group-policy

#разрешения #amazon-s3 #авторизация #amazon-веб-сервисы #групповая политика

Вопрос:

Я хочу, чтобы пользователи, созданные с помощью IAM, могли просматривать одну конкретную корзину в консоли управления. Кроме того, я хочу ограничить его папкой в корзине, чтобы разрешения были:

Доступ к консоли S3 для my-bucket / папки/*

Как бы я это сделал, используя генератор политик? В настоящее время у меня есть:

 {
   "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
  

Однако, когда я изменяю местоположение ресурса — arn:aws:s3:::my-bucket/folder — это вообще не позволяет пользователю использовать консоль. Возможно ли это сделать и что мне нужно сделать, чтобы это исправить?

Ответ №1:

Политика для этого напомнила мне о выполнении аппроксимации Эйлера, но вот как я это сделал (с комментариями для объяснения):

 {
  "Statement": [
{             // first, allow unlimited access for S3
  "Effect": "Allow",  
  "Action": "s3:*",
  "Resource": "*"
},
{             // second, deny access to all buckets except for the particular bucket
  "Action": [
    "s3:*"
  ],
  "Effect": "Deny",
  "Resource": [
    list-of-my-other-buckets
  ]
},
{             // third, since we've already given * permissions, the bucket has full 
              // permissions, and we need to restrcit all the permissions we don't want to give
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:CreateBucket",
    "s3:DeleteBucket",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetBucketAcl",
    "s3:GetBucketNotification",
    "s3:GetBucketPolicy",
    "s3:GetBucketRequestPayment",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutBucketAcl",
    "s3:PutBucketNotification",
    "s3:PutBucketPolicy",
    "s3:PutBucketRequestPayment",
    "s3:PutBucketVersioning",
    "s3:PutObjectAcl",
    "s3:PutObjectVersionAcl"
  ],      
  "Effect": "Deny",
  "Resource": [
    "arn:aws:s3:::my-bucket/*"
          ]
        }
    ]
}