Data Encryption
Outline of Encryption
There are two typical encryptions for cloud storages. The one is Client-Side Encryption (CSE) and another one is Server-Side Encryption (SSE). SSE needs to provide functionality from storage side. The ABCI Cloud Storage supports SSE.
Data is encrypted when it is stored in disks after uploading to ABCI Cloud Storage. Encrypted data is decrypted after retrieving data from the disk. Then the data will be downloaded. Thus, data are decrypted while transferring through the routes though, communications are encrypted by TLS with specifying https://s3.abci.ai
as an endpoint.
Amazon S3 provides SSE shown in the table below. ABCI Cloud Storage provides SSE functionality equivalent to SSE-S3. SSE-C and SSE-KMS are not available for ABCI Cloud Storage.
SSE Type | Description |
---|---|
SSE-S3 | Encryption with key managed on storage side. |
SSE-C | Encryption with key included to request by user. |
SSE-KMS | Encryption with key registered to Key Management Service. |
CSE encrypts and decrypts data by the user, and stores the encrypted data in ABCI cloud storage. CSE is available for ABCI cloud storage.
However, ABCI doesn't offer Key Management Service (KMS), so CSE using encryption keys registered to KMS cannot be used. For detailed information, see Protecting Data Using Client-Side Encryption.
CSE Type | Description |
---|---|
CSE-C | Encryption with key managed on client side by user. |
CSE-KMS | Encryption with key registered to Key Management Service |
Note
Since the start of operation, ABCI Cloud Storage has provided the create-encrypted-bucket command to create an SSE-enabled bucket, but the create-encrypted-bucket command is scheduled to be discontinued by August 2022. After August, please use the aws-cli command instead of the create-encrypted-bucket command. Buckets previously created with the create-encrypted-bucket command can still be used. You can delete buckets or refer configuration with the aws-cli command.
Enabling Default Bucket Encryption
You can set the default encryption behavior for a bucket. If you enable default encryption for a bucket, all objects will have encryption when stored in the bucket.
To enable default encryption for a bucket, run aws s3api put-bucket-encryption
. Note that the bucket must be created beforehand.
The following example shows how to enable default encryption for a bucket dataset-s0001
.
[username@es1 ~]$ aws --endpoint-url https://s3.abci.ai s3api put-bucket-encryption --bucket dataset-s0001 --server-side-encryption-configuration '{
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
}
}
]
}'
Note
The default encryption for a bucket is encrypted when storing the object on the server using the key stored on the storage side (decrypted when reading), it is not encrypted with information unique to the transmission request such as access key.
Note
Objects, which existed in the bucket before the bucket's default encryption was enabled, are not encrypted.
Confirming Default Bucket Encryption
To confirm if a bucket is activated default encryption, run aws s3api get-bucket-encryption
.
The following example screens show bucket dataset-s0001
with default encryption enabled. The bucket is activated default encryption because the string "SSEAlgorithm": "AES256"
is listed. Unless the string is listed, the bucket is without default encryption.
[username@es1 ~]$ aws --endpoint-url https://s3.abci.ai s3api get-bucket-encryption --bucket dataset-s0001
{
"ServerSideEncryptionConfiguration": {
"Rules": [
{
"ApplyServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
},
"BucketKeyEnabled": false
}
]
}
}
In addition, you can run aws s3api head-object
to confirm if object encryption is activated, along with the object metadata.
The following example confirm if encryption of cat.jpg
uploaded to the bucket dataset-s0001
is activated.
The object is uploaded with activated encryption because the string "ServerSideEncryption": "AES256"
is listed.
[username@es1 ~]$ aws --endpoint-url https://s3.abci.ai s3api head-object --bucket dataset-s0001 --key cat.jpg
{
"LastModified": "Tue, 30 Jul 2019 09:34:18 GMT",
"ContentLength": 1048576,
"ETag": "\"c951191fe4fa27c0d054a8456c6c20d1\"",
"ServerSideEncryption": "AES256",
"Metadata": {}
}