Skip to content

Commit 019ed1b

Browse files
authored
Merge pull request #228 from l-iberty/dev/aksk-security
AKSK密钥轮换安全方案适配
2 parents 6f9f100 + 7b48f21 commit 019ed1b

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

qcloud_cos/cos_auth.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,10 @@ def filter_headers(data):
4545
class CosS3Auth(AuthBase):
4646

4747
def __init__(self, conf, key=None, params={}, expire=10000, sign_host=None):
48-
self._secret_id = conf._secret_id
49-
self._secret_key = conf._secret_key
48+
self._secret_id = conf._secret_id if conf._secret_id else \
49+
(conf._credential_inst.secret_id if conf._credential_inst else None)
50+
self._secret_key = conf._secret_key if conf._secret_key else \
51+
(conf._credential_inst.secret_key if conf._credential_inst else None)
5052
self._anonymous = conf._anonymous
5153
self._expire = expire
5254
self._params = params

qcloud_cos/cos_client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
class CosConfig(object):
4141
"""config类,保存用户相关信息"""
4242

43-
def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token=None, Scheme=None, Timeout=None,
43+
def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token=None, CredentialInstance=None, Scheme=None, Timeout=None,
4444
Access_id=None, Access_key=None, Secret_id=None, Secret_key=None, Endpoint=None, IP=None, Port=None,
4545
Anonymous=None, UA=None, Proxies=None, Domain=None, ServiceDomain=None, PoolConnections=10,
4646
PoolMaxSize=10, AllowRedirects=False, SignHost=True, EndpointCi=None, EndpointPic=None, EnableOldDomain=True, EnableInternalDomain=True):
@@ -119,9 +119,14 @@ def __init__(self, Appid=None, Region=None, SecretId=None, SecretKey=None, Token
119119
elif (Access_id and Access_key):
120120
self._secret_id = self.convert_secret_value(Access_id)
121121
self._secret_key = self.convert_secret_value(Access_key)
122+
elif (CredentialInstance and hasattr(CredentialInstance, "secret_id") and hasattr(CredentialInstance, "secret_key") and hasattr(CredentialInstance, "token")):
123+
self._secret_id = None
124+
self._secret_key = None
125+
self._credential_inst = CredentialInstance
122126
elif self._anonymous:
123127
self._secret_id = None
124128
self._secret_key = None
129+
self._credential_inst = None
125130
else:
126131
raise CosClientError('SecretId and SecretKey is Required!')
127132

ut/test.py

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,39 @@
2323
REGION = os.environ["REGION"]
2424
APPID = '1251668577'
2525
TEST_CI = os.environ["TEST_CI"]
26+
USE_CREDENTIAL_INST = os.environ["USE_CREDENTIAL_INST"]
2627
test_bucket = 'cos-python-v5-test-' + str(sys.version_info[0]) + '-' + str(
2728
sys.version_info[1]) + '-' + REGION + '-' + APPID
2829
copy_test_bucket = 'copy-' + test_bucket
2930
test_object = "test.txt"
3031
special_file_name = "中文" + "→↓←→↖↗↙↘! \"#$%&'()*+,-./0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
31-
conf = CosConfig(
32-
Region=REGION,
33-
SecretId=SECRET_ID,
34-
SecretKey=SECRET_KEY,
35-
)
32+
33+
""" CredentialDemo """
34+
class CredentialDemo:
35+
@property
36+
def secret_id(self):
37+
return SECRET_ID
38+
39+
@property
40+
def secret_key(self):
41+
return SECRET_KEY
42+
43+
@property
44+
def token(self):
45+
return ''
46+
47+
if USE_CREDENTIAL_INST == 'true':
48+
conf = CosConfig(
49+
Region=REGION,
50+
CredentialInstance=CredentialDemo()
51+
)
52+
else:
53+
conf = CosConfig(
54+
Region=REGION,
55+
SecretId=SECRET_ID,
56+
SecretKey=SECRET_KEY,
57+
)
58+
3659
client = CosS3Client(conf, retry=3)
3760
rsa_provider = RSAProvider()
3861
client_for_rsa = CosEncryptionClient(conf, rsa_provider)

0 commit comments

Comments
 (0)