我看過其他類似的問題,但我不知道如何做到這一點。
我有一個 S3 存盤桶,所有公共訪問都被阻止,并且該存盤桶已打開服務器端加密。
我想創建一個具有權限的用戶組,允許特定用戶查看列出的存盤桶(但不能查看其他存盤桶)并上傳,但不能下載、洗掉或該存盤桶中的任何其他內容。
我有一個用戶組,它具有如下權限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:CreateAccessPoint",
"s3:PutAnalyticsConfiguration",
"s3:PutAccelerateConfiguration",
"s3:PutAccessPointConfigurationForObjectLambda",
"s3:DeleteObjectVersion",
"s3:RestoreObject",
"s3:DeleteAccessPoint",
"s3:CreateBucket",
"s3:ListBucket",
"s3:DeleteAccessPointForObjectLambda",
"s3:ReplicateObject",
"s3:PutEncryptionConfiguration",
"s3:DeleteBucketWebsite",
"s3:AbortMultipartUpload",
"s3:PutLifecycleConfiguration",
"s3:UpdateJobPriority",
"s3:CreateMultiRegionAccessPoint",
"s3:PutBucketVersioning",
"s3:PutObjectAcl",
"s3:PutIntelligentTieringConfiguration",
"s3:PutMetricsConfiguration",
"s3:PutBucketOwnershipControls",
"s3:PutReplicationConfiguration",
"s3:DeleteMultiRegionAccessPoint",
"s3:PutObjectLegalHold",
"s3:UpdateJobStatus",
"s3:PutBucketCORS",
"s3:PutInventoryConfiguration",
"s3:PutObject",
"s3:PutBucketNotification",
"s3:DeleteStorageLensConfiguration",
"s3:PutBucketWebsite",
"s3:PutBucketRequestPayment",
"s3:PutObjectRetention",
"s3:PutBucketLogging",
"s3:CreateAccessPointForObjectLambda",
"s3:PutBucketObjectLockConfiguration",
"s3:ReplicateDelete"
],
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
我使用可視化編輯器創建了它,這對我來說似乎有點矯枉過正,但是,即使我已將用戶分配到該用戶組,我仍然無法將檔案上傳到該存盤桶或在以該用戶身份登錄后看到列出的存盤桶。
我究竟做錯了什么?
///編輯///
這是我的最新版本 - 我可以看到存盤桶中列出的存盤桶和檔案,但不能上傳:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject",
"s3:GetAccountPublicAccessBlock",
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketPolicyStatus",
"s3:GetBucketAcl",
"s3:ListAccessPoints"
],
"Resource": "arn:aws:s3:::my-bucket"
}
]
}
uj5u.com熱心網友回復:
這里有幾個問題:
- 您正在混合存盤桶級和物件級操作
- 在某些情況下,您使用了不正確的資源 ARN
- 你的政策明顯過度放縱
動作的問題在于一些動作與存盤桶相關,一些動作與物件相關,而其他動作則根本不與資源型別相關。任何時候您在同一資源陳述句中同時包含存盤桶 ARN(例如"arn:aws:s3:::my-bucket"或"arn:aws:s3:::*")和物件 ARN(例如"arn:aws:s3:::my-bucket/*"),您可能做錯了。
您可以查看存盤桶和物件操作的示例,并且可以查看由 S3 定義的操作串列以及與這些操作相關的相應資源型別。您的策略應該將存盤桶操作應用于存盤桶資源 ARN,并將物件操作應用于物件資源 ARN,并且理想情況下不應混合使用它們(很大程度上正如您在編輯的示例中所做的那樣,實際上,這很好)。是的,"s3:Get*"對存盤桶 ARN 和通配符物件 ARN執行允許之類的操作很誘人,但這是不正確的,而且是維護方面的難題。
例如,您將看到 ListAccessPoints 沒有關聯的資源型別。您已經指出"arn:aws:s3:::*"哪個是不正確的,并且不會授予任何內容(它需要改為"*")。為什么需要它"*"?根據檔案:
如果操作不支持資源級權限,則策略中的該陳述句必須在 Resource 元素中使用通配符 (*)。
在我看來,這對 AWS 來說是一個有點不幸且值得懷疑的選擇。
如果您想要一個允許列出所有存盤桶、列出特定存盤桶中的物件并上傳到同一個存盤桶的 IAM 策略,但沒有別的,那么我將從:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::my-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
現在,您可能會在實踐中發現這還不夠,必須添加額外的操作(我不知道您的客戶在做什么),但我希望這是一個很好的起點。
uj5u.com熱心網友回復:
問題是某些權限僅適用于非特定資源
這是我認為有效的配置的 json。如果人們看到它并發現錯誤,請發表評論并告訴我 - 我才剛剛開始使用 AWS!
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketPolicyStatus",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"s3:GetAccountPublicAccessBlock",
"s3:ListAccessPoints"
],
"Resource": "arn:aws:s3:::*"
}
]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371296.html
