Как создать набор записей в Account2 из Account1 - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь создать набор записей route53 из Account1 в Account2.

Из прочтения других постов и поиска в Интернете я думаю сделать что-то вроде этого:

from boto3 import Session

session = Session(aws_access_key_id=*****,aws_secret_access_key=****,region_name='us-east-1')
r53_client = session.client('route53')
r53_resource = session.resource('route53')

Хотите узнать от кого-то опытного, является ли это правильным способом сделать это? Или есть лучший способ достичь выше?

Вот обновленный код:

def lambda_handler(event, context):
    sts = boto3.client('sts')
    response = sts.assume_role(
        RoleArn='arn:aws:iam::***123:role/lambda',
        RoleSessionName='my-random-session-name',
        DurationSeconds= 900 # how many seconds these credentials will work
    )

    tempAccessKeyId = response['Credentials']['AccessKeyId']
    tempSecretAccessKey = response['Credentials']['SecretAccessKey']
    tempSessionToken = response['Credentials']['SessionToken']

    client = boto3.client('route53', 
                  region_name = 'us-west-2',
                  aws_access_key_id=tempAccessKeyId,
                  aws_secret_access_key=tempSecretAccessKey,
                  aws_session_token=tempSessionToken)


    response = client.list_resource_record_sets(
    HostedZoneId='***',
    StartRecordName='test.example.com.',
    StartRecordType='A'
    )

    print(response)

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Исходя из того, что вы делаете это с помощью лямбда-функции AWS, наиболее безопасный способ сделать это будет:

  • В учетной записи 1:
    • Создать IAMРоль (Role 1), которая будет использоваться лямбда-функцией
    • Назначение разрешений роли, которая позволяет ей предполагать Role-2
    • Также назначьте любые другие разрешения, требуемые лямбда-функцией (выобычно добавляет управляемую политику AWSLambdaBasicExecutionRole для ведения журнала)
    • Назначение Role 1 для функции Lambda
  • В учетной записи 2:
    • Создатьроль IAM (Role 2) с разрешениями доверия, которая позволяет Role 1 в учетной записи 1 принять ее
    • Предоставить Role 2 соответствующие разрешения для использования Amazon Route 53

В вашем лямбда-коде вы бы позвонили AssumeRole() на Role 2. Это обеспечит набор временных учетных данных, которые можно использовать для доступа к учетной записи 2 (согласно приведенному выше коду).

См .: Переключение на роль IAM (AWS API) - Идентификация и доступ AWSУправление

0 голосов
/ 08 ноября 2019

Чтобы выполнить вызов API для учетной записи AWS, вам либо необходимы учетные данные из этой учетной записи AWS (например, учетные данные, связанные с пользователем IAM), либо вам нужна возможность принять роль IAM в этой учетной записи.

Таким образом, в вашем примере, если предоставленные учетные данные принадлежат Account2, вы сможете выполнять вызовы API для Account2 (если этому пользователю IAM предоставлены необходимые разрешения Route 53).

Если вы часто перемещаетесь между учетными записями, вместо этого вы можете указать profile, который извлекает другой набор учетных данных из файла учетных данных.

См .: python - Как выбратьПрофиль AWS при использовании boto3 для подключения к CloudFront - переполнение стека

...