Cannot delete s3 object - amazon-web-services

I create an IAM user and attach AWS default AmazonS3FullAccess policy to this user.
For the S3 part, I grant the upload/delete permission as well.
I can upload file to my S3 bucket using the user's access key and secret key by python boto. However, I cannot delete the object I just uploaded. The response is always Access Denied.
Does anyone know what is going on?

Related

Writing to S3 from Databricks with IAM role

I am have an instance profile already created by admin with that I am able to access some S3 buckets, but now I need write permission to a different S3 bucket. Can I request permission to add that instance profile to IAM role in S3?
I am not Databricks admin.

S3 Bucket without ACL - No permission

I found an issue with a S3 bucket.
The bucket don't have any ACL associated, and the user that create the bucket was deleted.
How it's possible add some ACL in the bucket to get the control back?
For any command using AWS CLI, the result are the same always: An error occurred (AccessDenied) when calling the operation: Access Denied
Also in AWS console the access is denied.
First things first , AccessDenied error in AWS indicates that your AWS user does not have access to S3 service , Get S3 permission to your IAM user account , if in case you had access to AWS S3 service.
The thing is since you are using cli make sure AWS client KEY and secret are still correctly in local.
Now the interesting use case :
You have access to S3 service but cannot access the bucket since the bucket had some policies set
In this case if user who set the policies left and no user was able to access this bucket, the best way is to ask AWS root account holder to change the bucket permissions
An IAM user with the managed policy named AdministratorAccess should be able to access all S3 buckets within the same AWS account. Unless you have applied some unusual S3 bucket policy or ACL, in which case you might need to log in as the account's root user and modify that bucket policy or ACL.
See Why am I getting an "Access Denied" error from the S3 when I try to modify a bucket policy?
I just posted this on a related thread...
https://stackoverflow.com/a/73977525/999943
https://aws.amazon.com/premiumsupport/knowledge-center/s3-bucket-owner-full-control-acl/
Basically when putting objects from the non-bucket owner, you need to set the acl at the same time.
--acl bucket-owner-full-control

How to see policies for S3 buckets which showing `Access Denied` error in AWS Console?

I've logged into AWS account as root user. But I'm unable to access some of the buckets in AWS. They are not showing in the S3 Console. I've accessed them by submitting the bucket name in the url
For example let's call the bucket unaccessible-bucket
https://s3.console.aws.amazon.com/s3/buckets/unaccessible-bucket/?region=us-east-1&tab=overview
If I navigates to Permissions > Bucket Policy I'm seeing notice Access denied, I'm unable to download the files. I'm unable to change the policy. I've tried with AWS CLI also.
Can someone please tell me how to edit the policy.
As per our organisation requirement,
We have to add two new IAM users..
For one user...We have to grant access to all buckets including this unaccessible-bucket.
For other user...We have to grant access to only this unaccessible-bucket.
Please check the screenshot
Many Thanks.
Assuming that you are logged into the AWS Console as the root user.
If you cannot see an S3 bucket in the AWS console, then you do not own the bucket and it is owned by another account.
If you can see the bucket in the console then you own the bucket. If you cannot access the contents of the bucket then you will need to edit the S3 Bucket Policy and add the root user as a principal. Replace the account number with your own.
Add this statement (or modify) to your S3 Bucket Policy:
"Principal": { "AWS": "arn:aws:iam::123456789012:root" }

aws s3 cp - only working with AdministratorAccess

I created a new user that I only want to have access to a limited number of resources, mainly to read from S3.
For some reason, it will only read from the s3 bucket if I provide the AdministratorAccess policy to the IAM user. Here is the command
aws s3 cp s3://my-bucket/my-config.json my-config.json
Error with AmazonS3ReadOnlyAccess:
download failed: s3://my-bucket/my-config.json to ./my-config.json An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
But when I add AdministratorAccess it copies the file down just fine.
AmazonS3ReadOnlyAccess has access to the GetObject action on ALL resources as well. Does anyone know why I'd be seeing this behavior?
The issue here had to do with the encryption key used to encrypt objects in the bucket. I am using KMS encryption (at rest) for objects in this S3 bucket. The new user I had created, had not been added to Key Users for this specific KMS key. This was preventing the user from using this key to decrypt the object during the GetObject action in S3. So that action specifically, failed which gave the (not-so-clear) error message.
To fix: add the IAM user as a key user under KMS and all works now. Phew..

AWS User vs Resource Permissions

When a user has Resource-based permissions to a ressource but does not have User-based permissions for that service. Can he use that service than?
example : user Jack has Resource based permission to use the S3 bucket 'jamm'. But Jack has no permission to use S3. Can Jack use the S3 bucket?
If you don't have permissions to access the S3 service, then you cannot use it at all.
In order to access any S3 bucket, you must have permissions to execute the S3 commands such as s3:GetObject. These permissions tells AWS which commands the user is allowed to execute. Anything not explicitly allowed is automatically denied.
The S3 bucket policy (your resource-level permissions) instruct the S3 service which users are allowed to access the bucket. But that only happens after the user has been given the needed permissions to execute S3 commands with which to access the bucket.
So you need:
Give the user permissions to execute the S3 commands to access the bucket (default is none), and
Give the bucket a policy to restrict the users that can access the bucket (default is anyone in the AWS account)
It is possible to restrict some S3 commands to your bucket, so the user has permission to execute s3:GetObject (for example), but only on your bucket.
But some commands, such as s3:ListAllMyBuckets cannot be restricted this way.