Far*_*n.K 6 python tkinter amazon-web-services python-3.x boto3
我tkinter用来创建返回安全组的gui应用程序.目前,如果您想更改凭据(例如,如果您不小心输入了错误的凭据),则必须重新启动应用程序,否则boto3将继续使用旧凭据.
我不确定为什么它继续使用旧凭据,因为我使用当前输入的凭据再次运行所有内容.
这是设置环境变量和启动的代码片段boto3.如果您第一次输入正确的凭据,它的工作完全正常.
os.environ['AWS_ACCESS_KEY_ID'] = self.accessKey
os.environ['AWS_SECRET_ACCESS_KEY'] = self.secretKey
self.sts_client = boto3.client('sts')
self.assumedRoleObject = self.sts_client.assume_role(
RoleArn=self.role,
RoleSessionName="AssumeRoleSession1"
)
self.credentials = self.assumedRoleObject['Credentials']
self.ec2 = boto3.resource(
'ec2',
region_name=self.region,
aws_access_key_id=credentials['AccessKeyId'],
aws_secret_access_key=credentials['SecretAccessKey'],
aws_session_token=credentials['SessionToken'],
)
Run Code Online (Sandbox Code Playgroud)
凭证变量使用以下方式设置:
self.accessKey = str(self.AWS_ACCESS_KEY_ID_Form.get())
self.secretKey = str(self.AWS_SECRET_ACCESS_KEY_Form.get())
self.role = str(self.AWS_ROLE_ARN_Form.get())
self.region = str(self.AWS_REGION_Form.get())
self.instanceID = str(self.AWS_INSTANCE_ID_Form.get())
Run Code Online (Sandbox Code Playgroud)
有没有办法在boto3不重新启动程序的情况下使用不同的凭据?
moo*_*oot 10
您需要boto3.session.Session来覆盖访问凭据.
请参考http://boto3.readthedocs.io/en/latest/reference/core/session.html
import boto3
# Assign you own access
mysession = boto3.session.Session(aws_access_key_id='foo1', aws_secret_access_key='bar1')
# If you want to use different profile call foobar inside .aws/credentials
mysession = boto3.session.Session(profile_name="fooboar")
# Afterwards, just declare your AWS client/resource services
sqs_resource=mysession.resource("sqs")
# or client
s3_client=mysession.client("s3")
Run Code Online (Sandbox Code Playgroud)
基本上,您的代码几乎没有变化.你只是传入会话而不是直接boto3.client/boto3.resource
self.sts_client = mysession.client('sts')
Run Code Online (Sandbox Code Playgroud)
当然,只需为每组凭据创建不同sessions的 botocore.session.Session对象:
import boto3
s1 = boto3.session.Session(aws_access_key_id='foo1', aws_secret_access_key='bar1')
s2 = boto3.session.Session(aws_access_key_id='foo2', aws_secret_access_key='bar2')
Run Code Online (Sandbox Code Playgroud)
您也可以利用set_credentials方法来保持 1 个会话的动态变化信用:
import botocore
session - botocore.session.Session()
session.set_credentials('foo', 'bar')
client = session.create_client('s3')
client._request_signer._credentials.access_key
u'foo'
session.set_credentials('foo1', 'bar')
client = session.create_client('s3')
client._request_signer._credentials.access_key
u'foo1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5347 次 |
| 最近记录: |