Deleting Elastic beanstack created s3 buckets - amazon-web-services

I have created elestic beanstack (EB) app and it created s3 buckets.
When I try deleting S3 buckets related to EB , it gives error Insufficient permissions to delete bucket
After you or your AWS admin have updated your IAM permissions to allow s3:DeleteBucket, choose delete bucket. Learn more about Identity and Access Management in Amazon S3
When I check EB , it show no application or environments at present,(I might have deleted yesterday)

You have to go to the bucket's permissions, and delete its bucket policy first. The bucket policy on the EB bucket stops you from deleting it.

Related

Accessing S3 bucket data from EC2 instance through IAM

So I have created an IAM user and added a permission to access S3 then I have created an EC2 instance and SSH'ed into the it.
After giving "aws s3 ls" command, the reply was
"Unable to locate credentials. You can configure credentials by running "aws configure".
so what's the difference between giving IAM credentials(Key and Key ID) using "aws configure" and editing the bucket policy to allow s3 access to my instance's public IP.
Even after editing the bucket policy(JSON) to allow S3 access to my instance's public IP why am I not able to access the s3 bucket unless I use "aws configure"(Key and Key ID)?
Please help! Thanks.
Since you are using EC2 you should really use EC2 Instance Profiles instead of running aws configure and hard-coding credentials in the file system.
As for the your question of S3 bucket policies versus IAM roles, here is the official documentation on that. They are two separate tools you would use in securing your AWS account.
As for your specific command that failed, note that the AWS CLI tool will always try to look for credentials by default. If you want it to skip looking for credentials you can pass the --no-sign-request argument.
However, if you were just running aws s3 ls then that was trying to list all the buckets in your account, which you would have to have IAM credentials for. Individual bucket policies would not be taken into account in that scenario.
If you were running aws s3 ls s3://bucketname then that may have worked as aws s3 ls s3://bucketname --no-sign-request.
When you create iam user so there are two parts
policies
roles
Policies are attached to user, like what all services user can pr can't access
roles are attached to application, what all access that application can have
So you have to permit ec2 to access S3
There are two ways for that
aws configure
attach role to ec2 instance
while 1 is tricky and legthy , 2 is easy
Go to ec2-instance-> Actions -> Security -> Modify IAM role -> then select role (ec2+s3 access role)
thats it , you can simply do aws s3 ls from ec2 instance

Bucket created by EBS (Elastic Beanstalk) cannot be deleted

I tried the Elastic Beanstalk(EBS) to practice my learning and quickly I deleted it. However, I see there is an S3 bucket created by this EBS service during its launch, is still existing though everything else (like Ec2) is deleted on its on while I deleted the EBS in my account. I want to delete this S3 too, but it gives error while deleting: "Insufficient permissions to delete bucket" After you or your AWS admin have updated your IAM permissions to allow s3:DeleteBucket, choose delete bucket. API response -Access Denied
I created EBS and deleted under my root account. I am still under my root account while trying to delete S3 but I get this error. Can someone pls advise, what I am missing here because I did not used any S3 Role as it points in its error message. Any help pls?
In the S3 dashboard, select the bucket you want to delete
Select the "Permissions" tab.
Navigate to the Bucket Policies & delete the policy
It is the bucket policy created by EB that denies its deletion.
Once the policy is deleted, you will be able to delete the bucket as well.
**
To delete the bucket created by Beanstalk we need to modify the attached bucket policy created by beanstalk as it denies the delete action.
To allow the delete action we can either modify the policy and allow
the delete action or the easy way is to directly delete/remove the
policy.
If you want to delete the policy using python code you can check the
example given below.
Note: The below python code will delete all the buckets from your account. You can modify the code if you want to delete any specific bucket. You can download the credentials needed from the IAM service
import boto3
# authenticate s3 = boto3.resource('s3',
aws_access_key_id='ACCESS_KEY',
aws_secret_access_key='SECRET_ACCESS',
)
bucket = 'bucket_name'
# delete policy if bucket is created by beanstalk
bucket.Policy().delete()
# delete object versions
bucket.object_versions.delete()
# delete all the objects inside the bucket
bucket.objects.all().delete()
# delete the bucket
bucket.delete()
print(bucket, ' deleted successfully!')

How to get access to AWS S3 bucket

I am trying to run a script from OpenTraffic repository, and it needs access to some AWS S3 buckets. I am unable to figure out how to get access to a particular AWS S3 bucket?
FYI:
OpenTraffic is a open source platform to obtain and analyse dynamic traffic data : https://github.com/opentraffic
The script I am trying to run:
https://github.com/opentraffic/reporter/blob/dev/load-historical-data/load_data.sh
Documentation(https://github.com/opentraffic/reporter/tree/dev/load-historical-data) says: In order to run above script,
access required to both s3://grab_historical_data, s3://reporter-drop-
{prod, dev}.
Your're accessing the S3 buckets from r3.4xlarge ec2 instance according to the documentation link your share.
Firstly, You've to create a IAM role for ec2 instance and S3 access policy with it.
Create the ec2 instance and attach the IAM role to it because this is the only time you can to assign a role to it and launch it.
Role gives your ec2 instance access permission for s3 bucket.

Creating IAM Role on S3/Lambda

Everywhere I can see IAM Role is created on EC2 instance and given Roles like S3FullAccess.
Is it possible to create IAM Role on S3 instead of EC2? And attach that Role to S3 bucket?
I created IAM Role on S3 with S3FULLACCESS. Not able to attach that to the existing bucket or create a new bucket with this Role. Please help
IAM (Identity and Access Management) Roles are a way of assigning permissions to applications, services, EC2 instances, etc.
Examples:
When a Role is assigned to an EC2 instance, credentials are passed to software running on the instance so that they can call AWS services.
When a Role is assigned to an Amazon Redshift cluster, it can use the permissions within the Role to access data stored in Amazon S3 buckets.
When a Role is assigned to an AWS Lambda function, it gives the function permission to call other AWS services such as S3, DynamoDB or Kinesis.
In all these cases, something is using the credentials to call AWS APIs.
Amazon S3 never requires credentials to call an AWS API. While it can call other services for Event Notifications, the permissions are actually put on the receiving service rather than S3 as the requesting service.
Thus, there is never any need to attach a Role to an Amazon S3 bucket.
Roles do not apply to S3 as it does with EC2.
Assuming #Sunil is asking if we can restrict access to data in S3.
In that case, we can either Set S3 ACL on the buckets or the object in it OR Set S3 bucket policies.

When S3 bucket policy is set in AWS website, should I do it again in my Javacode that will be running in an Ec2 instance?

I have set S3 bucket policy in my S3 account via web browser
https://i.stack.imgur.com/sppyr.png
My issue is, the java code of my web app when run in my local laptop, it uploads image to S3.
final AmazonS3 s3 = new AmazonS3Client(
new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*",
"secretKey")));
s3.setRegion(Region.US_West.toAWSRegion());
s3.setEndpoint("s3-us-west-1.amazonaws.com");
versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();
But when I deploy my web app to Elastic Beanstalk, it doesn't successfully upload images to S3 object.
So Should I programmatically code S3 bucket policy again in my Java Code?
PS: Additional details that may be useful : Why am I able to upload to AWS S3 from my localhost, but not from my AWS Elastic BeanStalk instance?
Your S3 bucket policy is too permissive. You should delete it asap.
Instead of explicitly supply credentials to your Elastic Beanstalk app in code, you should create an IAM role that the Elastic Beanstalk app will assume. That IAM role should have an attached IAM policy that allows appropriate access to your S3 bucket, and to the objects in the bucket.
When testing on your laptop, your app does not need to have credentials in the code. Instead, your app should leverage the fact that the AWS SDK will retrieve credentials for you from the environment that the app is running in. You should use the default credential provider chain.