Hành động Nhóm S3 không áp dụng cho bất kỳ tài nguyên nào


124

Tôi đang làm theo hướng dẫn từ câu trả lời này để tạo chính sách nhóm S3 sau:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

Tôi gặp lại lỗi sau:

Hành động không áp dụng cho bất kỳ (các) tài nguyên nào trong tuyên bố

Tôi còn thiếu điều gì trong chính sách của mình?


1
Tôi đã thử giải pháp trong liên kết: stackoverflow.com/a/36551238/2786039 Và nó đã hoạt động ngay bây giờ. Trân trọng
Vương Nguyên

Câu trả lời:


218

Từ tài liệu IAM, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

Một số dịch vụ không cho phép bạn chỉ định hành động cho các tài nguyên riêng lẻ; thay vào đó, bất kỳ hành động nào bạn liệt kê trong phần tử Hành động hoặc Không hành động sẽ áp dụng cho tất cả các tài nguyên trong dịch vụ đó. Trong những trường hợp này, bạn sử dụng ký tự đại diện * trong phần tử Tài nguyên.

Với thông tin này, tài nguyên sẽ có giá trị như sau:

"Resource": "arn:aws:s3:::surplace-audio/*"

39
Không thể tin rằng điều này không được đề cập trong chính sách của nhóm và / hoặc trình tạo chính sách!
Carles Alcolea

4
Tôi đang sử dụng * và nó vẫn cho lỗi đó. ai đó có thể giúp tôi?
Yehuda Clinton

@YehudaClinton, phù hợp với tôi. đảm bảo thêm cả hai / *
RMati

74

Chỉ xóa s3:ListBucketquyền thực sự không phải là một giải pháp đủ tốt đối với tôi và có lẽ cũng không phải với nhiều người khác.

Nếu bạn muốn có s3:ListBucketquyền, bạn chỉ cần có arn đơn giản của nhóm (không có /*ở cuối) vì quyền này áp dụng cho chính nhóm chứ không phải các mục trong nhóm.

Như được hiển thị bên dưới, bạn phải có s3:ListBucketquyền dưới dạng một tuyên bố riêng biệt với các quyền liên quan đến các mục trong nhóm như s3:GetObjects3:PutObject:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"        
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject", 
        "s3:PutObject"
      ],
      "Principal": {
        "AWS": "[IAM ARN HERE]"
      },
      "Resource": "arn:aws:s3:::my-bucket-name/*"
    }
  ]
}

Đã đồng ý. Đối với một số hành động, cần có quyền ListBucket trước khi bạn có thể thực hiện GetObject, vì vậy, câu trả lời này sẽ thấu đáo hơn.
3cheesewheel

2
Điều này phù hợp với tôi và chỉ làm nổi bật công việc AWS vẫn phải làm trong việc hướng dẫn người dùng thực hiện những việc cơ bản.
volvox

41

Hành động Lỗi không áp dụng cho bất kỳ (các) tài nguyên nào trong câu lệnh

Điều đó đơn giản có nghĩa là hành động (bạn đã viết trong chính sách) không áp dụng cho tài nguyên. Tôi đang cố gắng công khai nhóm của mình để mọi người có thể tải xuống từ nhóm của tôi. Tôi đã gặp lỗi cho đến khi tôi xóa ("s3: ListBucket") khỏi tuyên bố của mình.

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

Vì nhóm danh sách không áp dụng bên trong nhóm, do đó, bằng cách xóa chính sách hành động này đã hoạt động tốt.


Cảm ơn bạn, điều đó đã hiệu quả với tôi, xóa "s3: ListBucket".
Paul Watson

14

Vừa mới gặp phải vấn đề này và tìm thấy một giải pháp ngắn hơn cho những người muốn có ListBucket và GetObject trong cùng một chính sách.

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

Sai - PrincipalKhông được phép đối với ngữ pháp Chính sách S3.
azec-pdx

Không có giải pháp nào ở trên phù hợp với tôi, Hiệu trưởng không hợp lệ hoặc tôi sẽ bị từ chối quyền truy cập.
Daniel

Điều này đúng, Tài nguyên phải là một mảng trong trường hợp này và bao gồm 2 dòng đó ... Hãy bình chọn.
Assil

4

Tôi cũng đã gặp phải vấn đề tương tự khi tạo nhóm

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}

Tôi đã thay đổi mã trên thành

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

thêm / * vào tên nhóm của bạn, nó sẽ giải quyết được vấn đề

Đây tên nhóm của tôi là mrt9949


Cảm ơn bạn! Đã dành nhiều thời gian để tìm kiếm điều này
Jack_Hardy

4

Trong trường hợp của tôi, giải pháp cho lỗi này là cố gắng xóa một số Hành động mà tôi đang áp dụng. Một số trong số chúng không liên quan hoặc không thể hoạt động với tài nguyên này. Trong trường hợp này, nó sẽ không cho phép tôi bao gồm những điều này:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket đã có tôi! Cảm ơn vì điều này
Quad64Bit

Đối với tôi, đã hiệu quả khi chỉ giữ getObjet
LittleTiger

0

Bạn phải kiểm tra mẫu của arn được xác định trong thẻ Tài nguyên cho Chính sách-

"Tài nguyên": "arn: aws: s3 ::: s3mybucketname / *"

Với việc thêm "/ *" ở cuối sẽ giúp giải quyết vấn đề nếu bạn gặp phải nó ngay cả sau khi Chính sách truy cập công khai của bạn được Bỏ chặn cho Nhóm của bạn.


0
  • Truy cập Amazon S3 trong trường hợp của bạn.
  • Chuyển đến tab Quyền -> Truy cập Công cộng.
  • Chọn Chỉnh sửa và bỏ chọn Chặn tất cả quyền truy cập công khai và lưu.
  • Bạn sẽ thấy thẻ 'Công khai' trong tab Quyền và Danh sách kiểm soát truy cập.

0

Bạn cũng có thể cấu hình ListBuckets cho từng thư mục, như vậy

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

Các quy tắc này được sử dụng cùng với SES để nhận email, nhưng cho phép người dùng bên ngoài xem các tệp đã được SES đưa vào nhóm. Tôi đã làm theo hướng dẫn từ đây: https://aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

Ngoài ra, bạn phải chỉ định tiền tố là domain.co/user/dấu gạch chéo CÓ ở cuối khi sử dụng SDK, nếu không, bạn sẽ bị từ chối quyền truy cập. hy vọng nó sẽ giúp bất cứ ai

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.