Hey ARNold: A Guide to All the Amazon Resource Identifiers Formats in AWS

June 9, 2025
Jason Kao

While testing our open-source S3 security tool: YES3 Scanner and inspired by a conversation in the Cloud Security Forum Slack, we conducted deep research on AWS ARN Formats to determine all of the possible AWS resources and their corresponding AWS ARN formats. Part of what drives IAM least privilege in AWS IAM and security research of resources in AWS are tied to the Amazon Resource Identifiers: ARNs.

This can help answer questions such as:

From our research on AWS ARN formats, we've published the following resources as free and open-source listings:

Our findings as of May 29th, 2025:

If you have feedback or requests, reach out to us at info@fogsecurity.io! We'd love to hear how you use this research, your projects, and insights you get from all the ARNs. We're continuing to build in this space and if you have feedback or thoughts, we want to chat with you!

Amazon Resource Identifiers (ARNs)

ARNs can look like:

ARNs in AWS typically follow this general format as provided here by AWS:

arn:partition:service:region:account-id:resource-id
arn:partition:service:region:account-id:resource-type/resource-id
arn:partition:service:region:account-id:resource-type:resource-id

However, these can differ between AWS services and resources.  Differences we found include:

Note: This may not be a complete listing as we found exceptions to the resource ARN format.  One example resource is the AWS IAM Policy.

The ARN format follows arn:${Partition}:iam::${Account}:policy/${PolicyNameWithPath} and while customer managed polices will follow that format, AWS Managed policies don't follow that format as they don't have ${Account} in the ARN.

Resources Across Other Services

While coding, we added a function to remove duplicate ARNs. Certain AWS resources are used across other services and can be used in IAM policies and resource blocks for actions from a different service.

Examples include:

Inconsistent ARN Formats

We found inconsistencies across ARN formats for AWS Account IDs. In some ARN formats, the placeholder was ${Account} and other ARN formats had a ${AccountId} placeholder.

Examples:

Comparison to Other Sources

We've seen the following and somewhat creative methods to determine all the resources and available ARN formats in AWS:

AWS Policy Generator

In the Cloud Security Slack, someone recommended this repository that scans the AWS Policy Generator for ARNs. There's an open-source GitHub repository that pulls available ARNs from the AWS Policy Generator.

Other

We found other resources that focused on IAM actions that had similar coverage. However, these resources:

Try it out!

S3 Bucket Results for ARN Formats

An example of the json file reference is as follows:

    {
        "service": "AWS Key Management Service",
        "resource": "alias",
        "prefix": "kms",
        "arn": "arn:${Partition}:kms:${Region}:${Account}:alias/${Alias}"
    },
    {
        "service": "AWS Key Management Service",
        "resource": "key",
        "prefix": "kms",
        "arn": "arn:${Partition}:kms:${Region}:${Account}:key/${KeyId}"
    },

If you have feedback or requests, reach out to us at info@fogsecurity.io! We'd love to hear how you use this research, your projects, and insights you get from all the ARNs.

Resources

YES3 Scanner: Open Source S3 Security Scanner

GitHub: AWS IAM Reference - ARNs

AWS: AWS Policy Generator

AWS Blog: AWS Policy Generator Announcement

GitHub: AWS IAM ARNs Generator from AWS Policy Generator

Cloud Security Forum Slack

AWS IAM: Reference ARNs

Subscribe to stay up to date on cloud data security and our work.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.