Skip to content

Commit 30f014d

Browse files
ZhangHanknikure
authored andcommitted
fix: update get_execution_role_arn to use role from DefaultSpaceSettings
1 parent 73cc8d5 commit 30f014d

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/sagemaker/session.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3882,12 +3882,19 @@ def get_caller_identity_arn(self):
38823882
instance_name = metadata["ResourceName"]
38833883
domain_id = metadata.get("DomainId")
38843884
user_profile_name = metadata.get("UserProfileName")
3885+
space_name = metadata.get("SpaceName")
38853886
try:
38863887
if domain_id is None:
38873888
instance_desc = self.sagemaker_client.describe_notebook_instance(
38883889
NotebookInstanceName=instance_name
38893890
)
38903891
return instance_desc["RoleArn"]
3892+
3893+
# In Space app, find execution role from DefaultSpaceSettings on domain level
3894+
if space_name is not None:
3895+
domain_desc = self.sagemaker_client.describe_domain(DomainId=domain_id)
3896+
return domain_desc["DefaultSpaceSettings"]["ExecutionRole"]
3897+
38913898
user_profile_desc = self.sagemaker_client.describe_user_profile(
38923899
DomainId=domain_id, UserProfileName=user_profile_name
38933900
)

tests/unit/test_session.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,28 @@ def test_fallback_to_domain_if_role_unavailable_in_user_settings(boto_session):
397397
sess.sagemaker_client.describe_domain.assert_called_once_with(DomainId="d-kbnw5yk6tg8j")
398398

399399

400+
@patch(
401+
"six.moves.builtins.open",
402+
mock_open(
403+
read_data='{"ResourceName": "SageMakerInstance", '
404+
'"DomainId": "d-kbnw5yk6tg8j", '
405+
'"SpaceName": "space_name"}'
406+
),
407+
)
408+
@patch("os.path.exists", side_effect=mock_exists(NOTEBOOK_METADATA_FILE, True))
409+
def test_get_caller_identity_arn_from_describe_domain_for_space(boto_session):
410+
sess = Session(boto_session)
411+
expected_role = "arn:aws:iam::369233609183:role/service-role/SageMakerRole-20171129T072388"
412+
sess.sagemaker_client.describe_domain.return_value = {
413+
"DefaultSpaceSettings": {"ExecutionRole": expected_role}
414+
}
415+
416+
actual = sess.get_caller_identity_arn()
417+
418+
assert actual == expected_role
419+
sess.sagemaker_client.describe_domain.assert_called_once_with(DomainId="d-kbnw5yk6tg8j")
420+
421+
400422
@patch("six.moves.builtins.open", mock_open(read_data='{"ResourceName": "SageMakerInstance"}'))
401423
@patch("os.path.exists", side_effect=mock_exists(NOTEBOOK_METADATA_FILE, True))
402424
@patch("sagemaker.session.sts_regional_endpoint", return_value=STS_ENDPOINT)

0 commit comments

Comments
 (0)