forked from rebuy-de/aws-nuke
/
account.go
64 lines (50 loc) · 1.32 KB
/
account.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package awsutil
import (
"github.com/aws/aws-sdk-go/service/iam"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/pkg/errors"
)
type Account struct {
Credentials
id string
aliases []string
}
func NewAccount(creds Credentials) (*Account, error) {
account := Account{
Credentials: creds,
}
defaultSession, err := account.NewSession(DefaultRegionID)
if err != nil {
return nil, errors.Wrapf(err, "failed to create default session in %s", DefaultRegionID)
}
identityOutput, err := sts.New(defaultSession).GetCallerIdentity(nil)
if err != nil {
return nil, errors.Wrap(err, "failed get caller identity")
}
globalSession, err := account.NewSession(GlobalRegionID)
if err != nil {
return nil, errors.Wrapf(err, "failed to create global session in %s", GlobalRegionID)
}
aliasesOutput, err := iam.New(globalSession).ListAccountAliases(nil)
if err != nil {
return nil, errors.Wrap(err, "failed get account alias")
}
aliases := []string{}
for _, alias := range aliasesOutput.AccountAliases {
if alias != nil {
aliases = append(aliases, *alias)
}
}
account.id = *identityOutput.Account
account.aliases = aliases
return &account, nil
}
func (a *Account) ID() string {
return a.id
}
func (a *Account) Alias() string {
return a.aliases[0]
}
func (a *Account) Aliases() []string {
return a.aliases
}