[英]AWS Lambda python boto3 dynamodb table scan - An error occurred (ValidationException) when calling the Scan operation: ExpressionAttributeNames
[英]AWS S3 Boto3 Python - An error occurred (AccessDenied) when calling the DeleteObject operation: Access Denied
我在執行 delete_object 時遇到問題。
def delete_image_from_s3(img=None):
if img:
try:
response = client.delete_object(
Bucket='my-bucket',
Key='uploads/img.jpg',
)
print(response)
except ClientError as ce:
print("error", ce)
每當我發送刪除某個文件的請求時,我都會不斷收到異常捕獲的錯誤:
調用 DeleteObject 操作時發生錯誤(AccessDenied):Access Denied
我知道這與我的政策有關,我已經設置了允許它的必要政策。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
我為 s3 的 IAM 用戶設置了完整的訪問權限。或者它是否對公共存儲桶做了一些事情? 或者我只是錯過了一些東西。 任何建議都可以,感謝您的回復。
您顯示的策略似乎是分配給特定存儲桶的存儲桶策略。 此策略授予世界上任何人使用您的 S3 存儲桶的權限,因此從安全角度來看不建議這樣做。 您應該刪除此存儲桶策略。
您已經提到所提供的代碼在“本地主機”上運行——我認為這意味着您正在自己的計算機上運行它。
為了從該代碼對 AWS 進行 API 調用,您需要提供 AWS 憑證。 通常,這些憑證通過運行 AWS CLI aws configure
命令存儲在~/.aws/credentials
文件中。 您需要提供與IAM 用戶關聯的訪問密鑰和秘密密鑰(通過 IAM 管理控制台中的安全憑證選項卡)。
然后,您需要向IAM 用戶分配權限,以便他們可以使用 S3 存儲桶。 請注意,權限是授予IAM 用戶的,而不是存儲桶:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
這里的區別在於沒有Principal
,因為它直接附加到 IAM 用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.