s3: Allow authentication using session token (#5240)

* S3: Allow authentication using session token

* Add a little test
This commit is contained in:
Batuhan Taskaya
2021-01-11 10:48:57 +02:00
committed by GitHub
parent c83a4ea406
commit 5374880220
3 changed files with 12 additions and 1 deletions
+1
View File
@@ -141,6 +141,7 @@ SCHEMA = {
"endpointurl": str,
"access_key_id": str,
"secret_access_key": str,
"session_token": str,
Optional("listobjects", default=False): Bool, # obsoleted
Optional("use_ssl", default=True): Bool,
"sse": str,
+3
View File
@@ -54,6 +54,7 @@ class S3Tree(BaseTree):
self.access_key_id = config.get("access_key_id")
self.secret_access_key = config.get("secret_access_key")
self.session_token = config.get("session_token")
shared_creds = config.get("credentialpath")
if shared_creds:
@@ -73,6 +74,8 @@ class S3Tree(BaseTree):
session_opts["aws_access_key_id"] = self.access_key_id
if self.secret_access_key:
session_opts["aws_secret_access_key"] = self.secret_access_key
if self.session_token:
session_opts["aws_session_token"] = self.session_token
session = boto3.session.Session(**session_opts)
+8 -1
View File
@@ -9,6 +9,7 @@ prefix = "some/prefix"
url = f"s3://{bucket_name}/{prefix}"
key_id = "key-id"
key_secret = "key-secret"
session_token = "session-token"
@pytest.fixture(autouse=True)
@@ -65,10 +66,16 @@ def test_sse_kms_key_id(dvc):
def test_key_id_and_secret(dvc):
tree = S3Tree(
dvc,
{"url": url, "access_key_id": key_id, "secret_access_key": key_secret},
{
"url": url,
"access_key_id": key_id,
"secret_access_key": key_secret,
"session_token": session_token,
},
)
assert tree.access_key_id == key_id
assert tree.secret_access_key == key_secret
assert tree.session_token == session_token
def test_get_s3_no_credentials(mocker):