#account-id #key-id #access-key #aws-access #decode

aws_account_id_from_key_id

Decodes the AWS Account ID given an AWS Access Key ID

2 releases

0.8.2 Feb 26, 2024
0.8.1 Feb 26, 2024

#1233 in Encoding

MIT license

12KB
94 lines

Determine AWS Account ID from AWS Access Key ID

Decodes the AWS account ID given an AWS access key ID (with a four-letter resource identifier beginning with "A"; this does not work for older key IDs beginning with "I" or "J").

This is a small, single-file library with no dependencies outside std. Only two functions are exported / public (there is an example of each below).

Usage

This can be installed as a crate via cargo.

cargo add aws_account_id_from_key_id

Once added as a dependency to a project, you can use it like so:

use aws_account_id_from_key_id::*;

fn main() {
    let access_key_id = "AKIASP2TPHJSQH3FJXYZ";

    // Decode AWS account ID given AWS access key ID
    assert_eq!(get_aws_account_id(&access_key_id).unwrap(), "171436882533");
    
    // Get associated AWS resource type given AWS access key ID
    assert_eq!(get_associated_resource_type(&access_key_id).unwrap(), "Access key");
}

Rationale

Isn't there a better way to do this?

Yes, use the AWS Security Token Service (STS) API call GetAccessKeyInfo. Example:

aws sts get-access-key-info --access-key-id=<key-id-goes-here>

Why write this when perfectly-good Python and Go implementations already exist?

I mainly wrote this as a Rust programming language learning exercise. I'm open to feedback both to learn more about Rust and better ways to implement this as well as to fix any bugs / logic errors in the code.

References / Credit

This is primarily based on the research and Python PoC code by Tal Be'ery.

License

This project is released open source under the MIT License.

No runtime deps