Как вставить RecordSet в Route53 в другую учетную запись AWS - PullRequest
0 голосов
/ 25 апреля 2019

Моя команда разрабатывает продукт, который запускает новые экземпляры EC2 с некоторым программным обеспечением, и мы запускаем небольшой кусочек кода Python в процессе загрузки экземпляра, чтобы зарегистрировать его в нашем DNS Route53. Экземпляры EC2 и наш Route53 находятся в разных учетных записях AWS.

Хотя этот код на Python работает прекрасно, теперь моя задача переписать эту часть программного обеспечения на golang.

Я уже создал роль IAM в учетной записи Route53 с соответствующей политикой, и она работает нормально. Я также позволил вызывать его из другой учетной записи AWS, и он также прекрасно работает. Код Python может принять роль, используя эту роль IAM, и, таким образом, создать новый RecordSet в Route53. Однако, когда я пытаюсь выполнить это, используя мой код 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 и создаст RecordSet в Route53 с ним. Но вместо этого мне постоянно отказывают в доступе.

Это правильная процедура для доступа к некоторому ресурсу 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

...