如何在Account2中从Account1创建记录集

时间:2019-11-07 21:55:19

标签: amazon-web-services boto3 amazon-route53

我正在尝试从Account2中的Account1创建一个route53记录集。

通过阅读其他文章和在线搜索,我正在考虑做这样的事情:

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 个答案:

答案 0 :(得分:1)

基于您是通过AWS Lambda函数执行此操作的事实,最安全的方法是:

  • 在帐户1中:
    • 创建将由Lambda函数使用的IAM角色(Role 1
    • 将权限分配给允许其担任Role-2的角色
    • 还分配Lambda函数所需的任何其他权限(您通常会添加AWSLambdaBasicExecutionRole托管策略以允许记录日志)
    • Role 1分配给Lambda函数
  • 在帐户2中:
    • 创建具有信任权限的IAM角色(Role 2),该权限允许帐户1中的Role 1承担责任
    • 授予Role 2适当的权限以使用Amazon Route 53

在Lambda代码中,您将在AssumeRole()上调用Role 2。这将提供一组临时凭证,可用于访问帐户2(按照上面的代码)。

请参阅:Switching to an IAM Role (AWS API) - AWS Identity and Access Management

答案 1 :(得分:0)

要对AWS账户进行API调用,您要么需要该AWS账户中的凭证(例如,与IAM用户关联的凭证),要么需要具有以下能力:假定帐户。

因此,在您的示例中,如果提供的凭据属于Account2,则您将能够对Account2进行API调用(如果已向该IAM用户授予了必要的Route 53权限)。

如果您经常在各个帐户之间移动,则可以指定一个profile,它从凭证文件中检索另一组凭证。

请参阅:python - How to choose an AWS profile when using boto3 to connect to CloudFront - Stack Overflow