Skip to content

Commit 5825e95

Browse files
farizrahman4urestyled-commitsefiop
authored
S3: Use key_id and key_secret directly (#4224)
* key api * Restyled by black * test * fixes * test * Restyled by black * Trigger CI * default val * remove redundant default Co-authored-by: Ruslan Kuprieiev <[email protected]> * Update tests/unit/remote/test_s3.py * rename fields * update test * key_id->secret_key_id Co-authored-by: Restyled.io <[email protected]> Co-authored-by: Ruslan Kuprieiev <[email protected]>
1 parent a56c8bb commit 5825e95

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

dvc/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,8 @@ class RelPath(str):
149149
"profile": str,
150150
"credentialpath": str,
151151
"endpointurl": str,
152+
"access_key_id": str,
153+
"secret_access_key": str,
152154
Optional("listobjects", default=False): Bool,
153155
Optional("use_ssl", default=True): Bool,
154156
"sse": str,

dvc/tree/s3.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ def __init__(self, repo, config):
5454

5555
self._append_aws_grants_to_extra_args(config)
5656

57+
self.access_key_id = config.get("access_key_id")
58+
self.secret_access_key = config.get("secret_access_key")
59+
5760
shared_creds = config.get("credentialpath")
5861
if shared_creds:
5962
os.environ.setdefault("AWS_SHARED_CREDENTIALS_FILE", shared_creds)
@@ -63,9 +66,14 @@ def __init__(self, repo, config):
6366
def s3(self):
6467
import boto3
6568

66-
session = boto3.session.Session(
67-
profile_name=self.profile, region_name=self.region
68-
)
69+
session_opts = dict(profile_name=self.profile, region_name=self.region)
70+
71+
if self.access_key_id:
72+
session_opts["aws_access_key_id"] = self.access_key_id
73+
if self.secret_access_key:
74+
session_opts["aws_secret_access_key"] = self.secret_access_key
75+
76+
session = boto3.session.Session(**session_opts)
6977

7078
return session.client(
7179
"s3", endpoint_url=self.endpoint_url, use_ssl=self.use_ssl

tests/unit/remote/test_s3.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
bucket_name = "bucket-name"
77
prefix = "some/prefix"
88
url = f"s3://{bucket_name}/{prefix}"
9+
key_id = "key-id"
10+
key_secret = "key-secret"
911

1012

1113
@pytest.fixture(autouse=True)
@@ -57,3 +59,12 @@ def test_grants_mutually_exclusive_acl_error(dvc, grants):
5759
def test_sse_kms_key_id(dvc):
5860
tree = S3RemoteTree(dvc, {"url": url, "sse_kms_key_id": "key"})
5961
assert tree.extra_args["SSEKMSKeyId"] == "key"
62+
63+
64+
def test_key_id_and_secret(dvc):
65+
tree = S3RemoteTree(
66+
dvc,
67+
{"url": url, "access_key_id": key_id, "secret_access_key": key_secret},
68+
)
69+
assert tree.access_key_id == key_id
70+
assert tree.secret_access_key == key_secret

0 commit comments

Comments
 (0)