Skip to content
This repository was archived by the owner on Mar 31, 2026. It is now read-only.

Commit da08329

Browse files
feat: add samples for bucket encryption enforcement config
Co-authored-by: nidhiii-27 <224584462+nidhiii-27@users.noreply.github.com>
1 parent 2a6e8b0 commit da08329

5 files changed

Lines changed: 209 additions & 0 deletions

samples/snippets/encryption_test.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
import storage_object_csek_to_cmek
2828
import storage_rotate_encryption_key
2929
import storage_upload_encrypted_file
30+
import storage_get_bucket_encryption_enforcement_config
31+
import storage_set_bucket_encryption_enforcement_config
32+
import storage_update_encryption_enforcement_config
33+
import storage_remove_all_bucket_encryption_enforcement_config
3034

3135
BUCKET = os.environ["CLOUD_STORAGE_BUCKET"]
3236
KMS_KEY = os.environ["MAIN_CLOUD_KMS_KEY"]
@@ -126,3 +130,50 @@ def test_object_csek_to_cmek(test_blob):
126130
)
127131

128132
assert cmek_blob.download_as_bytes(), test_blob_content
133+
134+
def test_bucket_encryption_enforcement_config(capsys):
135+
bucket_name = f"test_encryption_enforcement_{uuid.uuid4().hex}"
136+
137+
try:
138+
# Create
139+
storage_set_bucket_encryption_enforcement_config.set_bucket_encryption_enforcement_config(bucket_name)
140+
out, _ = capsys.readouterr()
141+
assert f"Created bucket {bucket_name} with Encryption Enforcement Config." in out
142+
143+
# Get
144+
storage_get_bucket_encryption_enforcement_config.get_bucket_encryption_enforcement_config(bucket_name)
145+
out, _ = capsys.readouterr()
146+
assert f"Encryption Enforcement Config for bucket {bucket_name}:" in out
147+
assert "Customer-managed encryption enforcement config restriction mode: NOT_RESTRICTED" in out
148+
assert "Customer-supplied encryption enforcement config restriction mode: FULLY_RESTRICTED" in out
149+
assert "Google-managed encryption enforcement config restriction mode: FULLY_RESTRICTED" in out
150+
151+
# Update
152+
storage_update_encryption_enforcement_config.update_encryption_enforcement_config(bucket_name)
153+
out, _ = capsys.readouterr()
154+
assert f"Encryption enforcement policy updated for bucket {bucket_name}." in out
155+
156+
# Get after update
157+
storage_get_bucket_encryption_enforcement_config.get_bucket_encryption_enforcement_config(bucket_name)
158+
out, _ = capsys.readouterr()
159+
assert "Customer-managed encryption enforcement config restriction mode: NOT_RESTRICTED" in out
160+
assert "Customer-supplied encryption enforcement config restriction mode: None" in out
161+
assert "Google-managed encryption enforcement config restriction mode: FULLY_RESTRICTED" in out
162+
163+
# Remove
164+
storage_remove_all_bucket_encryption_enforcement_config.remove_all_bucket_encryption_enforcement_config(bucket_name)
165+
out, _ = capsys.readouterr()
166+
assert f"Removed Encryption Enforcement Config from bucket {bucket_name}." in out
167+
168+
# Get after remove
169+
storage_get_bucket_encryption_enforcement_config.get_bucket_encryption_enforcement_config(bucket_name)
170+
out, _ = capsys.readouterr()
171+
assert "Customer-managed encryption enforcement config restriction mode: None" in out
172+
assert "Customer-supplied encryption enforcement config restriction mode: None" in out
173+
assert "Google-managed encryption enforcement config restriction mode: None" in out
174+
175+
finally:
176+
try:
177+
storage.Client().get_bucket(bucket_name).delete(force=True)
178+
except Exception:
179+
pass
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright 2024 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from google.cloud import storage
16+
17+
# [START storage_get_bucket_encryption_enforcement_config]
18+
def get_bucket_encryption_enforcement_config(bucket_name):
19+
"""Gets the bucket encryption enforcement configuration."""
20+
# The ID of your GCS bucket
21+
# bucket_name = "your-unique-bucket-name"
22+
23+
storage_client = storage.Client()
24+
bucket = storage_client.get_bucket(bucket_name)
25+
26+
print(f"Encryption Enforcement Config for bucket {bucket.name}:")
27+
28+
cmek_config = bucket.customer_managed_encryption_enforcement_config
29+
csek_config = bucket.customer_supplied_encryption_enforcement_config
30+
gmek_config = bucket.google_managed_encryption_enforcement_config
31+
32+
print(f"Customer-managed encryption enforcement config restriction mode: {cmek_config.restriction_mode if cmek_config else None}")
33+
print(f"Customer-supplied encryption enforcement config restriction mode: {csek_config.restriction_mode if csek_config else None}")
34+
print(f"Google-managed encryption enforcement config restriction mode: {gmek_config.restriction_mode if gmek_config else None}")
35+
36+
37+
# [END storage_get_bucket_encryption_enforcement_config]
38+
39+
if __name__ == "__main__":
40+
get_bucket_encryption_enforcement_config(bucket_name="your-unique-bucket-name")
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Copyright 2024 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from google.cloud import storage
16+
17+
# [START storage_remove_all_bucket_encryption_enforcement_config]
18+
def remove_all_bucket_encryption_enforcement_config(bucket_name):
19+
"""Removes all bucket encryption enforcement configuration."""
20+
# The ID of your GCS bucket
21+
# bucket_name = "your-unique-bucket-name"
22+
23+
storage_client = storage.Client()
24+
bucket = storage_client.get_bucket(bucket_name)
25+
26+
bucket.customer_managed_encryption_enforcement_config = None
27+
bucket.customer_supplied_encryption_enforcement_config = None
28+
bucket.google_managed_encryption_enforcement_config = None
29+
bucket.patch()
30+
31+
print(f"Removed Encryption Enforcement Config from bucket {bucket.name}.")
32+
33+
# [END storage_remove_all_bucket_encryption_enforcement_config]
34+
35+
if __name__ == "__main__":
36+
remove_all_bucket_encryption_enforcement_config(bucket_name="your-unique-bucket-name")
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Copyright 2024 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from google.cloud import storage
16+
17+
# [START storage_set_bucket_encryption_enforcement_config]
18+
def set_bucket_encryption_enforcement_config(bucket_name):
19+
"""Creates a bucket with encryption enforcement configuration."""
20+
# The ID of your GCS bucket
21+
# bucket_name = "your-unique-bucket-name"
22+
23+
storage_client = storage.Client()
24+
bucket = storage_client.bucket(bucket_name)
25+
26+
# Restriction mode can be "FULLY_RESTRICTED" or "NOT_RESTRICTED"
27+
from google.cloud.storage.bucket import EncryptionEnforcementConfig
28+
29+
bucket.customer_managed_encryption_enforcement_config = EncryptionEnforcementConfig(restriction_mode="NOT_RESTRICTED")
30+
bucket.customer_supplied_encryption_enforcement_config = EncryptionEnforcementConfig(restriction_mode="FULLY_RESTRICTED")
31+
bucket.google_managed_encryption_enforcement_config = EncryptionEnforcementConfig(restriction_mode="FULLY_RESTRICTED")
32+
33+
bucket.create()
34+
35+
print(f"Created bucket {bucket.name} with Encryption Enforcement Config.")
36+
37+
# [END storage_set_bucket_encryption_enforcement_config]
38+
39+
if __name__ == "__main__":
40+
set_bucket_encryption_enforcement_config(bucket_name="your-unique-bucket-name")
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Copyright 2024 Google LLC
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
from google.cloud import storage
16+
17+
# [START storage_update_encryption_enforcement_config]
18+
def update_encryption_enforcement_config(bucket_name):
19+
"""Updates the encryption enforcement policy for a bucket."""
20+
# The ID of your GCS bucket
21+
# bucket_name = "your-unique-bucket-name"
22+
23+
storage_client = storage.Client()
24+
bucket = storage_client.get_bucket(bucket_name)
25+
26+
# 1. Update a specific type (e.g., change GMEK to FULLY_RESTRICTED)
27+
from google.cloud.storage.bucket import EncryptionEnforcementConfig
28+
bucket.google_managed_encryption_enforcement_config = EncryptionEnforcementConfig(restriction_mode="FULLY_RESTRICTED")
29+
bucket.customer_managed_encryption_enforcement_config = EncryptionEnforcementConfig(restriction_mode="NOT_RESTRICTED")
30+
31+
# 2. Remove a specific type (e.g., remove CSEK enforcement)
32+
bucket.customer_supplied_encryption_enforcement_config = None
33+
34+
bucket.patch()
35+
36+
print(f"Encryption enforcement policy updated for bucket {bucket.name}.")
37+
print("GMEK is now fully restricted, CMEK is now not restricted, and CSEK enforcement has been removed.")
38+
39+
# [END storage_update_encryption_enforcement_config]
40+
41+
if __name__ == "__main__":
42+
update_encryption_enforcement_config(bucket_name="your-unique-bucket-name")

0 commit comments

Comments
 (0)