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:
arn:${Partition}:s3:::${BucketName}
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!
ARNs can look like:
arn:${Partition}:s3:::${BucketName}
arn:${Partition}:iam::${Account}:role/${RoleNameWithPath}
arn:${Partition}:kms:${Region}:${Account}:key/${KeyId}
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.
arn:aws:iam::aws:policy/PowerUserAccess
arn:aws:iam::aws:policy/AdministratorAccess
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:
elasticache:KmsKeyId
and ec2:KmsKeyId
).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:
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:
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.
YES3 Scanner: Open Source S3 Security Scanner
GitHub: AWS IAM Reference - ARNs
AWS Blog: AWS Policy Generator Announcement