azure.storage

Storage Account Resource

example:

Finds all Storage Accounts in the subscription.

policies:
    - name: find-all-storage-accounts
      resource: azure.storage

Filters

advisor-recommendation

Filter resources by Azure Advisor Recommendations

Select all categories with ‘all’

example:

policies:
  - name: disks-with-cost-recommendations
    resource: azure.disk
    filters:
      - type: advisor-recommendation
        category: Cost
        key: '[].properties.recommendationTypeId'
        op: contains
        value: '48eda464-1485-4dcf-a674-d0905df5054a'
properties:
  category:
    type: string
  default:
    type: object
  key:
    type: string
  op:
    enum:
    - eq
    - equal
    - ne
    - not-equal
    - gt
    - greater-than
    - ge
    - gte
    - le
    - lte
    - lt
    - less-than
    - glob
    - regex
    - regex-case
    - in
    - ni
    - not-in
    - contains
    - difference
    - intersect
    - mod
  tag_key_transforms:
    items:
      type: string
    type: array
  type:
    enum:
    - advisor-recommendation
  value:
    oneOf:
    - type: array
    - type: string
    - type: boolean
    - type: number
    - type: 'null'
  value_from:
    additionalProperties: 'False'
    properties:
      expr:
        oneOf:
        - type: integer
        - type: string
      format:
        enum:
        - csv
        - json
        - txt
        - csv2dict
      headers:
        patternProperties:
          ? ''
          : type: string
        type: object
      query:
        type: string
      url:
        type: string
    required:
    - url
    type: object
  value_path:
    type: string
  value_regex:
    type: string
  value_type:
    enum:
    - age
    - integer
    - expiration
    - normalize
    - size
    - cidr
    - cidr_size
    - swap
    - resource_count
    - expr
    - unique_size
    - date
    - version
    - float
    - duration
required:
- category
- type

blob-public-access

Filter Storage Accounts by whether anonymous (public) blob access is allowed at the account level (the allowBlobPublicAccess property).

Azure does not always return allowBlobPublicAccess in the account properties. When it is absent the account permits anonymous access, so this filter treats a missing value as True (allowed). This makes it suitable for the CIS Microsoft Azure Foundations control “Ensure that ‘Allow Blob Anonymous Access’ is set to ‘Disabled’”, which a plain value filter would miss on accounts where the property is not present.

example:

Find all Storage Accounts that allow anonymous blob access (CIS 4.17), including those where the property is unset, and disable it.

policies:
    - name: cis-4-17-blob-anonymous-access
      resource: azure.storage
      filters:
        - type: blob-public-access
          value: true
      actions:
        - type: set-blob-public-access
          value: False
properties:
  type:
    enum:
    - blob-public-access
  value:
    default: true
    type: boolean
required:
- type

firewall-bypass

Filters resources by the firewall bypass rules.

example:

This policy will find all Storage Accounts with enabled Azure Services, Metrics and Logging bypass rules

policies:
  - name: storage-bypass
    resource: azure.storage
    filters:
      - type: firewall-bypass
        mode: equal
        list:
            - AzureServices
            - Metrics
            - Logging
properties:
  list:
    items:
      enum:
      - AzureServices
      - Metrics
      - Logging
    type: array
  mode:
    enum:
    - include
    - equal
    - any
    - only
  type:
    enum:
    - firewall-bypass
required:
- mode
- list
- type

Actions

require-secure-transfer

Action that updates the Secure Transfer setting on Storage Accounts. Programmatically, this will be seen by updating the EnableHttpsTrafficOnly setting

example:

Turns on Secure transfer required for all storage accounts. This will reject requests that use HTTP to your storage accounts.

policies:
    - name: require-secure-transfer
      resource: azure.storage
      actions:
      - type: require-secure-transfer
        value: True

You can also set the minimum tls version on a bucket, valid values: TLS1_0, TLS1_1, TLS1_2:

policies:
    - name: require-secure-transfer-with-tls-v1-2
      resource: azure.storage
      actions:
      - type: require-secure-transfer
        value: True
        minimum_tls_version: TLS1_2
properties:
  minimum_tls_version:
    type: string
  type:
    enum:
    - require-secure-transfer
  value:
    default: true
    type: boolean
required:
- type

set-blob-public-access

Action that updates the allowBlobPublicAccess setting on Storage Accounts.

This is the account-level master switch for anonymous (public) blob access. When set to False, anonymous access is denied for all containers and blobs in the account regardless of an individual container’s publicAccess setting. This is the recommended remediation for CIS Microsoft Azure Foundations control “Ensure that ‘Allow Blob Anonymous Access’ is set to ‘Disabled’”.

To manage the public access level of an individual container instead, see the set-public-access action on the azure.storage-container resource.

example:

Disable anonymous blob access on all storage accounts that currently allow it, including accounts where allowBlobPublicAccess has never been set (Azure then allows anonymous access by default).

policies:
    - name: disable-blob-anonymous-access
      resource: azure.storage
      filters:
        - type: blob-public-access
          value: true
      actions:
        - type: set-blob-public-access
          value: False
properties:
  type:
    enum:
    - set-blob-public-access
  value:
    default: false
    type: boolean
required:
- type

set-firewall-rules

Set Firewall Rules Action

Updates Azure Storage Firewalls and Virtual Networks settings.

By default the firewall rules are appended with the new values. The append: False flag can be used to replace the old rules with the new ones on the resource.

You may also reference azure public cloud Service Tags by name in place of an IP address. Use ServiceTags. followed by the name of any group from https://www.microsoft.com/en-us/download/details.aspx?id=56519.

Note that there are firewall rule number limits and that you will likely need to use a regional block to fit within the limit. The limit for storage accounts is 200 rules.

- type: set-firewall-rules
      bypass-rules:
          - Logging
          - Metrics
      ip-rules:
          - 11.12.13.0/16
          - ServiceTags.AppService.CentralUS
example:

Find storage accounts without any firewall rules.

Configure default-action to Deny and then allow: - Azure Logging and Metrics services - Two specific IPs - Two subnets

policies:
    - name: add-storage-firewall
      resource: azure.storage

    filters:
        - type: value
          key: properties.networkAcls.ipRules
          value_type: size
          op: eq
          value: 0

    actions:
        - type: set-firewall-rules
          append: False
          bypass-rules:
              - Logging
              - Metrics
          ip-rules:
              - 11.12.13.0/16
              - 21.22.23.24
          virtual-network-rules:
              - <subnet_resource_id>
              - <subnet_resource_id>
properties:
  append:
    default: true
    type: boolean
  bypass-rules:
    items:
      enum:
      - AzureServices
      - Logging
      - Metrics
    type: array
  default-action:
    default: Deny
    enum:
    - Allow
    - Deny
  ip-rules:
    items:
      type: string
    type: array
  type:
    enum:
    - set-firewall-rules
  virtual-network-rules:
    items:
      type: string
    type: array
required:
- type

set-log-settings

Action that updates the logging settings on storage accounts. The action requires specifying an array of storage types that will be impacted by the action (blob, queue, table), retention (number in days; 0-365), and an array of log settings to enable (read, write, delete). The action will disable any settings not listed (e.g. by providing log: [write, delete], the action will disable read).

example:

Enable write and delete logging and disable read logging on blob storage, and retain logs for 5 days.

policies:
    - name: enable-blob-storage-logging
      resource: azure.storage
      actions:
        - type: set-log-settings
          storage-types: [blob]
          retention: 5
          log: [write, delete]
properties:
  log:
    items:
      enum:
      - read
      - write
      - delete
      type: string
    type: array
  retention:
    type: number
  storage-types:
    items:
      enum:
      - blob
      - queue
      - table
      type: string
    type: array
  type:
    enum:
    - set-log-settings
required:
- storage-types
- log
- retention
- type

update

Update scalar storage account settings.

example:

Default to Microsoft Entra authorization in the Azure portal for accounts where the setting is absent or false:

policies:
  - name: storage-default-to-entra-authorization
    resource: azure.storage
    filters:
      - or:
          - properties.defaultToOAuthAuthentication: absent
          - properties.defaultToOAuthAuthentication: false
    actions:
      - type: update
        properties:
          defaultToOAuthAuthentication: true

Property names follow the Azure REST API. Only supplied properties are updated. Setting allowedCopyScope to null clears that restriction. Changing the portal default does not disable Shared Key authorization.

Enabling isSftpEnabled requires hierarchical namespace to be enabled on the account and incurs SFTP charges while enabled.

properties:
  properties:
    additionalProperties: false
    minProperties: 1
    properties:
      accessTier:
        enum:
        - Hot
        - Cool
        - Cold
      allowBlobPublicAccess:
        type: boolean
      allowCrossTenantReplication:
        type: boolean
      allowSharedKeyAccess:
        type: boolean
      allowedCopyScope:
        enum:
        - AAD
        - PrivateLink
        - null
      defaultToOAuthAuthentication:
        type: boolean
      isLocalUserEnabled:
        type: boolean
      isSftpEnabled:
        type: boolean
      minimumTlsVersion:
        enum:
        - TLS1_0
        - TLS1_1
        - TLS1_2
      publicNetworkAccess:
        enum:
        - Enabled
        - Disabled
        - SecuredByPerimeter
      supportsHttpsTrafficOnly:
        type: boolean
    type: object
  type:
    enum:
    - update
required:
- properties
- type

Permissions - Microsoft.Storage/storageAccounts/write