AWS Access Key Rotation - amazon-web-services

I am planning to rotate AWS keys.
My question is, will program throws an exception if we use expried AWS Keys?. If yes, what is the exception it is going to throw.
I didnt find any api to check the expired AWS Key.
Can someone pls help.

IAM Users can have two active Access Keys.
Therefore, the normal rotation process is:
Add a new Access Key
Update all software to use the new Access Key (this can take several days)
Revoke the old Access Key
Access Keys do not "expire". They are simply deleted. Trying to make a call on a deleted set of access keys will result in an error that the credentials are not found.
See: How to Rotate Access Keys for IAM Users | AWS Security Blog

Related

Seeing "Programmatic access with active access key" for old user in AWS

In the AWS User administration section, I am wanting to remove an old user from groups, however, I am seeing "Programmatic access with active access key - 15 days ago" under his Last Activity column.
Does this mean his key could be in use somewhere in our codebase? I'm not seeing any information on what this message means.
If his key is in use, is there a way to find out more information about where it is being used?
When viewing the user in the IAM console, you can view their Access Keys in the Security Credentials tab. This tab will show the Access Key ID, Created, and Last Used. You can use these details to see what the ID of the access key and what service and region the key has been used for most recently (with a few minute delay). This is also where you can disable the key without deleting it if you want to do some targeted testing to determine what may use the key.
If you have Cloudtrail enabled and setup, you can also search using the AWS Access Key attribute as #jordanm mentioned.

How to check permissions associated with a specific IAM access key in AWS

Is there way to check which permissions or roles are associated with a specific AWS access key?
The problem is that I got a pair of keys working but they are not present in the AWS console. These key are used regularly from some internal process but I cannot find which one.
If I search for them in the console they don't appear and neither on the root account.
You can search for the user by Access key ID in the AWS console.
See this blog post for details and screenshots:
https://aws.amazon.com/blogs/security/introducing-iam-console-search/
Don't forget, that according to the blog post
... you must type the full access key ID when searching.
In the end I wasn't able to get the roles or policies associate with a specific user, but I was able to track down the user.
So the user was using the root credentials and since I am using a normal full administrator account I wasn't able to see these creds even on the console
Pretty scary thing :|

How can I revoke my original AWS access key?

I'd like to revoke the access key and associated secret that Amazon originally set up for me when I created an AWS account. Their docs have a section Deleting Access Keys from the Root User , but that described clicking a "Delete" button in the list of Access Keys in IAM.
However, no access keys were listed for me. I tried to create a new one to see if that would override the old one, but the old one still works. IAM now only lists the new one and thus only allows me to delete that one.
How do I delete the original one?
AWS doesn't setup a key/secret when you create an account.
It is possible you are confusing the IAM user with root user.

Multiple Access Keys for the Same User

I have discovered that there is a particular User that is enabled for programmatic access in my company's AWS account. I have been tasked with recreating an Access Key and Security Token for one of my colleagues, despite it already having one. I want to deactivate the original one. I feel that from a security standpoint, it is better to have only one Access Key/Token rather than multiples.
Can anyone tell me if this is a good choice to have? One of my colleagues has asked me why I would want to do that and when I told him my reasoning, I dont think he was a 100% convinced my reasoning was good. Can you please tell me if there are any advantages to having multiple access keys/secret keys to the same user? Because I can't think of any. Also, can you please provide any kind of supporting articles that would cover this?
I don't have docs for recommending a single access key per user, but AWS does recommend rotating access keys regularly. See Managing Access Keys for IAM Users, the section titled "Rotating Access Keys".
So you should, as best practice, do the following on a regular schedule (every 30, 60, 90 days, etc.)
Create a second access key for your user
Wherever you are using the first access key, replace it with the second
Wait a short time, and confirm the first access key is not being used.
After confirmation, disable or delete the first access key
The two access key system is to allow for this rotation to occur while keeping the time where an access key is disabled/deleted, but still being used to a minimum. I've been bit in other tools where you have to disable the old key when you generate a new key. Because sometimes it takes time to put the new keys in use after they're generated.
If a user needs more than one access key, then there should be a question why one needs to be, rather than multiple. There are benefits to using multiple users:
The permissions can be more granular
If a key gets leaked, there are fewer places where it needs to be replaced
You have a better audit trail of what tools are acting on your account, and when
For these reason, I recommend only having one access key "in the field".
I think, really, if someone wants to actually use 2 keys for a single user, they're just being lazy.
I create individual IAM users and roles for every tool that needs access. I never reuse them.
Update
AWS recommends rotating access keys on a regular schedule.
Source: http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html
Further, their "howto" on the key rotation process uses both allocated access keys on an IAM user:
Source: https://aws.amazon.com/blogs/security/how-to-rotate-access-keys-for-iam-users/
Ergo, target for one access key "in use" per IAM user at any given time.
Under AWS IAM Access Keys best practices I believe these sections apply:
Use different access keys for different applications. Do this so that you can isolate the permissions and revoke the access keys for individual applications if an access key is exposed. Having separate access keys for different applications also generates distinct entries in AWS CloudTrail log files, which makes it easier for you to determine which application performed specific actions.
Rotate access keys periodically. Change access keys on a regular basis. For details, see Rotating Access Keys (AWS CLI, Tools for Windows PowerShell, and AWS API) in the IAM User Guide and How to Rotate Access Keys for IAM Users on the AWS Security Blog.
The first item clearly gives a reason to use multiple access keys with a single IAM account. I think using multiple keys would also make the second item, key rotation easier. You could create a second access key set, switch your applications over, verify that the previous set is no longer being used to access the AWS API, and then delete the old set.

How to map AWS ACCESS KEY to IAM user?

I have been looking information about this question, but I can't find the answerd. Do you know a simple way using AWS command line tools to map an AWS_KEY id to a specific IAM user?. The idea is to know in some old legacy EC2 boxes who is using an identity in order to revoke unused ones. For example:
AWS_KEY=AKAFERE12aseDesa3er11A -> belong to "user1"
There's no direct one-to-one mapping to allow you to do this. You'll probably need to call list-users to get a list of all the users associated with the AWS account, and for each user that's returned you'll need to call list-access-keys to get their keys and look for the one you're interested in.