2013-07-19 22 views
13

Tôi đã có thể tạo chính sách người dùng chỉ cấp quyền truy cập vào một nhóm cụ thể, tuy nhiên sau khi thử mọi thứ (bao gồm cả bài đăng này: Is there an S3 policy for limiting access to only see/access one bucket?).Giới hạn danh sách các nhóm cho một người dùng cụ thể

Sự cố: Tôi không thể giới hạn số liệt kê của các nhóm xuống chỉ còn một nhóm. Vì nhiều lý do, tôi không muốn danh sách hiển thị bất kỳ nhóm nào khác với nhóm được chỉ định.

Tôi đã thử nhiều chính sách khác nhau, không có kết quả. Đây là JSON chính sách mới nhất của tôi đang hoạt động như giới hạn hoạt động nhưng không hoạt động trong danh sách:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:ListAllMyBuckets", 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource": "arn:aws:s3:::*" 
    }, 
    { 
     "Effect": "Deny", 
     "Action": [ 
      "s3:ListBucket" 
     ], 
     "NotResource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "s3:*" 
     ], 
     "Resource": [ 
      "arn:aws:s3:::acgbu-acg", 
      "arn:aws:s3:::acgbu-acg/*" 
     ] 
    } 
] 
} 

Mọi trợ giúp sẽ được đánh giá cao. Tôi bắt đầu tự hỏi liệu điều đó có thể xảy ra hay không.

+0

Liên quan: [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?] (Https://stackoverflow.com/q/6615168/55075) & [Làm cách nào để cung cấp cho người dùng quyền truy cập chỉ một nhóm cụ thể trong AWS S3?] (Https://devops.stackexchange.com/q/1626/3) – kenorb

Trả lời

29

Hiện tại, bạn không thể giới hạn danh sách nhóm để chỉ hiển thị một nhóm.

Các AWS console dựa trên hành động ListAllMyBuckets để có được danh sách các xô thuộc sở hữu của người sử dụng, nhưng trong danh sách quay trở lại không thể được hạn chế bằng cách sử dụng một Tên Amazon Resource (hoặc ARN; các ARN duy nhất đó là cho phép ListAllMyBucketsarn:aws:s3:::*).

Giới hạn này không được giải thích rõ ràng trong tài liệu AWS chính thức, nhưng ListAllMyBuckets là cuộc gọi API cấp dịch vụ (gọi là Dịch vụ GET trong API REST), không phải cuộc gọi API cấp nhóm và ARN được liên kết trong IAM chính sách đề cập đến dịch vụ S3 không đến một nhóm cụ thể.

Đối với cách giải quyết tốt, xem this answer trên StackOverflow:

+0

Cảm ơn câu trả lời. Tôi đã thấy bài đăng đó - tôi đã thực sự đào sâu vào điều này rất nhiều. Chúng tôi đã đi với các tùy chọn của khách hàng không thể nhìn thấy xô riêng của họ, đó là một sự xấu hổ, nhưng là lựa chọn tốt nhất cho mối quan tâm chính của chúng tôi. –

+0

[Câu trả lời] (https://stackoverflow.com/a/30961920) cũng có thông tin rất hữu ích. – AndreKR

+0

Chúng tôi cũng chỉ nhấn vấn đề này. Dường như với tôi đây không phải là thứ mà chúng tôi chấp nhận như bình thường. Chúng tôi chạy một số dự án, và nếu tôi muốn một nhân viên chỉ nhìn thấy một thùng khi họ đi đến phần S3 thì điều đó sẽ là có thể. – JeremyTM

3

Các tự do "S3 trình duyệt" (chỉ hoạt động này trên phiên bản của tôi 3-7-5) cho phép người dùng với các điều khoản thích hợp để "Add External Bucket" cho tài khoản , tất cả những gì họ cần biết là tên của cái xô. Điều này cho phép họ "xem" thùng của họ và các nội dung (và những gì họ đã từng được cung cấp trong thùng đó), họ sẽ không thấy bất kỳ nhóm nào khác.

Để thực hiện các xô "chơi đẹp" với hành vi S3 Browser, Tôi đề nghị Chính sách IAM sau cho người dùng hoặc Nhóm:

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:ListBucket", 
     "s3:GetBucketLocation", 
     "s3:GetBucketAcl" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg" 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
     "s3:PutObject", 
     "s3:GetObject", 
     "s3:GetObjectAcl", 
     "s3:DeleteObject" 
     ], 
     "Resource": "arn:aws:s3:::acgbu-acg/*" 
    } 
    ] 
} 

Đó là một công việc xung quanh, và nó không quan trọng nếu người dùng chỉ nhu cầu để làm điều đó một lần. Nhưng nếu các nhóm người dùng của bạn đang truy cập đang thay đổi xung quanh rất nhiều thì công việc này xung quanh không thực tế lắm.

+0

Phần "Thêm nhóm bên ngoài" của câu trả lời này là giải pháp thực sự cho "Trình duyệt S3", tôi khuyên bạn nên sử dụng phần Chính sách IAM một cách cẩn thận không được sao chép. Ví dụ, tôi đã sao chép khối của S3ReadOnly Action;) – ThorSummoner

0

Tôi đến đây để tìm cách hạn chế quyền truy cập vào nhóm đối với một (hoặc một danh sách) người dùng. Có thể, tiêu đề bài viết là mơ hồ?

Dù sao, nó dường như có lợi của Google, vì vậy hãy làm giàu cho nó một chút:
Nếu bạn cần phải hạn chế quyền truy cập vào một cái xô để một số người dùng (s), hãy làm theo những bước sau:


Trước tiên, hãy lấy ID của người dùng bạn muốn cấp quyền.
này có thể đạt được bằng cách sử dụng lệnh awscli aws iam list-users
Những ID giống như thế này: "AIDAIFKYAC9DNJXM2CRD", hoặc "AIDAZ362UEKJCJMFFXCL"
Xin vui lòng, bình luận nếu nó có sẵn trong các trang web console.

Khi bạn nhận (các) ID phải được cấp quyền truy cập, hãy đặt chính sách trên nhóm bạn muốn bảo vệ.
Để làm điều này với web console:
-> Open S3 -> Mở xô của bạn -> Chọn "Properties" tab -> Click vào "chính sách xô Chỉnh sửa"

Để áp dụng chính sách sử dụng awscli, tạo tệp có nội dung của chính sách và đặt nó vào nhóm của bạn bằng lệnh này:
aws s3api put-bucket-policy --bucket NAME_OF_YOUR_BUCKET --policy file:///path/to/policyFile.json
Tất nhiên, đặt DIỄN tên


Cảnh báo: chính sách từ chối này sẽ ghi đè "truy cập s3" mặc định mà người dùng có thể có. Điều này có nghĩa là bạn có thể từ chối quyền truy cập đối với người dùng OWN của bạn bằng cách này. Sử dụng cẩn thận!
Tôi thậm chí sợ bạn có thể làm cho một thùng hoàn toàn không thể tiếp cận được.
Ngoài sự tò mò, tôi đã thử truy cập bằng tài khoản của chúng tôi là root người dùng mà tôi không cấp quyền truy cập và không thể thực hiện được.
Gotta yêu cầu điều này để hỗ trợ và hy vọng cập nhật câu trả lời này.

Dù sao, tôi chắc chắn bạn sẽ cẩn thận, vì vậy đây là chính sách mẫu.
Chỉ cần thay thế tên của nhóm bằng tên của bạn và (các) người dùng bằng (các) bạn muốn cấp quyền truy cập.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Deny", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::your-bucket-name", 
     "arn:aws:s3:::your-bucket-name/*" 
     ], 
     "Condition": { 
     "StringNotLike": { 
      "aws:userId": [ 
      "AIDAXAXAXAXAXAXAXAXAX", 
      "AIDAOXOXOXOXOXOOXOXOX", 
      "AIDAXIXIXIXIXIXIXIXIX" 
      ] 
     } 
     } 
    } 
    ] 
} 

Đối với một cái gì đó cụ thể hơn, hoặc nếu bạn muốn sử dụng vai trò thay vì người dùng, thấy điều này AWS post explaining in detail how to restrict access to a buckets

Hope this helps

+0

Logic là ngược. Bạn đang hạn chế mọi người dùng khác ngoài những người được chọn. –

+0

@Kevin Bạn có thể chính xác không? Từ chối cho tất cả mọi người ngoại trừ người được phép dường như là cách bình thường để áp dụng bảo mật cho tôi. Và btw, bạn cũng có thể áp dụng chính sách này cho nhiều nhóm. Tôi đã không đi sâu hơn nhiều với điều này atm, nhưng tôi sẽ đánh giá cao chi tiết hơn nếu tôi đã làm điều gì đó sai trái. – Balmipour

+0

Người đăng ban đầu đã hỏi về chính sách người dùng. Điều này sẽ được gắn với (các) người dùng cụ thể trong khi những người khác có thể có nhiều chính sách leineint hơn (hoặc không có chính sách) được áp dụng cho họ. Một trường hợp sử dụng điển hình sẽ là nơi bạn chỉ muốn hạn chế một người dùng, thông tin xác thực của họ cần được chia sẻ bên ngoài nhóm tin cậy cao nhất. Chính sách người dùng là cách để thực hiện điều đó. –

0

Những poster ban đầu đã được hỏi về một chính sách người dùng. Điều này sẽ được gắn với (các) người dùng cụ thể trong khi những người khác có thể có nhiều chính sách leineint hơn (hoặc không có chính sách) được áp dụng cho họ. Một trường hợp sử dụng điển hình sẽ là nơi bạn chỉ muốn hạn chế một người dùng, thông tin xác thực của họ cần được chia sẻ bên ngoài nhóm tin cậy cao nhất. Chính sách người dùng là cách để thực hiện điều đó ..

+0

Cảm ơn bạn đã đăng bài. Ví dụ về những gì có thể trông như thế nào? –

+0

@cale_b Xin lỗi - Tôi không có nghĩa là nhận xét của tôi được đặt làm câu trả lời. Tôi đã trả lời một câu hỏi trong phần bình luận cho câu trả lời cuối cùng. Vì vậy, trong bối cảnh đó nó có thể có ý nghĩa hơn. Tôi đồng ý với bạn chấp nhận câu trả lời, rằng bạn không thể hạn chế danh sách các nhóm nhìn thấy. Nó là tất cả hoặc không là gì cả. Tuy nhiên, bạn có thể hạn chế việc liệt kê các đối tượng trong các nhóm vào các nhóm cụ thể. Và nếu bạn muốn có một ví dụ về điều đó, tôi có thể chia sẻ điều đó ở đây. –