Erişimi yalnızca bir kova görmek / erişmek için sınırlayan bir S3 politikası var mı?


123

images.mysite.comS3'ümde ve yedekleri içeren diğer kovalarda vb. Görünen basit bir kova var .

images.mysite.comResimleri yüklemek için belirli bir kullanıcının gruba erişmesine izin vermek istiyorum . Ancak, diğer kovalardan herhangi birini görmesini İSTEMİYORUM; var olduklarından bile değil.

Bunu yapan bir politika yapamadım; kısıtlayıcı bir şey denediğim her seferinde, herhangi bir paketin listelenmesini engelliyor.


Bu soruyu konu dışı olarak kapatmak için oy veriyorum çünkü Superusers'da olması gerekiyor
Tonny Madsen

Şu adreste bir politika oluşturulabilir: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta


1
Neden yalnızca paketin URL'sini paylaşmıyorsunuz - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. Bu şekilde onların tüm listeyi görmelerini engellersiniz ve mevcut politikanızdaki hiçbir şeyi değiştirmezsiniz.
treecoder

Yanıtlar:


119

Bunu bir süredir deniyorum ve sonunda çalışan bir çözüm buldum. Yaptığınız işlemin türüne bağlı olarak farklı "Kaynaklar" kullanmanız gerekir. Ayrıca önceki cevaba bazı eksik eylemleri ekledim (gibi DeleteObject) ve biraz daha kısıtladım (gibi PutBucketAcl).

Aşağıdaki IAM politikası şu anda benim için çalışıyor:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Bir kovayla ilgili eylemler ve nesnelerle ilgili eylemler farklı zamana sahip olmalıdır.


9
Bu harika bir cevap, teşekkürler. S3: ListAllMyBuckets izninin anlamı, bu politikanın alıcısının tüm (kök) kovalarınızı görebilmesidir. Doğrudan veri açıklaması yoktur, ancak paket adlarıyla ilgili hassasiyet / kafa karışıklığı olabilir. Bu belirli izni kaldırmak mümkündür ve işler yine de çalışmalıdır ("s3cmd ls" vb. Hedef grubu döndürmeyecek olsa da).
Mike Repass

91
Bu, kullanıcının diğer paket adlarını görmesini engellemez!
metdos

2
@metdos son politikayı kaldırarak kullanıcıların diğer paket adlarını görmesini engelleyebilirsiniz.
Hendra Uzia

20
Konsolda kovalar listesini görmek (ve bu nedenle kova erişimi için konsolu kullanın) için gereken izni ListAllMyBucketsve GetBucketLocationiçin tüm (S3 kovalar "arn:aws:s3:::*"ziyade çalışacak "*"kaynak için). Bu AWS blog gönderisinde belirtildiği gibi, "bir yana, şu anda belirli paketleri seçerek filtreleyemezsiniz, bu nedenle kullanıcıların konsol erişimi için tüm paketleri listeleme iznine sahip olması gerekir."
jwadsack

10
Bu korkunç bir tavsiye. Tehlikeli ve özellikle de OP'nin istemediği şey. Uygulanabilir geçici çözümler için Andreas Stankewitz ve BFar'ın yanıtlarına bakın .
AndreKR

37

Kullanım örneğimiz: Bulut uygulamamızın istemcileri için, ortak S3 araçlarını kullanarak doğrudan istemciler tarafından erişilebilen yedekleme alanı sağlayın. Tabii ki, hiçbir müşteri diğer müşterilerin sahip olduklarını görmemelidir.

Cloudberryman'ın açıkladığı gibi, "Tüm paketleri listeleyebilir veya hiçbirini listeleyemezsiniz.", Bu yüzden bir çözüm bulmalıyız. Arka fon:

AWS S3 konsolunun veya S3Fox'un hata mesajı olmadan bağlanması için kullanıcıya ListAllMyBuckets haklarının verilmesi gerekir. Ancak ListAllMyBuckets, atanan kaynaklara göre tüm paketleri listeler (aslında, yalnızca arn: ... ::: * çalışır). Bana sorarsan bu ciddi bir hata. Btw. ListBucket paket içeriğini listeleme hakları verdiğinden, tüm paketler için ListBucket'ın reddedilmesi bunların listelenmesini engellemez.

Etrafında çalışmak olarak düşündüğüm 3 olasılık var. Sonuncusunu seçtim.

(1) şifreli paket adları kullanın, örneğin GUID'ler

Avantaj: kurulumu kolay

Dezavantaj: özellikle müşteri için yönetimi zor. (Binlerce başka GUID arasında belirli bir GUID bulduğunuzu hayal edin.) Ayrıca paket sayısını da gösterir = yedekleme hizmetini kullanan istemci sayısı.

(2) istemciye özel klasörlerle bir paket kullanın

Amazon, S3 / IAM örnekleriyle yalnızca belirli kullanıcılar veya kullanıcı grupları tarafından erişim için alan sağlamayı öneriyor. Görmek: AWS Örnek IAM Politikaları

Avantaj: Kurulumu oldukça kolaydır, AWS fikirleriyle uyumludur

Dezavantaj: Müşterinin "ev" kovasını bulabilmesi için tüm paketlerin varlığını herkese açık hale getirmeye zorlar. AWS muhasebesi, paket kullanımının istatistiklerini sağlar ancak klasör kullanımının istatistiklerini sağlamaz, bu da maliyetin müşteriye göre hesaplanmasını zorlaştırır.

(3) ListAllMyBuckets için erişim hakkı vermeyin

Avantaj: İstediğinizi elde edersiniz: müşteriler diğer müşterilerin paketlerini göremez

Dezavantaj: müşteri kendi kovasını göremiyor. S3Browser güzel bir "yapılamaz" mesajıyla gelir ve paket adının girilmesini ister. S3Fox, köke bağlanırken bir hata mesajı atar, ancak paket adı biliniyorsa istemcinin klasörüne doğrudan gezinmeye izin verir. Amazon S3 konsolu hiç çalışmıyor.

Umarım bu, ihtiyaç duyduğunuzda S3 IAM'in işlenmesine yardımcı olur.


1
Ayrıca, Çözüm (1) için, web barındırmayı bir grupla kullanmak istiyorsanız, paket adı alan adıyla eşleşmelidir.
Andy Fusniak

31

ListAllMyBucketsİzin vermeden S3 Konsoluna erişim sağlamak mümkün değildir .

Benim durumumda (ve belki de sizinki gibi, gelecekteki okuyucu) kabul edilebilir bir alternatif, oturum açarken kullanıcıları doğrudan görmelerini istediğiniz gruba yönlendirmektir.

Bunu başarmak için, aşağıdakileri IAM oturum açma url'nize ekleyin: /s3/?bucket=bucket-name

Tam Oturum Açma URL'si ( takma adınızı ve paket adını değiştirin ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

IAM Politikası (paket adını değiştirin ):

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Kullanıcılar için pakete özel izinlerin nasıl oluşturulacağı hakkında daha fazla bilgi için şu blogu okuyun: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam /


1
Bu iyi çalışıyor. Kullanıcılar, kova görünümünün dışını keşfedemezlerse ideal olurdu ... Ama bunu alacağım. Teşekkürler @BFar.
Jamie Popkin

Bu TEK DOĞRU cevaptır, diğerlerinin tümü her bölümü listeleyecektir - bu, orijinal talebe göre gizlenmelidir.
Steve Horvath

Tam olarak ihtiyacım olan şey. Teşekkürler.
dzhg

20

Bu politikayı deneyin. Ayrıca, kullanıcının yalnızca seçilen grubu listelemesine izin vermenin bir yolu olmadığını da hesaba katın. Tüm paketleri listeleyebilir veya hiçbirini listeleyemezsiniz.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}

2
Harika çalışıyor! Benim s3:*için çalışmasını sağlamak için değişiklik eylemi yapmalıydım . Bende vardı "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], ama buna gerek olmayabilir.
Michael Yagudaev

3
s3: *, paket silme dahil her şeyi yapma erişimi verir. Bunu istediğine emin misin?
Dave Gregory

10

Bu soruyu şu şekilde yorumluyorum: "Diğer paketlerin erişilemeyeceği ve dolayısıyla görünmez olacağı bir gruba erişime izin verebilir miyim?" Çünkü, erişim izni verilmeyen paketin adını göstermek, bilgi sızıntısı anlamına gelir.

Ve doğru cevap hayır. Gerekli izin, kullanıcının TÜM paketleri görmesine olanak tanıyan ListAllMyBuckets'tir. Bu iznin dışarıda bırakılması konsolu kullanılamaz hale getirecektir.


6

Kullanıcıların diğer paketler hakkında bilgi sahibi olmadan belirli bir gruba erişmesine olanak tanımanın harika bir yolu vardır. Aşağıdaki gibi bir grup politikası, kullanıcıların yalnızca "paket a" yı görmesine olanak tanır. Tek yakalama, kullanıcının yalnızca verilen paket uç noktasına bağlanırsa pakete erişebilmesidir. Aşağıdaki örnek için bu buck-a.s3.amazonaws.com olacaktır. Paketin bunun gerçekleşmesi için "Kimliği Doğrulanmış Kullanıcılara" izin verilmesi de gerekebilir.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Bu yöntem, Mac OS / X üzerinde Cyberduck ile ve s3cmd paketi kullanılarak test edilmiştir.

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2

Hala tüm paketlerin listesini görebiliyorum. Çalışmıyor :(
Rishikesh Chandra

5

Neden hiçbir cevabın kontrol edilmediği konusunda kafanız mı karıştı?

Her politika bildirimini yukarıdaki çözümlerden ayıralım:

Bu politika beyanı , paketin içeriği için geçerlidir, ancak paranın kendisi için geçerli değildir. Bu muhtemelen değil size kova içinde ne göremiyorum çünkü soru ne istedi.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Bu iki deyim politikası türetilen en kova salt okunur erişimi (verir arn:aws:s3:::your_bucket_here/) salt okunur kovanın içeriğine CRUD operasyonlar, ama yine de izin verir ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

Ancak politika, bir kullanıcının uç noktadaki tüm paketleri görmesine olanak tanıyan aşağıdaki ifadeyi içerir. Bu muhtemelen sorusu ne istedi.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

Ancak, bir S3 mağazasına göz atan bir istemci kullanıyorsanız, yukarıdakiler çok kullanışlıdır. İstemciniz doğrudan pakete değil mağazaya erişiyorsa, kökteki paket listesine erişmeniz gerekir.


3

Muhtemelen en basit kullanım durumu:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}

1
AWS This policy contains the following error: The policy must contain a valid version string
yanıtı

bu doğru - cevabımı düzelttim -> <br/> burada sadece iki olası değer var: <br/> * 2012-10-17 * ve 2008-10-17 . <br/> Daha fazla referans burada bulunabilir: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn

(listing included)Yalnızca kullanıcının girmesine izin verilen paketin nasıl listeleneceği hakkında bir fikriniz var mı? Şimdiye kadar (ve diğer tüm yanıtlara göre), AWS bunu yapmanıza izin vermeyecek gibi görünüyor.
MaximeBernard

3

Bunu AWS Organizations kullanarak yapmanın kolay bir yolu veya geçici çözümü var. AWS organizasyonu, birden çok kullanıcı hesabına sahip olmanıza izin verir. Ana hesabınız birden fazla AWS hesabına (Sub) sahip olabilir ve hangi AWS hesaplarına eklenen hizmetler (s3 / EC2 / *) yalnızca bu kaynaklar görünür olacaktır.

Lütfen bakın https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Hesabım sayfasında organizasyon


3

Bu çözümü buldum:
AWS FLOW:
AWS AKIŞI

Paket politikası:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

IAM politikası:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-kullanıcı -– kullanıcı-adı KULLANICI-ADI --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = ExampleProfile

Kaynak: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS kova politikasına dikkat edin, izinler olmadan dışarıda kalabilirsiniz


2

Yukarıda iyi tartışıldığı gibi, konsolda yalnızca bir kova listelemek mümkün değildir. Ancak S3 klasörünün erişimi bir IAM'ye eklenmişse, URL'den pakete mevcutsa IAM doğrudan gruba erişebilir. S3 demeti url'si şöyle olacaktır:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

BucketName, IAM'nin erişebildiği paketin adıdır


1
Bence 2018'de de tek uygulanabilir çözüm bu.
Saurabh

1

Aşağıdaki çalışmayı başardım. Diğer paketlerin listelendiği için Erişim Reddedildi mesajı alındı. Ancak, yol olarak ayarlanan paket adı ile bağlanırsam istediğim paketi yine de görebiliyordum.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

Bu bağlantıyı test etmek için Cyberduck kullanıyordum.


1

s3:ListAllMyBucketsEylemi belirli gruplarla sınırlandırmak mümkün olmasa da, geçici çözüm olarak onlara belirli paket için Konsol URL'si gönderebilirsiniz, ör.

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Kaynak: S3 Konsolundaki S3 klasörlerinin kısıtlama listesi

Bunu yapmak için, belirli bir kullanıcı veya grup için aşağıdaki ilke belgesini belirtmeniz gerekir:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Okuma ve yazma erişimi vermek için paketleriniz nerede my-bucket-1ve nerede my-bucket-2?

İlişkili:


1

Bu politikayı deneyin. Kullanıcı herhangi bir paketi listeleyemez, izin verilen paket için doğrudan bağlantı kullanmalıdır.

Örneğin: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}

1

Yukarıda açıklananlara benzer:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

Ancak eksik parça burada. Kovaya S3-> Ana Sayfa üzerinden erişim mümkün olmasa da, doğrudan bir bağlantı üzerinden sadece istenen kovaya erişmek mümkündür.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Aşağıdaki gönderide daha fazla bilgi bulabilirsiniz:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/


0

Aşağıdaki çözüm benim için çalıştı. Belirli bir kullanıcıya my_iam_user için belirli bir my-s3- klasöründe erişim izni vermek için bir politika istedim .

Bu politika, kullanıcımın belirli bir s3 paketindeki dosyaları listelemesine, silmesine ve koymasına izin veriyor.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}

0

Sadece buna benzer bir ihtiyaç ekledim, bununla çözüldü:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}

0

Kovanın içeriğini diğer kullanıcılardan gizlemek için aşağıdaki şeyleri kullanıyorum. Bu yalnızca diğer paketleri gizlemeye yardımcı olmakla kalmaz (ListAllMyBuckets kullanmayın), aynı paketteki klasörleri de bir paket oluşturduğunuzda, ancak içinde IAM Kullanıcı / alt klasörüne uygun izinleri atayan alt klasörlere sahip olmak istediğinizde.

Aşağıdaki ilke IAM Grubuna uygulanır ve tüm kullanıcılar bu Gruptadır. aws:useridKovada aynı adı taşıyan bir alt klasör almanız ve oluşturmanız gerekir .

UserID alınabilir: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}

0

Bulduğumuz güzel ve basit bir çözüm, kullanıcının kök dizine giriş yapmasını engellemektir. Bu nedenle, istenen klasöre ayarlanmış uzak yol ile oturum açmaları gerekir.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}

0

Hayır, şu anda kullanıcıları kök altında veya başka herhangi bir yerde seçili paketleri görüntülemeye sınırlamak mümkün değildir. Şu anda yalnızca bu 3 seçeneğiniz var.

Müşteriden paket adını açıkça kullanmasını istemeyi seçtim.



-1

Bu benim için mükemmel çalıştı. Kullanıcı dosya yükleyebilir, indirebilir ve alabilir ancak diğer gruptaki dosyaları göremez.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      

-2

DenyErişmek istemediğiniz paket (ler) için bir madde ekleyin . Hala listelenebileceklerini, ancak içlerindeki içeriğe erişemeyeceğinizi unutmayın.

{
    "Sürüm": "2012-10-17",
    "Beyan": [
        {
            "Efekt": "İzin Ver",
            "Eylem": "s3: *",
            "Kaynak": "*"
        },
        {
            "Etki": "Reddet",
            "Eylem": "s3: *",
            "Kaynak": [
                "Arn: aws: s3 ::: kova-name",
                "Arn: aws: s3 ::: kova adı / *"
            ]
        }
    ]
}

1
Kaynaklara açıkça erişim sağlamalısınız. Varsayılan olarak tüm kaynaklara erişim izni verdiğinizde, gizli tutmak istediğiniz kaynakları yanlışlıkla atlayabilirsiniz. Ayrıca tüm S3 eylemlerine erişim izni verilmesi, kullanıcının kaynakları herkese açık hale getirebileceği veya statik barındırma ayarlayabileceği veya başka zararlı şeyler yapabileceği anlamına gelir.
Ondrej Galbavý
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.