Моя команда разрабатывает продукт, который запускает новые экземпляры 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