boto3-assist 0.11.0__py3-none-any.whl → 0.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- boto3_assist/boto3session.py +23 -13
- boto3_assist/connection.py +3 -1
- boto3_assist/dynamodb/dynamodb.py +2 -4
- boto3_assist/dynamodb/dynamodb_connection.py +2 -0
- boto3_assist/version.py +1 -1
- {boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/METADATA +1 -1
- {boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/RECORD +10 -10
- {boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/WHEEL +0 -0
- {boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/licenses/LICENSE-EXPLAINED.txt +0 -0
- {boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/licenses/LICENSE.txt +0 -0
boto3_assist/boto3session.py
CHANGED
|
@@ -27,7 +27,7 @@ class Boto3SessionManager:
|
|
|
27
27
|
aws_region: Optional[str] = None,
|
|
28
28
|
assume_role_arn: Optional[str] = None,
|
|
29
29
|
assume_role_session_name: Optional[str] = None,
|
|
30
|
-
cross_account_role_arn: Optional[str] = None,
|
|
30
|
+
# cross_account_role_arn: Optional[str] = None,
|
|
31
31
|
config: Optional[Config] = None,
|
|
32
32
|
aws_endpoint_url: Optional[str] = None,
|
|
33
33
|
aws_access_key_id: Optional[str] = None,
|
|
@@ -40,7 +40,7 @@ class Boto3SessionManager:
|
|
|
40
40
|
self.assume_role_arn = assume_role_arn
|
|
41
41
|
self.assume_role_session_name = assume_role_session_name
|
|
42
42
|
self.config = config
|
|
43
|
-
self.cross_account_role_arn = cross_account_role_arn
|
|
43
|
+
# # self.cross_account_role_arn = cross_account_role_arn
|
|
44
44
|
self.endpoint_url = aws_endpoint_url
|
|
45
45
|
self.aws_access_key_id = aws_access_key_id
|
|
46
46
|
self.aws_secret_access_key = aws_secret_access_key
|
|
@@ -57,36 +57,46 @@ class Boto3SessionManager:
|
|
|
57
57
|
|
|
58
58
|
profile = self.aws_profile or EnvironmentVariables.AWS.profile()
|
|
59
59
|
region = self.aws_region or EnvironmentVariables.AWS.region()
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
logger.debug("Connecting without assuming a role.")
|
|
64
|
-
self.__session = self.__get_aws_session(profile, region)
|
|
60
|
+
|
|
61
|
+
logger.debug("Connecting without assuming a role.")
|
|
62
|
+
self.__session = self.__get_aws_session(profile, region)
|
|
65
63
|
|
|
66
64
|
if profile:
|
|
67
65
|
print(f"Connecting with a profile: {profile}")
|
|
68
66
|
|
|
67
|
+
if self.assume_role_arn:
|
|
68
|
+
self.__assume_role()
|
|
69
|
+
|
|
69
70
|
def __assume_role(self):
|
|
70
71
|
"""Assume an AWS IAM role."""
|
|
71
72
|
try:
|
|
73
|
+
if not self.__session:
|
|
74
|
+
raise RuntimeError(
|
|
75
|
+
"Session must be established before assuming a role."
|
|
76
|
+
)
|
|
77
|
+
|
|
72
78
|
logger.debug(f"Assuming role {self.assume_role_arn}")
|
|
73
|
-
|
|
79
|
+
|
|
80
|
+
sts_client = self.__session.client("sts")
|
|
74
81
|
session_name = (
|
|
75
82
|
self.assume_role_session_name
|
|
76
83
|
or f"AssumeRoleSessionFor{self.service_name}"
|
|
77
84
|
)
|
|
78
|
-
|
|
79
|
-
raise ValueError("assume_role_arn is required")
|
|
85
|
+
|
|
80
86
|
assumed_role_response = sts_client.assume_role(
|
|
81
87
|
RoleArn=self.assume_role_arn,
|
|
82
88
|
RoleSessionName=session_name,
|
|
83
89
|
)
|
|
84
90
|
credentials = assumed_role_response["Credentials"]
|
|
91
|
+
|
|
92
|
+
# Now override the session with assumed credentials
|
|
85
93
|
self.__session = boto3.Session(
|
|
86
94
|
aws_access_key_id=credentials["AccessKeyId"],
|
|
87
95
|
aws_secret_access_key=credentials["SecretAccessKey"],
|
|
88
96
|
aws_session_token=credentials["SessionToken"],
|
|
97
|
+
region_name=self.aws_region,
|
|
89
98
|
)
|
|
99
|
+
logger.debug("Successfully assumed role and created new session.")
|
|
90
100
|
|
|
91
101
|
except Exception as e:
|
|
92
102
|
logger.error(f"Error assuming role: {e}")
|
|
@@ -117,9 +127,9 @@ class Boto3SessionManager:
|
|
|
117
127
|
"region": self.aws_region,
|
|
118
128
|
"aws_access_key_id": tmp_access_key_id,
|
|
119
129
|
"aws_secret_access_key": tmp_secret_access_key,
|
|
120
|
-
"aws_session_token":
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
"aws_session_token": (
|
|
131
|
+
"*******" if self.aws_session_token is not None else ""
|
|
132
|
+
),
|
|
123
133
|
}
|
|
124
134
|
)
|
|
125
135
|
logger.debug("Creating boto3 session")
|
boto3_assist/connection.py
CHANGED
|
@@ -30,6 +30,7 @@ class Connection:
|
|
|
30
30
|
aws_access_key_id: Optional[str] = None,
|
|
31
31
|
aws_secret_access_key: Optional[str] = None,
|
|
32
32
|
aws_end_point_url: Optional[str] = None,
|
|
33
|
+
assume_role_arn: Optional[str] = None,
|
|
33
34
|
) -> None:
|
|
34
35
|
self.__aws_profile = aws_profile
|
|
35
36
|
self.__aws_region = aws_region
|
|
@@ -37,7 +38,7 @@ class Connection:
|
|
|
37
38
|
self.__aws_secret_access_key = aws_secret_access_key
|
|
38
39
|
self.end_point_url = aws_end_point_url
|
|
39
40
|
self.__session: Boto3SessionManager | None = None
|
|
40
|
-
|
|
41
|
+
self.__assume_role_arn: Optional[str] = assume_role_arn
|
|
41
42
|
self.__service_name: str | None = service_name
|
|
42
43
|
|
|
43
44
|
if self.__service_name is None:
|
|
@@ -73,6 +74,7 @@ class Connection:
|
|
|
73
74
|
aws_access_key_id=self.aws_access_key_id,
|
|
74
75
|
aws_secret_access_key=self.aws_secret_access_key,
|
|
75
76
|
aws_endpoint_url=self.end_point_url,
|
|
77
|
+
assume_role_arn=self.__assume_role_arn,
|
|
76
78
|
)
|
|
77
79
|
|
|
78
80
|
tracker.add(service_name=self.service_name)
|
|
@@ -24,7 +24,6 @@ from boto3_assist.utilities.string_utility import StringUtility
|
|
|
24
24
|
logger = Logger()
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
|
|
28
27
|
class DynamoDB(DynamoDBConnection):
|
|
29
28
|
"""
|
|
30
29
|
DynamoDB. Wrapper for basic DynamoDB Connection and Actions
|
|
@@ -41,6 +40,7 @@ class DynamoDB(DynamoDBConnection):
|
|
|
41
40
|
aws_end_point_url: Optional[str] = None,
|
|
42
41
|
aws_access_key_id: Optional[str] = None,
|
|
43
42
|
aws_secret_access_key: Optional[str] = None,
|
|
43
|
+
assume_role_arn: Optional[str] = None,
|
|
44
44
|
) -> None:
|
|
45
45
|
super().__init__(
|
|
46
46
|
aws_profile=aws_profile,
|
|
@@ -48,6 +48,7 @@ class DynamoDB(DynamoDBConnection):
|
|
|
48
48
|
aws_end_point_url=aws_end_point_url,
|
|
49
49
|
aws_access_key_id=aws_access_key_id,
|
|
50
50
|
aws_secret_access_key=aws_secret_access_key,
|
|
51
|
+
assume_role_arn=assume_role_arn,
|
|
51
52
|
)
|
|
52
53
|
self.helpers: DynamoDBHelpers = DynamoDBHelpers()
|
|
53
54
|
self.log_dynamodb_item_size = (
|
|
@@ -55,7 +56,6 @@ class DynamoDB(DynamoDBConnection):
|
|
|
55
56
|
)
|
|
56
57
|
logger.setLevel(os.getenv("LOG_LEVEL", "INFO"))
|
|
57
58
|
|
|
58
|
-
|
|
59
59
|
def save(
|
|
60
60
|
self,
|
|
61
61
|
item: dict | DynamoDBModelBase,
|
|
@@ -169,7 +169,6 @@ class DynamoDB(DynamoDBConnection):
|
|
|
169
169
|
call_type: str = "resource",
|
|
170
170
|
) -> Dict[str, Any]: ...
|
|
171
171
|
|
|
172
|
-
|
|
173
172
|
def get(
|
|
174
173
|
self,
|
|
175
174
|
key: Optional[dict] = None,
|
|
@@ -344,7 +343,6 @@ class DynamoDB(DynamoDBConnection):
|
|
|
344
343
|
) -> dict:
|
|
345
344
|
pass
|
|
346
345
|
|
|
347
|
-
|
|
348
346
|
def delete(
|
|
349
347
|
self,
|
|
350
348
|
*,
|
|
@@ -32,6 +32,7 @@ class DynamoDBConnection(Connection):
|
|
|
32
32
|
aws_end_point_url: Optional[str] = None,
|
|
33
33
|
aws_access_key_id: Optional[str] = None,
|
|
34
34
|
aws_secret_access_key: Optional[str] = None,
|
|
35
|
+
assume_role_arn: Optional[str] = None,
|
|
35
36
|
) -> None:
|
|
36
37
|
super().__init__(
|
|
37
38
|
service_name="dynamodb",
|
|
@@ -40,6 +41,7 @@ class DynamoDBConnection(Connection):
|
|
|
40
41
|
aws_access_key_id=aws_access_key_id,
|
|
41
42
|
aws_secret_access_key=aws_secret_access_key,
|
|
42
43
|
aws_end_point_url=aws_end_point_url,
|
|
44
|
+
assume_role_arn=assume_role_arn,
|
|
43
45
|
)
|
|
44
46
|
|
|
45
47
|
self.__dynamodb_client: DynamoDBClient | None = None
|
boto3_assist/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '0.
|
|
1
|
+
__version__ = '0.12.0'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
boto3_assist/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
boto3_assist/boto3session.py,sha256=
|
|
3
|
-
boto3_assist/connection.py,sha256
|
|
2
|
+
boto3_assist/boto3session.py,sha256=eXmsOXsQoXaVnis6hiTXwNaRA6Vnjvj7sZnMUGRsrdU,6965
|
|
3
|
+
boto3_assist/connection.py,sha256=UJg6YHxVpz3F51Lih5cjfPhbkheRvXoJTpCilErNzkc,4523
|
|
4
4
|
boto3_assist/connection_tracker.py,sha256=UgfR9RlvXf3A4ssMr3gDMpw89ka8mSRvJn4M34SzhbU,4378
|
|
5
5
|
boto3_assist/http_status_codes.py,sha256=G0zRSWenwavYKETvDF9tNVUXQz3Ae2gXdBETYbjvJe8,3284
|
|
6
|
-
boto3_assist/version.py,sha256=
|
|
6
|
+
boto3_assist/version.py,sha256=qHJ_q-NtoZ98rdflBB5GKtBzx_sUvAVe96rJSun_DEU,23
|
|
7
7
|
boto3_assist/aws_lambda/event_info.py,sha256=OkZ4WzuGaHEu_T8sB188KBgShAJhZpWASALKRGBOhMg,14648
|
|
8
8
|
boto3_assist/aws_lambda/mock_context.py,sha256=LPjHP-3YSoY6iPl1kPqJDwSVf1zLNTcukUunDtYcbK0,116
|
|
9
9
|
boto3_assist/cloudwatch/cloudwatch_connection.py,sha256=mnGWaLSQpHh5EeY7Ek_2o9JKHJxOELIYtQVMX1IaHn4,2480
|
|
@@ -16,8 +16,8 @@ boto3_assist/cognito/cognito_connection.py,sha256=deuXR3cNHz0mCYff2k0LfAvK--9Okq
|
|
|
16
16
|
boto3_assist/cognito/cognito_utility.py,sha256=IVZAg58nHG1U7uxe7FsTYpqwwZiwwdIBGiVTZuLCFqg,18417
|
|
17
17
|
boto3_assist/cognito/jwks_cache.py,sha256=1Y9r-YfQ8qrgZN5xYPvjUEEV0vthbdcPdAIaPbZP7kU,373
|
|
18
18
|
boto3_assist/cognito/user.py,sha256=qc44qLx3gwq6q2zMxcPQze1EjeZwy5Kuav93vbe-4WU,820
|
|
19
|
-
boto3_assist/dynamodb/dynamodb.py,sha256=
|
|
20
|
-
boto3_assist/dynamodb/dynamodb_connection.py,sha256=
|
|
19
|
+
boto3_assist/dynamodb/dynamodb.py,sha256=8uzKaw9knqPvlkroQK5aMR-ASRxFwCCcMacm6wWpp8g,15757
|
|
20
|
+
boto3_assist/dynamodb/dynamodb_connection.py,sha256=kOFB07ulFM3ohtqr_Ytk4OaCfPL_DdCQ-GXGq6Gi-Ag,3367
|
|
21
21
|
boto3_assist/dynamodb/dynamodb_helpers.py,sha256=RoRRqKjdwfC-2-gvlkLvCoNWhIoMrHm-68dkyhXI_Xk,12080
|
|
22
22
|
boto3_assist/dynamodb/dynamodb_importer.py,sha256=nCKsyRQeMqDSf0Q5mQ_X_oVIg4PRnu0hcUzZnBli610,3471
|
|
23
23
|
boto3_assist/dynamodb/dynamodb_index.py,sha256=D0Lq121qk1cXeMetPeqnzvv6CXd0XfEygfdUXaljLG8,8551
|
|
@@ -53,8 +53,8 @@ boto3_assist/utilities/logging_utility.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
|
|
|
53
53
|
boto3_assist/utilities/numbers_utility.py,sha256=wzv9d0uXT_2_ZHHio7LBzibwxPqhGpvbq9HinrVn_4A,10160
|
|
54
54
|
boto3_assist/utilities/serialization_utility.py,sha256=nieqW9b71Dr0X2HPsNmCei6zoIbsPRl9fDAigBQkaUg,21730
|
|
55
55
|
boto3_assist/utilities/string_utility.py,sha256=0ChxbuT37xdG4y3cKzbNTHk4T3fl8lNMdOT7L5aJBQk,10382
|
|
56
|
-
boto3_assist-0.
|
|
57
|
-
boto3_assist-0.
|
|
58
|
-
boto3_assist-0.
|
|
59
|
-
boto3_assist-0.
|
|
60
|
-
boto3_assist-0.
|
|
56
|
+
boto3_assist-0.12.0.dist-info/METADATA,sha256=Lxa_QRidcIM16fqlmi0IQpW7CPBnWrphIktDAUuAvKc,2875
|
|
57
|
+
boto3_assist-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
58
|
+
boto3_assist-0.12.0.dist-info/licenses/LICENSE-EXPLAINED.txt,sha256=WFREvTpfTjPjDHpOLADxJpCKpIla3Ht87RUUGii4ODU,606
|
|
59
|
+
boto3_assist-0.12.0.dist-info/licenses/LICENSE.txt,sha256=PXDhFWS5L5aOTkVhNvoitHKbAkgxqMI2uUPQyrnXGiI,1105
|
|
60
|
+
boto3_assist-0.12.0.dist-info/RECORD,,
|
|
File without changes
|
{boto3_assist-0.11.0.dist-info → boto3_assist-0.12.0.dist-info}/licenses/LICENSE-EXPLAINED.txt
RENAMED
|
File without changes
|
|
File without changes
|