【问题标题】:How to create recordset in Account2 from Account1如何从 Account1 在 Account2 中创建记录集
【发布时间】:2020-03-04 13:09:58
【问题描述】:

我正在尝试从 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)

【问题讨论】:

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


    【解决方案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 代码中,您可以在 Role 2 上调用 AssumeRole()。这将提供一组可用于访问帐户 2 的临时凭据(根据您的代码,如上所述)。

    见:Switching to an IAM Role (AWS API) - AWS Identity and Access Management

    【讨论】:

    • 我按照你的建议做了。请参阅附件。但我仍然收到错误:调用操作时发生错误(AccessDenied):用户:arn:aws:sts::***:assumed-role/** is not authorized to access this resource
    • 哪一行出现错误?可能是因为 Role 2 没有被授予 Route 53 的适当权限。该角色有哪些权限?
    • 它说 - 调用 ListResourceRecordSets 操作时发生错误 (AccessDenied):用户:arn:aws:sts::***:assumed-role/ 无权访问此资源。角色 1 lambda 函数具有所有 route53 访问权限。角色 2 拥有所有路由 53 访问权限,并添加了帐户 1。
    • 如果我在本地运行它,是否需要以某种方式将我创建的 route53 角色附加到 lambda 函数?
    • 非常感谢!我想到了。将更新上面的代码是错误的。
    【解决方案2】:

    要对 AWS 账户进行 API 调用,您需要来自该 AWS 账户的凭证(例如与 IAM 用户关联的凭证),或者您需要能够承担其中的 IAM 角色帐户。

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

    如果您经常在帐户之间移动,则可以改为指定 profile,它会从凭据文件中检索一组不同的凭据。

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

    【讨论】:

    • 我正在尝试通过 lambda 执行此操作,所以我认为配置文件不会起作用。所以你建议假设角色是最好的方法?
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 2019-12-28
    相关资源
    最近更新 更多