The AWS ARN library provides Go representation for AWS ARNs and useful functions to parse and validate ARN strings.
Reference: https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
To get the package, execute:
go get github.com/jcmturner/awsarn
To import this package, add the following line to your code:
import "github.com/jcmturner/awsarn"
For full API documentation refer to the GoDoc link above.
Creating an ARN instance from an ARN string:
import "github.com/jcmturner/awsarn"
arnStr := "arn:aws:iam::012345678912:user/testuser"
arn, err := awsarn.Parse(arnStr, http.DefaultClient)
fmt.Printf(
`Partition: %s
Service %s
Region %s
AccountID %s
ResourceType %s
Resource %s
`,
arn.Partition,
arn.Service,
arn.Region,
arn.AccountID,
arn.ResourceType,
arn.Resource,
)
Get the AWS ARN in string format:
arnStr := arn.String()
fmt.Println(arnStr)
arnStr := "arn:aws:iam::012345678912:user/testuser"
if awsarn.Valid(arnStr, http.DefaultClient) {
fmt.Println("ARN valid")
} else {
fmt.Println("ARN invalid")
}
Validation can use the AWS ip-ranges.json document as reference data for the valid values of AWS regions. AWS bring new regions online and therefore this is the best, most up to date source of valid regions.
To disable the use of this online resource pass a nil pointer where *http.Client is required as an argument.
If you need to define the use of an HTTP proxy to reach the internet configure the transport on an http.Client passed as an argument.
proxyURL, err := url.Parse("http://proxyName:proxyPort")
client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}}
arnStr := "arn:aws:iam::012345678912:user/testuser"
if awsarn.Valid(arnStr, client) {
fmt.Println("ARN valid")
} else {
fmt.Println("ARN invalid")
}