Skip to content

Commit 329f12f

Browse files
authored
[Storage] az storage account create/update: Add --sas-expiration-action to sas policy (#31674)
1 parent c551e9c commit 329f12f

5 files changed

Lines changed: 1332 additions & 145 deletions

File tree

src/azure-cli/azure/cli/command_modules/storage/_params.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,15 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
199199
help='Expiration period of the SAS Policy assigned to the storage account, DD.HH:MM:SS.'
200200
)
201201

202+
t_expiration_action_type = self.get_models('ExpirationAction', resource_type=ResourceType.MGMT_STORAGE)
203+
sas_expiration_action_type = CLIArgumentType(
204+
arg_type=get_enum_type(t_expiration_action_type),
205+
options_list=['--sas-expiration-action', '--sas-exp-action'],
206+
help="The action to be performed when --sas-expiration-period is violated. The 'Log' action can be used "
207+
"for audit purposes and the 'Block' action can be used to block and deny the usage of SAS tokens that "
208+
"do not adhere to the sas policy expiration period. The default action is 'Log'."
209+
)
210+
202211
key_expiration_period_in_days_type = CLIArgumentType(
203212
options_list=['--key-expiration-period-in-days', '--key-exp-days'], type=int,
204213
help='Expiration period in days of the Key Policy assigned to the storage account'
@@ -389,7 +398,8 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
389398
help='The key is the ARM resource identifier of the identity. Only 1 User Assigned identity is '
390399
'permitted here.')
391400
c.argument('key_expiration_period_in_days', key_expiration_period_in_days_type, is_preview=True)
392-
c.argument('sas_expiration_period', sas_expiration_period_type, is_preview=True)
401+
c.argument('sas_expiration_period', sas_expiration_period_type)
402+
c.argument('sas_expiration_action', sas_expiration_action_type)
393403
c.argument('allow_cross_tenant_replication', allow_cross_tenant_replication_type)
394404
c.argument('default_share_permission', default_share_permission_type)
395405
c.argument('enable_nfs_v3', arg_type=get_three_state_flag(),
@@ -492,7 +502,8 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem
492502
help='The key is the ARM resource identifier of the identity. Only 1 User Assigned identity is '
493503
'permitted here.')
494504
c.argument('key_expiration_period_in_days', key_expiration_period_in_days_type, is_preview=True)
495-
c.argument('sas_expiration_period', sas_expiration_period_type, is_preview=True)
505+
c.argument('sas_expiration_period', sas_expiration_period_type)
506+
c.argument('sas_expiration_action', sas_expiration_action_type)
496507
c.argument('allow_cross_tenant_replication', allow_cross_tenant_replication_type)
497508
c.argument('default_share_permission', default_share_permission_type)
498509
c.argument('immutability_period_since_creation_in_days',

src/azure-cli/azure/cli/command_modules/storage/operations/account.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc
7373
min_tls_version=None, allow_shared_key_access=None, edge_zone=None,
7474
identity_type=None, user_identity_id=None,
7575
key_vault_user_identity_id=None, federated_identity_client_id=None,
76-
sas_expiration_period=None, key_expiration_period_in_days=None,
76+
sas_expiration_action=None, sas_expiration_period=None, key_expiration_period_in_days=None,
7777
allow_cross_tenant_replication=None, default_share_permission=None,
7878
enable_nfs_v3=None, subnet=None, vnet_name=None, action='Allow', enable_alw=None,
7979
immutability_period_since_creation_in_days=None, immutability_policy_state=None,
@@ -265,9 +265,16 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc
265265
KeyPolicy = cmd.get_models('KeyPolicy')
266266
params.key_policy = KeyPolicy(key_expiration_period_in_days=key_expiration_period_in_days)
267267

268-
if sas_expiration_period:
268+
if sas_expiration_period is not None or sas_expiration_action is not None:
269269
SasPolicy = cmd.get_models('SasPolicy')
270-
params.sas_policy = SasPolicy(sas_expiration_period=sas_expiration_period)
270+
if sas_expiration_period is None and sas_expiration_action is not None:
271+
from azure.cli.core.azclierror import InvalidArgumentValueError
272+
raise InvalidArgumentValueError('--sas-expiration-action can only be specified together with'
273+
' --sas-expiration-period')
274+
if sas_expiration_action is None:
275+
sas_expiration_action = 'Log'
276+
params.sas_policy = SasPolicy(sas_expiration_period=sas_expiration_period,
277+
expiration_action=sas_expiration_action)
271278

272279
if allow_cross_tenant_replication is not None:
273280
params.allow_cross_tenant_replication = allow_cross_tenant_replication
@@ -387,7 +394,7 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non
387394
allow_blob_public_access=None, min_tls_version=None, allow_shared_key_access=None,
388395
identity_type=None, user_identity_id=None,
389396
key_vault_user_identity_id=None, federated_identity_client_id=None,
390-
sas_expiration_period=None, key_expiration_period_in_days=None,
397+
sas_expiration_action=None, sas_expiration_period=None, key_expiration_period_in_days=None,
391398
allow_cross_tenant_replication=None, default_share_permission=None,
392399
immutability_period_since_creation_in_days=None, immutability_policy_state=None,
393400
allow_protected_append_writes=None, public_network_access=None, upgrade_to_storagev2=None,
@@ -646,9 +653,19 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non
646653
KeyPolicy = cmd.get_models('KeyPolicy')
647654
params.key_policy = KeyPolicy(key_expiration_period_in_days=key_expiration_period_in_days)
648655

649-
if sas_expiration_period:
656+
if sas_expiration_period is not None or sas_expiration_action is not None:
650657
SasPolicy = cmd.get_models('SasPolicy')
651-
params.sas_policy = SasPolicy(sas_expiration_period=sas_expiration_period)
658+
if sas_expiration_period is None and sas_expiration_action is not None:
659+
from azure.cli.core.azclierror import InvalidArgumentValueError
660+
raise InvalidArgumentValueError('--sas-expiration-action can only be specified together '
661+
'with --sas-expiration-period')
662+
if sas_expiration_action is None:
663+
sas_expiration_action = 'Log'
664+
if instance.sas_policy is not None and instance.sas_policy.expiration_action is not None:
665+
sas_expiration_action = instance.sas_policy.expiration_action
666+
667+
params.sas_policy = SasPolicy(sas_expiration_period=sas_expiration_period,
668+
expiration_action=sas_expiration_action)
652669

653670
if allow_cross_tenant_replication is not None:
654671
params.allow_cross_tenant_replication = allow_cross_tenant_replication

0 commit comments

Comments
 (0)