diff --git a/src/azure-cli/azure/cli/command_modules/storage/_params.py b/src/azure-cli/azure/cli/command_modules/storage/_params.py index 53b1d98d5bf..dd4b65e2cb8 100644 --- a/src/azure-cli/azure/cli/command_modules/storage/_params.py +++ b/src/azure-cli/azure/cli/command_modules/storage/_params.py @@ -519,6 +519,11 @@ def load_arguments(self, _): # pylint: disable=too-many-locals, too-many-statem min_api='2021-01-01', help='Resource identifier of the UserAssigned identity to be associated with server-side ' 'encryption on the storage account.') + c.argument('federated_identity_client_id', options_list=['--key-vault-federated-client-id', '-f'], + min_api='2021-08-01', + help='ClientId of the multi-tenant application to be used ' + 'in conjunction with the user-assigned identity for ' + 'cross-tenant customer-managed-keys server-side encryption on the storage account.') for scope in ['storage account create', 'storage account update']: with self.argument_context(scope, resource_type=ResourceType.MGMT_STORAGE, min_api='2017-06-01', diff --git a/src/azure-cli/azure/cli/command_modules/storage/operations/account.py b/src/azure-cli/azure/cli/command_modules/storage/operations/account.py index c10c0c747aa..52e8361c91e 100644 --- a/src/azure-cli/azure/cli/command_modules/storage/operations/account.py +++ b/src/azure-cli/azure/cli/command_modules/storage/operations/account.py @@ -66,7 +66,8 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc routing_choice=None, publish_microsoft_endpoints=None, publish_internet_endpoints=None, require_infrastructure_encryption=None, allow_blob_public_access=None, min_tls_version=None, allow_shared_key_access=None, edge_zone=None, - identity_type=None, user_identity_id=None, key_vault_user_identity_id=None, + identity_type=None, user_identity_id=None, + key_vault_user_identity_id=None, federated_identity_client_id=None, sas_expiration_period=None, key_expiration_period_in_days=None, allow_cross_tenant_replication=None, default_share_permission=None, enable_nfs_v3=None, subnet=None, vnet_name=None, action='Allow', enable_alw=None, @@ -106,10 +107,12 @@ def create_storage_account(cmd, resource_group_name, account_name, sku=None, loc params.identity = Identity(type=identity_type, user_assigned_identities={user_identity_id: {}}) elif identity_type: params.identity = Identity(type=identity_type) - if key_vault_user_identity_id is not None: + if key_vault_user_identity_id is not None or federated_identity_client_id is not None: EncryptionIdentity = cmd.get_models('EncryptionIdentity') params.encryption.encryption_identity = EncryptionIdentity( - encryption_user_assigned_identity=key_vault_user_identity_id) + encryption_user_assigned_identity=key_vault_user_identity_id, + encryption_federated_identity_client_id=federated_identity_client_id + ) if access_tier: params.access_tier = AccessTier(access_tier) @@ -355,7 +358,8 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non domain_sid=None, azure_storage_sid=None, sam_account_name=None, account_type=None, routing_choice=None, publish_microsoft_endpoints=None, publish_internet_endpoints=None, allow_blob_public_access=None, min_tls_version=None, allow_shared_key_access=None, - identity_type=None, user_identity_id=None, key_vault_user_identity_id=None, + identity_type=None, user_identity_id=None, + key_vault_user_identity_id=None, federated_identity_client_id=None, sas_expiration_period=None, key_expiration_period_in_days=None, allow_cross_tenant_replication=None, default_share_permission=None, immutability_period_since_creation_in_days=None, immutability_policy_state=None, @@ -417,10 +421,15 @@ def update_storage_account(cmd, instance, sku=None, tags=None, custom_domain=Non elif identity_type: params.identity = Identity(type=identity_type) - if key_vault_user_identity_id is not None: + if key_vault_user_identity_id is not None or federated_identity_client_id is not None: + original_encryption_identity = params.encryption.encryption_identity if params.encryption else None EncryptionIdentity = cmd.get_models('EncryptionIdentity') + if not original_encryption_identity: + original_encryption_identity = EncryptionIdentity() params.encryption.encryption_identity = EncryptionIdentity( - encryption_user_assigned_identity=key_vault_user_identity_id) + encryption_user_assigned_identity=key_vault_user_identity_id if key_vault_user_identity_id else original_encryption_identity.encryption_user_assigned_identity, + encryption_federated_identity_client_id=federated_identity_client_id if federated_identity_client_id else original_encryption_identity.encryption_federated_identity_client_id + ) AzureFilesIdentityBasedAuthentication = cmd.get_models('AzureFilesIdentityBasedAuthentication') if enable_files_aadds is not None: