oss_sts.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2018/11/8 9:23
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: oss_sts.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. # -*- coding: utf-8 -*-
  15. '''
  16. 生成sts上传授权
  17. '''
  18. from aliyunsdkcore import client
  19. from aliyunsdksts.request.v20150401 import AssumeRoleRequest
  20. import json
  21. import oss2
  22. '''
  23. host = "" # just for example
  24. accessid = ""
  25. accesskey = ""
  26. bucket_name = ""
  27. channel_name = "test-channel"
  28. auth = Auth(accessid, accesskey)
  29. bucket = Bucket(auth, host, bucket_name)
  30. '''
  31. # Endpoint以杭州为例,其它Region请按实际情况填写。
  32. endpoint = 'oss-cn-shenzhen.aliyuncs.com'
  33. # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  34. # access_key_id = 'LTAIXSozepSx81xe'
  35. # access_key_secret = '19BlxRiAHDPLx4mhz6vQZRuhK0eKed'
  36. access_key_id = 'LTAIKF7ohvwF5ugH'
  37. access_key_secret = 'AfBIeMdrvMN3m0EsQYuRkmNyA7uWoz'
  38. bucket_name = 'testrtmp'
  39. # role_arn是角色的资源名称。
  40. role_arn = 'acs:ram::1024237323330331:role/maxadmin'
  41. clt = client.AcsClient(access_key_id, access_key_secret, 'cn-shenzhen')
  42. req = AssumeRoleRequest.AssumeRoleRequest()
  43. # 设置返回值格式为JSON。
  44. req.set_accept_format('json')
  45. req.set_RoleArn(role_arn)
  46. req.set_RoleSessionName('chanjunkai')
  47. req.set_DurationSeconds(3600)
  48. policys={
  49. "Version": "1",
  50. "Statement": [
  51. {
  52. "Action": [
  53. "oss:PutObject",
  54. ],
  55. "Resource": ["acs:oss:*:*:testrtmp/*"],
  56. "Effect": "Allow",
  57. "Condition": {
  58. "IpAddress": {
  59. "acs:SourceIp": "120.237.157.184"
  60. }
  61. }
  62. }
  63. ]
  64. }
  65. req.set_Policy(Policy=json.dumps(policys))
  66. body = clt.do_action(req)
  67. # body = clt.do_action_with_exception(req)
  68. # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
  69. token = json.loads(body)
  70. print(token)
  71. exit()
  72. # 使用临时token中的认证信息初始化StsAuth实例。
  73. auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],
  74. token['Credentials']['AccessKeySecret'],
  75. token['Credentials']['SecurityToken'])
  76. print(auth)
  77. # 使用StsAuth实例初始化存储空间。
  78. bucket = oss2.Bucket(auth, endpoint, bucket_name)
  79. # 上传一个字符串。
  80. bucket.put_object('object-name.txt', b'hello world')