如何在另一个AWS帐户中将RecordSet插入Route53

时间:2019-04-25 19:39:02

标签: amazon-web-services amazon-route53

我的团队正在开发一种产品,该产品可以启动带有某些软件的新EC2实例,并且在实例的启动过程中运行一小段python代码,以将其注册到Route53 DNS中。 EC2实例和我们的Route53在不同的AWS账户中。

虽然此python代码工作得很漂亮,但我现在的任务是用golang重写此软件。

我已经使用适当的策略在Route53的帐户中创建了IAM角色,并且工作正常。我还允许其他AWS帐户调用它,并且它也很好用。 python代码可以使用此IAM角色承担角色,因此可以在Route53中创建新的RecordSet。但是,当我尝试使用golang代码执行此操作时,我得到...

AccessDenied: Access denied status code: 403, request id: xxxxxxx-yyyyyyyy-zzzzzzzz

这是我对IAM的理解所能做到的:

(...)

sess := session.Must(session.NewSession())
        svc := sts.New(sess)
        input := &sts.AssumeRoleInput{
            DurationSeconds: aws.Int64(900),
            ExternalId:      aws.String("register-dns"),
            RoleArn:         aws.String(roleARN),
            RoleSessionName: aws.String(roleSessionName),
        }
        result, err := svc.AssumeRole(input)
        check(err)

        creds := stscreds.NewCredentials(sess, roleARN)
        service := route53.New(sess, &aws.Config{Credentials: creds})
        inputs := &route53.ChangeResourceRecordSetsInput{
            ChangeBatch: &route53.ChangeBatch{
                Changes: []*route53.Change{
                    {
                        Action: aws.String("UPSERT"),
                        ResourceRecordSet: &route53.ResourceRecordSet{
                            Name: aws.String(instanceName + ".mycompany.com"),
                            ResourceRecords: []*route53.ResourceRecord{
                                {
                                    Value: aws.String(hostIP),
                                },
                            },
                            TTL:  aws.Int64(60),
                            Type: aws.String("A"),
                        },
                    },
                },
                Comment: aws.String(instanceName),
            },
            HostedZoneId: aws.String(hostedZoneID),
        }

        resultR53, err := service.ChangeResourceRecordSets(inputs)

(...)

这时,我期望我的代码担当IAM角色roleARN,并在Route53中创建一个RecordSet。但是,相反,我一直在不断被拒绝访问。

访问其他AWS账户中的某些AWS资源是否正确?

谢谢!

我用作基础的东西: https://docs.aws.amazon.com/sdk-for-go/api/service/sts/#STS.AssumeRole

https://docs.aws.amazon.com/sdk-for-go/api/aws/credentials/stscreds

0 个答案:

没有答案