Home / Reference / StorageGRID

StorageGRID: NetApp's scale-out object storage platform

StorageGRID is NetApp's purpose-built object storage: a grid of nodes that pool capacity, erasure-code every object, and replicate it across sites — with an S3 API on top. It is a separate product from ONTAP, aimed at the workloads ONTAP's built-in S3 server was never designed for. This guide covers what it is, when it beats ONTAP S3, and the encryption story that trips up most newcomers (SSE-S3 vs SSE-KMS vs SSE-C).

What StorageGRID is

StorageGRID vs ONTAP S3

Both speak S3, but they solve different problems. The short version: ONTAP S3 is a feature of the NAS box you already own; StorageGRID is a separate object platform built for object workloads at scale. See the S3 on ONTAP guide for the ONTAP-side details.

DimensionONTAP S3StorageGRID
What it isObject-store server running inside ONTAPStandalone scale-out object platform
Data protectionRAID + snapshots/SnapMirrorErasure coding + cross-site replication (ILM)
ScaleCapacity of the cluster's aggregatesGrids scale to hundreds of nodes, multi-site
Geographic resilienceManual SnapMirror relationshipsAutomatic multi-site copies via ILM policies
Metadata searchMinimalBuilt-in object metadata search (Elasticsearch-based)
ComplianceSnapLock for NASObject lock (S3 retention), compliance modes
Best forBackup targets, NAS+S3 dual protocol on one boxArchive, Veeam/S3 backup at scale, cloud-tiering targets, multi-site object stores

You'll often see both in one shop: ONTAP for file data, StorageGRID as the object tier — e.g. as the FabricPool tiering target for ONTAP cold blocks (see the hardware lineup page for FabricPool's role).

S3 bucket encryption: SSE-S3 vs SSE-KMS vs SSE-C

This is where StorageGRID newcomers get confused — the three S3 encryption models behave very differently:

ModeWho holds the keysAPINotes
SSE-S3StorageGRID manages keys internallyAES256Zero setup; StorageGRID encrypts objects with its own key material. Default for most deployments.
SSE-KMSAn external key management server (KMIP) or StorageGRID-managedaws:kmsPer-bucket or per-object keys, key rotation, and a single policy point. External KMS adds a dependency — if the KMS is unreachable, operations needing keys fail.
SSE-CThe client supplies the key on every requestcustom headersStorageGRID never stores the key; the client must present it for reads and writes. Highest control, most operational friction.

The classic field problem: teams hit contradictory KBs about whether SSE-KMS with an external KMS is supported on their StorageGRID version/platform. The general model: StorageGRID supports external KMS servers for SSE-KMS via the Key Management Interoperability Protocol (KMIP) — the KMS server is added in Grid Manager, and SSE-KMS requests reference keys on that server. Support details are version- and deployment-specific, so confirm against the NetApp documentation for your release (docs.netapp.com → StorageGRID → S3 → S3 server-side encryption) and your product matrix before designing around it.

Setting up SSE-KMS with an external KMS

High-level flow (Grid Manager + AWS CLI; exact menu names vary by release):

  1. Deploy/reach a KMIP-compliant KMS (e.g. Thales KeySecure-class appliance) reachable from the grid on the KMIP port (5696 by default).
  2. In Grid Manager, register the KMS server under Configuration → Security → Key Management Servers: hostname/IP, port, and the server certificate. StorageGRID and the KMS must trust each other's certificates.
  3. Create/import the master keys and tenant keys you'll reference in SSE-KMS requests.
  4. Enable encryption on the tenant/bucket, then upload with aws:kms and a key id (below).
# Enable default encryption on a bucket (all new objects get SSE-KMS)
aws s3api put-bucket-encryption --endpoint-url https://s3.grid.example.com \
  --bucket my-bucket \
  --server-side-encryption-configuration '{
    "Rules": [{"ApplyServerSideEncryptionByDefault": {
      "SSEAlgorithm": "aws:kms",
      "KMSMasterKeyID": "tenant-key-id"}}]
  }'

# Check what a bucket is configured for
aws s3api get-bucket-encryption --endpoint-url https://s3.grid.example.com --bucket my-bucket

# Upload a single object with SSE-KMS (overrides bucket default)
aws s3api put-object --endpoint-url https://s3.grid.example.com \
  --bucket my-bucket --key report.pdf --body ./report.pdf \
  --server-side-encryption aws:kms --ssekms-key-id tenant-key-id

# SSE-C: client-supplied key on every request (key never stored)
aws s3api put-object --endpoint-url https://s3.grid.example.com \
  --bucket my-bucket --key secret.bin --body ./secret.bin \
  --sse-customer-algorithm AES256 --sse-customer-key "$(openssl rand -base64 32)"

Bucket keys: newer StorageGRID releases support S3 bucket keys, which let StorageGRID wrap object keys with a bucket-level key and dramatically reduce calls to the external KMS for high-volume buckets. Enable via the bucket-encryption configuration (BucketKeyEnabled) or the tenant UI.

Operational gotchas

Checking a grid's health

StorageGRID admin nodes expose a shell with a storagegrid command set for service-level checks (exact subcommands vary by release):

# From the admin node (SSH), check grid services / node status
storagegrid node list
storagegrid admin status

# Grid Manager REST API equivalent (HTTPS GET with a session token)
curl -sk -H "Accept: application/json" \
  https://grid-admin.example.com/api/v3/grid/nodes

The Grid Manager UI remains the authoritative health view: node status, ILM evaluation progress, and object-store health are all surfaced there. For S3-side errors, the S3 on ONTAP failure signatures still apply conceptually — most S3 clients surface the same HTTP codes.

Related S3 on ONTAP · Hardware lineup (FabricPool tiering) · Glossary (StorageGRID, ILM, erasure coding)