coposs_sts.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. # Endpoint以杭州为例,其它Region请按实际情况填写。
  23. endpoint = 'oss-cn-shenzhen.aliyuncs.com'
  24. # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  25. access_key_id = 'LTAIyMkGfEdogyL9'
  26. access_key_secret = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
  27. bucket_name = 'cloudvod1'
  28. # role_arn是角色的资源名称。
  29. role_arn = 'acs:ram::1901342792446414:role/stsoss'
  30. clt = client.AcsClient(access_key_id, access_key_secret, 'cn-shenzhen')
  31. req = AssumeRoleRequest.AssumeRoleRequest()
  32. # 设置返回值格式为JSON。
  33. req.set_accept_format('json')
  34. req.set_RoleArn(role_arn)
  35. req.set_RoleSessionName('test')
  36. req.set_DurationSeconds(3600)
  37. policys = {
  38. "Version": "1",
  39. "Statement": [
  40. {
  41. "Action": [
  42. "oss:PutObject",
  43. "oss:DeleteObject",
  44. ],
  45. "Resource": ["acs:oss:*:*:cloudvod1/*"],
  46. "Effect": "Allow",
  47. "Condition": {
  48. "IpAddress": {
  49. "acs:SourceIp": "120.237.157.184"
  50. }
  51. }
  52. }
  53. ]
  54. }
  55. req.set_Policy(Policy=json.dumps(policys))
  56. body = clt.do_action(req)
  57. # body = clt.do_action_with_exception(req)
  58. # 使用RAM账号的AccessKeyId和AccessKeySecret向STS申请临时token。
  59. token = json.loads(body)
  60. print(token)
  61. # exit()
  62. # tokens = {
  63. # "Credentials":{
  64. # 'AccessKeySecret': 'eDwALgKkfZp6eXD2jz8ckktfduneNCjEz8NgHxcZsVe',
  65. # 'AccessKeyId': 'STS.NJNUa1UjHgo5idVKqY9wBLB3e',
  66. # 'Expiration': '2018-11-15T09:06:30Z',
  67. # 'SecurityToken': 'CAISwgJ1q6Ft5B2yfSjIr4n7HtuFuLVp0K3ea0Lnr3EMNfhuo4eYhzz2IHxLf3RuAe8dvvw+nGBV7vsdlqN4S5ZDR1HCbsJxtkXiZd84J9ivgde8yJBZom/MewHKeeKSvqL7Z+H+U6mSGJOEYEzFkSle2KbzcS7YMXWuLZyOj+wADLEQRRLqVSdaI91UKwB+0pN4U0HcLvGwKBXnr3PNBU5zwGpGhHh49L60z7/siGTXh0aozfQO9cajYMq4YtJwJot6S5D3pqgUF4vZ+SJc8RVR790ShadfqwzAo8uWDnhJkWzkVLOOqps1d1A/P/VlXfcU8NqEzKUi5raIyN+tkE0WZboOCh6yHt7wnJH2f8qyLcs8eLrBPHDA78uCLJGdsXl/PS1AaV0SJIFxci4oWUF0F27ASqqu6FnGZwalW1srcmfDSBocGoABBPrYt/W5rkesL4dOVkQTaYz14WpwbEQfMBi+8/T5xLEqUP4tuwsiiBbsQhfAm3QLKzGODGJB9bCcfxpQPSnZuAyCI4uSUZiuCFUzdKX/eaiurRDLMnACYx3aEzfmDCvQ6dYbbHxIdk+0UNMWk51eWKXfWnoH+udI6rkks2AWjTM='
  68. # }
  69. # }
  70. # 使用临时token中的认证信息初始化StsAuth实例。
  71. auth = oss2.StsAuth(token['Credentials']['AccessKeyId'],
  72. token['Credentials']['AccessKeySecret'],
  73. token['Credentials']['SecurityToken'])
  74. print(auth)
  75. # 使用StsAuth实例初始化存储空间。
  76. bucket = oss2.Bucket(auth, endpoint, bucket_name)
  77. # 上传一个字符串。
  78. # res = bucket.put_object('oss_media_hls.ts', b'hello world')
  79. res = bucket.put_object('object-name.txt', b'hello world')
  80. print(res)