Có chính sách S3 để giới hạn quyền truy cập chỉ xem / truy cập một nhóm không?


123

Tôi có một thùng đơn giản trông giống như images.mysite.comtrên S3 của tôi và các thùng khác có chứa bản sao lưu, v.v.

Tôi muốn cho phép một người dùng cụ thể có thể truy cập vào images.mysite.comnhóm để tải lên hình ảnh. Tuy nhiên, tôi KHÔNG muốn anh ấy thấy bất kỳ cái xô nào khác; thậm chí không tồn tại

Tôi không thể đưa ra một chính sách làm điều này; mỗi khi tôi thử một cái gì đó hạn chế, nó sẽ chặn danh sách của bất kỳ thùng nào.


Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì nó nên có trên Superusers
Tonny Madsen

Một chính sách có thể được tạo tại đây tại: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta


1
Tại sao không chỉ chia sẻ URL của nhóm - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. Bằng cách này, bạn giữ cho họ không nhìn thấy toàn bộ danh sách và không thay đổi bất cứ điều gì trong chính sách hiện tại của bạn.
treecoder

Câu trả lời:


119

Tôi đã thử điều này một thời gian và cuối cùng đã đưa ra một giải pháp hiệu quả. Bạn phải sử dụng các "Tài nguyên" khác nhau tùy thuộc vào loại hành động bạn đang thực hiện. Ngoài ra tôi đã bao gồm một số hành động bị thiếu trong câu trả lời trước (như DeleteObject) và hạn chế một số hành động khác (như PutBucketAcl).

Chính sách IAM sau đây hiện đang hoạt động với tôi:

{
  "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": {}
    }
  ]
}

Các hành động liên quan đến một cái xô và những thứ liên quan đến các đối tượng phải có arn khác nhau.


9
Đây là một câu trả lời tuyệt vời, cảm ơn bạn. Điều đáng chú ý là hàm ý của quyền s3: ListAllMyBuckets là người nhận chính sách này có thể thấy tất cả các nhóm (gốc) của bạn. Không có tiết lộ dữ liệu trực tiếp, nhưng có thể có sự nhạy cảm / nhầm lẫn xung quanh tên nhóm. Có thể loại bỏ sự cho phép cụ thể này và mọi thứ vẫn hoạt động (mặc dù "s3cmd ls", v.v. sẽ không trả về nhóm mục tiêu).
Mike Repass

91
Điều này không ngăn người dùng nhìn thấy các tên xô khác!
metdos

2
@metdos bạn có thể ngăn người dùng xem các tên nhóm khác bằng cách xóa chính sách cuối cùng.
Hendra Uzia

20
Để xem danh sách các nhóm trong bảng điều khiển (và do đó sử dụng bảng điều khiển để truy cập nhóm), bạn phải cấp ListAllMyBucketsGetBucketLocationcho tất cả các nhóm S3 ( "arn:aws:s3:::*"sẽ hoạt động thay vì "*"cho tài nguyên). Như đã nêu trong bài đăng trên blog AWS này "như một bên, hiện tại bạn không thể chọn lọc một số nhóm nhất định, vì vậy người dùng phải có quyền liệt kê tất cả các nhóm để truy cập bảng điều khiển."
jwadsack

10
Đây là lời khuyên khủng khiếp. Điều đó thật nguy hiểm và đặc biệt là những gì OP không muốn. Xem câu trả lời của Andreas StankewitzBFar để biết cách giải quyết khả thi.
AndreKR

37

Trường hợp sử dụng của chúng tôi: Cung cấp không gian sao lưu cho các máy khách của ứng dụng đám mây của chúng tôi có thể được khách hàng truy cập trực tiếp bằng các công cụ S3 phổ biến. Tất nhiên, không khách hàng nào nên xem những khách hàng khác có gì.

Như cloudberryman đã giải thích, "Bạn có thể liệt kê tất cả các thùng hoặc không.", Vì vậy chúng tôi phải đưa ra một công việc xung quanh. Lý lịch:

Cấp quyền ListAllMyBuckets cho người dùng là cần thiết để bảng điều khiển AWS S3 hoặc S3Fox kết nối mà không có thông báo lỗi. Nhưng ListAllMyBuckets liệt kê tất cả các nhóm, liên quan đến các tài nguyên được gán (thực ra, chỉ arn: ... ::: * hoạt động). Đó là một lỗi nghiêm trọng, nếu bạn hỏi tôi. Btw. từ chối ListBucket cho tất cả các nhóm không ngăn chúng được liệt kê, vì ListBucket cấp quyền liệt kê nội dung của nhóm.

Có 3 khả năng tôi coi là công việc xung quanh. Tôi đã chọn cái cuối cùng.

(1) sử dụng tên nhóm khó hiểu, ví dụ GUID

Ưu điểm: dễ cài đặt

Nhược điểm: khó quản lý, đặc biệt là đối với khách hàng. (hãy tưởng tượng để tìm một GUID cụ thể có hàng ngàn người khác.) Cũng hiển thị số lượng xô = số lượng khách hàng sử dụng dịch vụ sao lưu.

(2) sử dụng một nhóm với các thư mục cụ thể của khách hàng

Đây là cách Amazon gợi ý bằng các ví dụ S3 / IAM của họ để cung cấp không gian để chỉ truy cập bởi một số người dùng hoặc nhóm người dùng nhất định. Xem: Chính sách IAM của AWS

Ưu điểm: khá dễ cài đặt, phù hợp với ý tưởng AWS

Nhược điểm: buộc phải thực hiện sự tồn tại của tất cả các thùng, vì vậy khách hàng có thể tìm thấy thùng "nhà" của họ. Kế toán AWS cung cấp số liệu thống kê về việc sử dụng nhóm, nhưng không sử dụng thư mục, điều này gây khó khăn cho việc tính toán chi phí theo khách hàng.

(3) không cấp quyền truy cập cho List ALLMyBuckets

Ưu điểm: bạn có được những gì bạn muốn: khách hàng không thể thấy các thùng của khách hàng khác

Nhược điểm: khách hàng không thể nhìn thấy thùng của mình. S3Browser đi kèm với một thông báo "không thể làm" đẹp và yêu cầu nhập tên nhóm. S3Fox ném thông báo lỗi khi kết nối với thư mục gốc, nhưng cho phép điều hướng trực tiếp đến nhóm của khách hàng nếu biết tên nhóm. Bảng điều khiển Amazon S3 hoàn toàn không hoạt động.

Hy vọng điều này đã giúp xử lý S3 IAM khi bạn cần.


1
Ngoài ra, đối với Giải pháp (1) nếu bạn muốn sử dụng lưu trữ web với nhóm thì tên nhóm phải khớp với tên miền.
Andy Fusniak

31

Không thể cung cấp quyền truy cập vào Bảng điều khiển S3 mà không cấp ListAllMyBucketsquyền.

Trong trường hợp của tôi (và có lẽ là của bạn, người đọc tương lai), một lựa chọn thay thế có thể chấp nhận được là chuyển hướng người dùng đăng nhập trực tiếp vào nhóm bạn muốn họ nhìn thấy.

Để thực hiện điều này, hãy thêm phần sau vào url đăng nhập IAM của bạn: /s3/?bucket=bucket-name

URL đăng nhập đầy đủ (thay thế bí danhtên nhóm của bạn ):

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

Chính sách IAM (thay thế tên xô ):

{
    "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/*"
            ]
        }
    ]
}

Để biết thêm thông tin về cách tạo quyền truy cập cụ thể cho người dùng, hãy đọc blog này: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-USE-amazon-iam /


1
Điều này hoạt động tốt. Sẽ là tối ưu nếu người dùng không thể khám phá bên ngoài chế độ xem xô .... Nhưng tôi sẽ lấy nó. Cảm ơn @BFar.
Jamie Popkin

Đây là câu trả lời MỘT ĐÚNG, tất cả những câu trả lời khác sẽ liệt kê mọi nhóm - cần được ẩn theo yêu cầu ban đầu.
Steve Horvath

Chính xác những gì tôi cần. Cảm ơn.
Di Zhang

20

Hãy thử chính sách này. cũng tính đến việc không có cách nào để cho phép danh sách người dùng chỉ chọn nhóm. Bạn có thể liệt kê tất cả các thùng hoặc không.

{
    "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
Nó hoạt động rất tốt! Tôi đã phải thay đổi hành động để có s3:*được nó làm việc cho tôi. Tôi cũng đã có "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], nhưng điều này có thể không cần thiết.
Michael Yagudaev

3
s3: * cấp quyền truy cập để làm bất cứ điều gì, bao gồm xóa một nhóm. Chắc chắn bạn muốn điều đó?
Dave Gregory

10

Tôi đang giải thích câu hỏi này là: "Tôi có thể cho phép truy cập vào một nhóm trong đó mọi thùng khác sẽ không thể truy cập được và do đó không thể nhìn thấy." Bởi vì, hiển thị tên của nhóm mà không có quyền truy cập nào được cấp vẫn tương đương với rò rỉ thông tin.

Và câu trả lời đúng là không. Sự cho phép cần thiết là ListAllMyBuckets sẽ cho phép người dùng nhìn thấy TẤT CẢ các thùng. Bỏ quyền này sẽ khiến giao diện điều khiển không thể sử dụng được.


6

Có một cách tuyệt vời để cho phép người dùng truy cập vào một nhóm cụ thể mà không bao gồm kiến ​​thức về các nhóm khác. Chính sách nhóm giống như chính sách dưới đây sẽ cho phép người dùng chỉ nhìn thấy "xô a". Điều hấp dẫn duy nhất là người dùng sẽ chỉ có thể truy cập vào nhóm nếu họ kết nối với điểm cuối của nhóm đã cho. Đối với ví dụ dưới đây sẽ là xô-a.s3.amazonaws.com. Nhóm cũng có thể phải có "Người dùng xác thực" cho phép điều này xảy ra.

{
    "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/*"
      ]
     }
   ]
}

Phương pháp này đã được thử nghiệm với Cyberduck trên Mac OS / X và sử dụng gói s3cmd

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

Tôi vẫn có thể xem danh sách tất cả các thùng. Không hoạt động :(
Rishikesh Chandra

5

Bối rối về lý do tại sao không có câu trả lời đã được kiểm tra?

Hãy chia nhỏ từng tuyên bố chính sách từ các giải pháp trên:

Tuyên bố chính sách này từ áp dụng cho các nội dung của xô, nhưng không buck chính nó. Đây có lẽ không phải là những gì câu hỏi yêu cầu, bởi vì bạn không thể thấy những gì trong thùng.

{
"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": {}
}

Chính sách hai câu lệnh này xuất phát từ việc cung cấp quyền truy cập chỉ đọc vào nhóm tại ( arn:aws:s3:::your_bucket_here/) chỉ đọc , nhưng vẫn cho phép CRUD hoạt động trên nội dung của nhóm ( 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": {}
}

Tuy nhiên, chính sách bao gồm tuyên bố dưới đây, cho phép người dùng nhìn thấy tất cả các nhóm ở điểm cuối. Đây có lẽ không phải là những gì câu hỏi yêu cầu.

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

Tuy nhiên, những điều trên rất hữu ích nếu bạn sử dụng máy khách trình duyệt một cửa hàng S3. Nếu khách hàng của bạn truy cập vào cửa hàng và không trực tiếp xô, vì vậy bạn cần truy cập vào danh sách các thùng ở gốc.


3

Có lẽ trường hợp sử dụng đơn giản nhất:

{
  "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 trả lời:This policy contains the following error: The policy must contain a valid version string
MaximeBernard

điều đó đúng - tôi đã sửa câu trả lời của mình -> <br/> chỉ có hai giá trị có thể có ở đây: <br/> * 2012-10-17 * và 2008-10-17 . <br/> Tham khảo thêm có thể được tìm thấy ở đây: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/ Kẻ
jjanczyszyn

Bất kỳ ý tưởng về (listing included)ý nghĩa làm thế nào để chỉ liệt kê xô người dùng được phép vào? Cho đến nay (và theo tất cả các câu trả lời khác), có vẻ như AWS sẽ không cho phép bạn làm điều đó.
MaximeBernard

3

Có một cách dễ dàng hoặc cách giải quyết để làm điều này bằng cách sử dụng AWS Organisation. Tổ chức AWS cho phép bạn có nhiều tài khoản người dùng. Tài khoản chính của bạn sẽ có thể có nhiều tài khoản AWS (Sub) và những dịch vụ nào (s3 / EC2 / *) được thêm vào trong bất kỳ tài khoản AWS nào chỉ những tài nguyên đó sẽ hiển thị.

Vui lòng tham khảo https://aws.amazon.com/bloss/aws/aws- tổ chức -policy-basing-man Quản lý-for-mult Môn -aws-accs / https://aws.amazon.com / tổ chức /

Tổ chức trên trang tài khoản của tôi


3

Tôi tìm thấy giải pháp này:
AWS FLOW:
LƯU HOA

Chính sách xô:

{
  "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
          ]
        }
      }
    }
  ]
}

Chính sách của IAM:

{
  "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-user-Monguser-name USER-NAME --profile = exampleProfile

aws iam get-vai trò - tên tên ROLE-NAME --profile = exampleProfile

Nguồn: https://aws.amazon.com/bloss/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PS hãy cẩn thận với chính sách xô, bạn có thể đứng ngoài mà không có quyền


2

Vì nó đã được thảo luận tốt ở trên, chỉ có thể liệt kê một nhóm trên bảng điều khiển. Nhưng nếu quyền truy cập của nhóm S3 được gắn vào IAM, IAM có thể truy cập trực tiếp vào nhóm nếu có sẵn URL. Url xô S3 sẽ như sau:

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

Trong đó BuckName là tên của nhóm IAM có quyền truy cập vào


1
Tôi nghĩ rằng đây là giải pháp khả thi duy nhất trong năm 2018 cũng có.
Saurabh

1

Tôi quản lý để có được làm việc sau đây. Đồng nghĩa với việc liệt kê các nhóm khác nhận được thông báo Từ chối truy cập. Nhưng vẫn có thể thấy cái xô mà tôi muốn nếu tôi kết nối với tên nhóm được đặt làm đường dẫn.

{
  "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/*"]
    }
  ]
}

Tôi đã sử dụng Cyberduck để kiểm tra kết nối này.


1

Mặc dù không thể hạn chế s3:ListAllMyBucketshành động đối với các nhóm cụ thể, nhưng để giải quyết, bạn có thể gửi URL Bảng điều khiển cho nhóm cụ thể, ví dụ:

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

Nguồn: Hạn chế danh sách các thùng S3 từ Bảng điều khiển S3

Để làm điều đó, bạn sẽ cần chỉ định tài liệu chính sách sau cho người dùng hoặc nhóm cụ thể:

{
    "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:::*"
        }
    ]
}

Các thùng của bạn ở đâu my-bucket-1my-bucket-2cho phép truy cập đọc và viết.

Liên quan:


1

Hãy thử chính sách này. Người dùng không thể liệt kê bất kỳ nhóm nào, họ phải sử dụng liên kết trực tiếp đến nhóm được phép.

Ví dụ: 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

Tương tự như những gì người khác mô tả ở trên:

{
   "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/*"
      }
   ]
}

Tuy nhiên, đây là phần còn thiếu. Mặc dù không thể truy cập nhóm qua S3-> Trang chủ, nhưng chỉ có thể truy cập nhóm mong muốn thông qua liên kết trực tiếp.

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

Bạn có thể tìm thêm thông tin trong bài sau:

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


0

Các giải pháp dưới đây làm việc cho tôi. Tôi muốn có một chính sách cấp quyền truy cập cho một người dùng cụ thể my_iam_user trên một nhóm cụ thể my-s3-xô .

Chính sách này cho phép người dùng của tôi liệt kê, xóa, nhận e đặt các tệp vào một nhóm s3 cụ thể.

{
    "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

Tôi chỉ cần thêm một nhu cầu tương tự, được giải quyết bằng cách này:

{
  "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

Tôi sử dụng những thứ sau đây để ẩn nội dung của xô khỏi những người dùng khác. Điều này không chỉ giúp ẩn các nhóm khác (không sử dụng ListAllMyBuckets), mà cả các thư mục trong cùng một nhóm, khi bạn tạo một nhóm, nhưng muốn có các thư mục con trong đó gán quyền thích hợp cho Người dùng / thư mục con IAM.

Chính sách sau đây được áp dụng cho IAM Group và tất cả người dùng đều thuộc Nhóm này. Bạn cần lấy aws:useridvà tạo một thư mục con có cùng tên trong nhóm.

Có thể lấy ID người dùng: 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

Một giải pháp đơn giản mà chúng tôi đã đưa ra là chặn người dùng đăng nhập vào thư mục gốc. Vì vậy, họ phải đăng nhập với đường dẫn từ xa được đặt vào thư mục mong muốn.

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

0

Không, hiện tại không thể giới hạn người dùng xem các nhóm chọn lọc dưới quyền root hoặc bất kỳ nơi nào khác. Bạn chỉ có 3 lựa chọn ngay bây giờ.

Tôi đã chọn yêu cầu khách hàng sử dụng tên xô một cách rõ ràng.



-1

Điều này làm việc hoàn hảo cho tôi. Người dùng có thể tải lên, Tải xuống và nhận danh sách các tệp nhưng sẽ không thể xem các tệp từ nhóm khác.

 {    

"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

Thêm một Denymệnh đề cho (các) nhóm bạn không muốn truy cập. Hãy nhớ rằng chúng vẫn có thể được liệt kê, nhưng bạn sẽ không thể truy cập nội dung bên trong chúng.

{
    "Phiên bản": "2012-10-17",
    "Tuyên bố": [
        {
            "Hiệu ứng": "Cho phép",
            "Hành động": "s3: *",
            "Nguồn": "*"
        },
        {
            "Hiệu ứng": "Từ chối",
            "Hành động": "s3: *",
            "Nguồn": [
                "arn: aws: s3 ::: tên xô",
                "arn: aws: s3 ::: tên xô / *"
            ]
        }
    ]
}

1
Bạn nên cấp quyền truy cập rõ ràng vào tài nguyên. Khi bạn mặc định cấp quyền truy cập cho tất cả các tài nguyên, bạn có thể vô tình bỏ qua các tài nguyên bạn muốn giữ riêng tư. Ngoài ra, cấp quyền truy cập cho tất cả các hành động S3 có nghĩa là người dùng có thể đặt tài nguyên ở chế độ công khai hoặc thiết lập lưu trữ tĩnh hoặc thực hiện các hoạt động gây hại khác.
Ondrej Galbavý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.