如何用Python将aws配置文件替换为新的临时凭据



我正在编写一个Python脚本,该脚本将使用.getsessionoken((方法,并将新的临时凭据写入位于~/.aws/credentials的aws凭据文件。在我的情况下,该配置文件将命名为[temp token]。

我可以成功地写入该文件,但后来我想,如果该配置文件已经存在怎么办。我必须查找并替换配置文件名称之后的后续行。我还是Python的新手,正在努力理解问题是什么:

import os
import boto3 as b
mfa_serial_number = "arn:aws:iam::xxxxxxxxxxxx:mfa/your-iam-user-here"
mfa_otp = input("Enter your otp:" )
def get_sts(mfa_serial_number, mfa_otp):

session = b.Session(profile_name='default', region_name='us-east-1')
sts = session.client('sts')
if mfa_serial_number is not None:
response = sts.get_session_token(
SerialNumber=mfa_serial_number, TokenCode=mfa_otp)
else:
response = sts.get_session_token()
temp_credentials = response['Credentials']
print(temp_credentials)
token_reponse = ["[temp-token] n", "aws_access_key_id = " + temp_credentials["AccessKeyId"], "n", "aws_secret_access_key = " + temp_credentials["SecretAccessKey"],"n", "aws_session_token = " + temp_credentials["SessionToken"],"n"]
# Look for the temp-token profile
pfile = "[temp-token]"
with open("/Users/YOUR USER/.aws/credentials", "r") as credentials:
aws_credential_file = credentials.readlines()
#print(aws_credential_file)
for line in aws_credential_file:
if line.find(pfile) != -1:
print('Profile Exists!')
#Prints the line number where the word was found
profile_line = aws_credential_file.index(line)
new_aws_access_key_line_num = profile_line + 1
new_secret_access_key_line_num = profile_line + 2
new_session_token_key_line_num = profile_line + 3
print("its still working", profile_line)
print(new_aws_access_key_line_num)
aws_credential_file[new_aws_access_key_line_num] = "aws_access_key_id = " + temp_credentials["AccessKeyId"], "n"
#  aws_credential_file[new_secret_access_key_line_num] = "aws_secret_access_key = " + temp_credentials["SecretAccessKey"],"n"
#  aws_credential_file[new_session_token_key_line_num] = "aws_session_token = " + temp_credentials["SessionToken"],"n"
#print()



else:
aws_credential_file.writelines(token_reponse)
credentials.close()

get_sts(mfa_serial_number, mfa_otp)

我得到的错误是:它还在工作34.追踪(最近一次通话(:文件"/Users/YOUR USER/code/sts.py";,第49行,inget_sts(mfa_serial_number,mfa_otp(文件"/Users/YOUR USER/code/sts.py";,第29行,在get_sts中if line.fund(pfile(!=-1:AttributeError:"tuple"对象没有属性"find">

有更好的方法吗?

这是因为aws_credential_file 中的,n

最新更新