我正在尝试从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)
答案 0 :(得分:1)
基于您是通过AWS Lambda函数执行此操作的事实,最安全的方法是:
Role 1
)Role-2
的角色AWSLambdaBasicExecutionRole
托管策略以允许记录日志)Role 1
分配给Lambda函数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