如何使用AWS Go sdk列出链接的AWS帐户的资源

bxgwgixi  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(156)

这是我尝试过的。下面的代码获取了一个链接帐户的列表,但只获取了一个AWS帐户的域列表。我想列出每个特定链接帐户的域或任何其他资源。
问题似乎是关于svc := route53.New(sess)sess本身,因为帐户ID没有传递给svcsess。因此,问题是如何传递帐户ID?

package main

import (
    "context"
    "crypto/tls"
    "fmt"
    "log"

    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/organizations"
    "github.com/aws/aws-sdk-go-v2/service/route53domains"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/route53"
)

func main() {

    // Load the Shared AWS Configuration (~/.aws/config)
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithDefaultRegion("us-east-1"))
    if err != nil {
        log.Fatal(err)
    }

    // Create an Amazon service clients
    awsOrgClient := organizations.NewFromConfig(cfg)
    awsRoute53DomainsClient := route53domains.NewFromConfig(cfg)

    // Build the request with its input parameters
    resp, err := awsOrgClient.ListAccounts(context.TODO(), &organizations.ListAccountsInput{})
    if err != nil {
        log.Fatalf("failed to list tables, %v", err)
    }

    fmt.Println("Accounts:")
    for _, account := range resp.Accounts {
        fmt.Println(*account.Name)

        // Build the request with its input parameters
        resp, err := awsRoute53DomainsClient.ListDomains(context.TODO(), &route53domains.ListDomainsInput{}, func(o *route53domains.Options) {})

        if err != nil {
            log.Fatalf("failed to list tables, %v", err)
        }

        fmt.Println("Accounts:")
        for _, route53 := range resp.Domains {
            fmt.Println(*&route53.DomainName)
        }

        // fetch list of domains from AWS Route53
        sess := session.Must(session.NewSessionWithOptions(session.Options{
            SharedConfigState: session.SharedConfigEnable,
        }))

        svc := route53.New(sess)

        // call svc.ListHostedZones() for an account

        result, err := svc.ListHostedZones(&route53.ListHostedZonesInput{})
        if err != nil {
            fmt.Println(err.Error())
            return
        }

        for _, hostedzone := range result.HostedZones {
            fmt.Println(*hostedzone.Name)
        }
    }
}
c9qzyr3d

c9qzyr3d1#

您似乎正在运行AWS Organizations ListAccounts()命令以获取帐户列表。
如果您随后要对每个“成员”帐户进行API调用,则您的代码将需要承担成员帐户中的IAM角色。这是因为您的现有凭据与组织帐户关联,而该帐户无权访问成员帐户。
Accessing and administering the member accounts in your organization - AWS Organizations开始:
如果您使用AWS Organizations提供的工具创建帐户,则可以使用名为OrganizationAccountAccessRole的预配置角色访问该帐户,该角色存在于您以此方式创建的所有新帐户中。
因此,您可以在成员帐户中的OrganizationAccountAccessRole上调用AssumeRole(),它将返回一组临时凭据。您可以使用这些凭据对成员帐户进行API调用。
基本上,一组凭据只能用于一个帐户。

相关问题