这是我尝试过的。下面的代码获取了一个链接帐户的列表,但只获取了一个AWS帐户的域列表。我想列出每个特定链接帐户的域或任何其他资源。
问题似乎是关于svc := route53.New(sess)
或sess
本身,因为帐户ID没有传递给svc
或sess
。因此,问题是如何传递帐户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)
}
}
}
1条答案
按热度按时间c9qzyr3d1#
您似乎正在运行AWS Organizations
ListAccounts()
命令以获取帐户列表。如果您随后要对每个“成员”帐户进行API调用,则您的代码将需要承担成员帐户中的IAM角色。这是因为您的现有凭据与组织帐户关联,而该帐户无权访问成员帐户。
从Accessing and administering the member accounts in your organization - AWS Organizations开始:
如果您使用AWS Organizations提供的工具创建帐户,则可以使用名为
OrganizationAccountAccessRole
的预配置角色访问该帐户,该角色存在于您以此方式创建的所有新帐户中。因此,您可以在成员帐户中的
OrganizationAccountAccessRole
上调用AssumeRole()
,它将返回一组临时凭据。您可以使用这些凭据对成员帐户进行API调用。基本上,一组凭据只能用于一个帐户。