ข้อจำกัดของนโยบายองค์กรที่กำหนดเอง

หน้านี้จะแสดงวิธีใช้ข้อจำกัดที่กำหนดเองของบริการนโยบายองค์กร Google Cloud เพื่อจำกัดการดำเนินการบางอย่างในทรัพยากร Cloud Storage for Firebase ต่อไปนี้

  • firebasestorage.googleapis.com/DefaultBucket

ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายองค์กรได้ที่นโยบายองค์กรที่กำหนดเอง

เกี่ยวกับนโยบายและข้อจำกัดขององค์กร

บริการนโยบายองค์กรของ Google Cloud ช่วยให้คุณควบคุมทรัพยากรขององค์กรแบบเป็นโปรแกรมจากส่วนกลางได้ ในฐานะผู้ดูแลระบบนโยบายองค์กร คุณสามารถกำหนดนโยบายองค์กร ซึ่งเป็นชุดข้อจำกัดที่เรียกว่าข้อจำกัดที่ใช้กับทรัพยากร Google Cloud และทรัพยากรที่สืบทอดมาจากทรัพยากรเหล่านั้นในลำดับชั้นของทรัพยากร Google Cloud คุณสามารถบังคับใช้นโยบายขององค์กรที่ระดับองค์กร โฟลเดอร์ หรือโปรเจ็กต์

นโยบายองค์กรมีข้อจำกัดที่มีการจัดการในตัวสำหรับบริการต่างๆ ของ Google Cloud อย่างไรก็ตาม หากต้องการควบคุมช่องที่ถูกจำกัดในนโยบายขององค์กรอย่างละเอียดยิ่งขึ้นและปรับแต่งได้ คุณยังสามารถสร้างข้อจำกัดที่กำหนดเองและใช้ข้อจำกัดที่กำหนดเองเหล่านั้นในนโยบายขององค์กรได้ด้วย

การรับค่าของนโยบาย

โดยค่าเริ่มต้น นโยบายองค์กรจะรับค่ามาจากทรัพยากรย่อยของทรัพยากรที่คุณบังคับใช้นโยบาย ตัวอย่างเช่น หากคุณบังคับใช้นโยบายกับโฟลเดอร์ Google Cloud จะบังคับใช้นโยบายกับโปรเจ็กต์ทั้งหมดในโฟลเดอร์นั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการทำงานนี้และวิธีเปลี่ยนแปลงได้ที่กฎการประเมินลำดับชั้น

นอกจากนี้ เนื่องจาก Cloud Storage for Firebase จัดเก็บไฟล์ไว้ในที่เก็บข้อมูล Cloud Storage ที่สำคัญ นโยบายองค์กรหรือข้อจำกัดที่กำหนดเองที่บังคับใช้กับทรัพยากร Cloud Storage จึงมีผลกับที่เก็บข้อมูล Cloud Storage for Firebase ด้วย

ข้อดี

  • การรักษาความปลอดภัยและการกำกับดูแล: บังคับใช้การควบคุมองค์กรแบบรวมศูนย์สำหรับการจัดสรรบักเก็ต Cloud Storage เพื่อให้เป็นไปตามข้อกำหนดด้านถิ่นที่อยู่ของข้อมูลและแนวทางป้องกันการจัดการค่าใช้จ่าย
  • การควบคุมแอตทริบิวต์แบบละเอียด: จำกัดการสร้างที่เก็บข้อมูลเริ่มต้นตามแอตทริบิวต์ทรัพยากรที่เฉพาะเจาะจง เช่น storageClass หรือ location

ข้อจำกัด

ข้อจำกัดต่อไปนี้จะมีผลเมื่อใช้นโยบายองค์กรที่กำหนดเองกับ Cloud Storage for Firebase

  • ไม่มีการบังคับใช้ย้อนหลัง: ข้อจำกัดที่กำหนดเองที่บังคับใช้ใหม่จะไม่มีผลกับทรัพยากรที่มีอยู่ ระบบจะไม่ประเมินที่เก็บข้อมูลเริ่มต้นที่มีอยู่ เว้นแต่จะมีการอัปเดต หากต้องการระบุทรัพยากรที่มีอยู่ซึ่งอาจละเมิดข้อจำกัด คุณสามารถทดสอบนโยบายโดยใช้โหมดทดลองใช้
  • ข้อจำกัดการควบคุมการเข้าถึง: ข้อจำกัดที่กำหนดเองไม่สามารถจำกัดรายการควบคุมการเข้าถึง (ACL) หรือนโยบาย IAM ในที่เก็บข้อมูลได้

ก่อนเริ่มต้น

  1. ในคอนโซล Firebase ให้เลือกหรือสร้างโปรเจ็กต์ Firebase

    ตรวจสอบว่าโปรเจ็กต์เป็นส่วนหนึ่งขององค์กรและคุณทราบรหัสองค์กร

  2. หากต้องการตั้งค่าและบังคับใช้ข้อจำกัดที่กำหนดเองโดยใช้บรรทัดคำสั่ง ให้ติดตั้ง Google Cloud CLI (gcloud) คุณไม่สามารถจัดการนโยบายองค์กรที่กำหนดเองโดยใช้ Firebase CLI ได้

บทบาทที่จำเป็น

หากต้องการรับสิทธิ์ที่จำเป็นในการจัดการนโยบายองค์กรที่กำหนดเอง โปรดขอให้ผู้ดูแลระบบมอบบทบาท IAM ผู้ดูแลระบบนโยบายองค์กร (roles/orgpolicy.policyAdmin) ในองค์กรให้คุณ

แหล่งข้อมูลที่รองรับ Cloud Storage for Firebase รายการ

ตารางต่อไปนี้แสดงรายการทรัพยากร Cloud Storage for Firebase ที่คุณสามารถอ้างอิงในข้อจำกัดที่กำหนดเองได้ นอกจากนี้ คุณยังดูแหล่งข้อมูลที่รองรับของ Cloud Storage ได้ด้วย เนื่องจากข้อจำกัดที่กำหนดเองในแหล่งข้อมูลเหล่านั้นจะมีผลกับบักเก็ต Cloud Storage for Firebase ด้วย

ทรัพยากร ฟิลด์ที่รองรับ
firebasestorage.googleapis.com/DefaultBucket
  • resource.location
  • resource.storageClass

ตั้งค่าข้อจำกัดที่กำหนดเอง

ข้อจำกัดที่กำหนดเองจะกำหนดไว้ในไฟล์ YAML โดยทรัพยากร เมธอด เงื่อนไข และการดำเนินการที่รองรับโดยบริการที่คุณบังคับใช้นโยบายขององค์กร เงื่อนไขสำหรับข้อจำกัดที่กำหนดเองจะกำหนดโดยใช้ Common Expression Language (CEL) ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีสร้างเงื่อนไขในข้อจำกัดที่กำหนดเองโดยใช้ CEL ได้ที่ส่วน CEL ของการสร้างและจัดการข้อจำกัดที่กำหนดเอง

คอนโซล

หากต้องการสร้างข้อจำกัดที่กำหนดเอง ให้ทำดังนี้

  1. ในคอนโซล Google Cloud ให้ไปที่หน้านโยบายขององค์กร

    ไปที่นโยบายขององค์กร

  2. จากเครื่องมือเลือกโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการตั้งค่านโยบายขององค์กร
  3. คลิก ข้อจำกัดที่กำหนดเอง
  4. ในช่องชื่อที่แสดง ให้ป้อนชื่อที่มนุษย์อ่านได้สำหรับข้อจำกัด ชื่อนี้จะใช้ในข้อความแสดงข้อผิดพลาด และใช้เพื่อระบุและแก้ไขข้อบกพร่องได้ อย่าใช้ข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) หรือข้อมูลที่ละเอียดอ่อนในชื่อที่แสดง เนื่องจากชื่อนี้อาจปรากฏในข้อความแสดงข้อผิดพลาด ช่องนี้มีอักขระได้สูงสุด 200 ตัว
  5. ในช่องรหัสข้อจำกัด ให้ป้อนรหัสที่ต้องการสำหรับข้อจำกัดที่กำหนดเองใหม่ ข้อจำกัดที่กำหนดเองต้องมีเฉพาะตัวอักษร (รวมถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก) หรือตัวเลขเท่านั้น เช่น custom.restrictStorageClass ช่องนี้มีอักขระได้สูงสุด 70 ตัว โดยไม่นับคำนำหน้า (custom.) เช่น organizations/123456789/customConstraints/custom.restrictStorageClass อย่าใส่ PII หรือข้อมูลที่ละเอียดอ่อนในรหัสข้อจำกัด เนื่องจากอาจมีการเปิดเผยข้อมูลดังกล่าวในข้อความแสดงข้อผิดพลาด
  6. ในช่องคำอธิบาย ให้ป้อนคำอธิบายข้อจำกัดที่มนุษย์อ่านได้ ระบบจะใช้คำอธิบายนี้เป็นข้อความแสดงข้อผิดพลาดเมื่อมีการละเมิดนโยบาย ระบุรายละเอียดเกี่ยวกับสาเหตุที่เกิดการละเมิดนโยบายและวิธีแก้ไขการละเมิดนโยบาย อย่าใส่ PII หรือข้อมูลที่ละเอียดอ่อนในคำอธิบาย เนื่องจากอาจมีการเปิดเผยข้อมูลดังกล่าวในข้อความแสดงข้อผิดพลาด ช่องนี้มีอักขระได้สูงสุด 2,000 ตัว
  7. ในช่องประเภททรัพยากร ให้เลือกชื่อทรัพยากร REST ที่มีออบเจ็กต์และช่องที่ต้องการจำกัด เช่น firebasestorage.googleapis.com/DefaultBucket ทรัพยากรส่วนใหญ่รองรับข้อจำกัดที่กำหนดเองได้สูงสุด 20 รายการ หากพยายามสร้างข้อจำกัดที่กำหนดเองมากกว่านี้ การดำเนินการจะล้มเหลว
  8. ในส่วนวิธีการบังคับใช้ ให้เลือกว่าจะบังคับใช้ข้อจำกัดกับเมธอด REST CREATE หรือทั้งเมธอด CREATE และ UPDATE (หมายเหตุ: DefaultBucket รองรับเฉพาะ CREATE)
  9. หากต้องการกำหนดเงื่อนไข ให้คลิก แก้ไขเงื่อนไข
    1. ในแผงเพิ่มเงื่อนไข ให้สร้างเงื่อนไข CEL ที่อ้างอิงถึงทรัพยากรบริการที่รองรับ เช่น resource.storageClass == 'STANDARD' ช่องนี้มีอักขระได้สูงสุด 1,000 ตัว โปรดดูรายละเอียดเกี่ยวกับการใช้งาน CEL ที่หัวข้อ Common Expression Language
    2. คลิกบันทึก
  10. ในส่วนการดำเนินการ ให้เลือกว่าจะอนุญาตหรือปฏิเสธวิธีการที่ประเมินหากตรงตามเงื่อนไข

    การดำเนินการปฏิเสธหมายความว่าระบบจะบล็อกการดำเนินการเพื่อสร้างหรืออัปเดตทรัพยากรหากเงื่อนไขประเมินเป็น "จริง"

    การดำเนินการอนุญาตหมายความว่าการดำเนินการเพื่อสร้างหรืออัปเดตทรัพยากรจะได้รับอนุญาตก็ต่อเมื่อเงื่อนไขได้รับการประเมินว่าเป็นจริง ระบบจะบล็อกกรณีอื่นๆ ทั้งหมด ยกเว้นกรณีที่ระบุไว้อย่างชัดเจนในเงื่อนไข

  11. คลิกสร้างข้อจำกัด

gcloud

  1. หากต้องการสร้างข้อจำกัดที่กำหนดเอง ให้สร้างไฟล์ YAML โดยใช้รูปแบบต่อไปนี้
    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass
    resourceTypes: firebasestorage.googleapis.com/DefaultBucket
    methodTypes:
      -   CREATE
    condition: "resource.storageClass == 'STANDARD'"
    actionType: DENY
    displayName: Restrict Standard Storage Class
    description: Deny creating buckets with STANDARD storage class.
  2. หลังจากสร้างไฟล์ YAML สำหรับข้อจำกัดที่กำหนดเองใหม่แล้ว คุณต้องตั้งค่าไฟล์ดังกล่าวเพื่อให้พร้อมใช้งานสำหรับนโยบายขององค์กรในองค์กรของคุณ หากต้องการตั้งค่าข้อจำกัดที่กำหนดเอง ให้ใช้คำสั่ง gcloud org-policies set-custom-constraint ดังนี้
    gcloud org-policies set-custom-constraint CONSTRAINT_PATH

    แทนที่ CONSTRAINT_PATH ด้วยเส้นทางแบบเต็มไปยังไฟล์ข้อจำกัดที่กำหนดเอง เช่น /home/user/customconstraint.yaml

  3. หากต้องการยืนยันว่ามีข้อจำกัดที่กำหนดเองอยู่ ให้ใช้คำสั่ง gcloud org-policies list-custom-constraints ดังนี้
    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID

บังคับใช้นโยบายองค์กรที่กำหนดเอง

คุณสามารถบังคับใช้ข้อจำกัดได้โดยการสร้างนโยบายองค์กรที่อ้างอิงข้อจำกัดดังกล่าว แล้วใช้นโยบายองค์กรนั้นกับทรัพยากร Google Cloud

คอนโซล

  1. ในคอนโซล Google Cloud ให้ไปที่หน้านโยบายขององค์กร

    ไปที่นโยบายองค์กร

  2. จากเครื่องมือเลือกโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการตั้งค่านโยบายขององค์กร
  3. จากรายการในหน้านโยบายขององค์กร ให้เลือกข้อจำกัดเพื่อดูหน้ารายละเอียดนโยบายสำหรับข้อจำกัดนั้น
  4. หากต้องการกำหนดค่านโยบายองค์กรสำหรับทรัพยากรนี้ ให้คลิกจัดการนโยบาย
  5. ในหน้าแก้ไขนโยบาย ให้เลือกลบล้างนโยบายของระดับบน
  6. คลิกเพิ่มกฎ
  7. ในส่วนการบังคับใช้ ให้เลือกว่าจะบังคับใช้นโยบายองค์กรนี้หรือไม่
  8. หากต้องการบังคับใช้นโยบายองค์กรในโหมดทดลองเรียกใช้ ให้คลิกกำหนดนโยบายทดลองเรียกใช้ ดูข้อมูลเพิ่มเติมได้ที่ทดสอบนโยบายขององค์กร
  9. หลังจากยืนยันว่านโยบายขององค์กรในโหมดทดลองใช้ทำงานได้ตามที่ต้องการแล้ว ให้ตั้งค่านโยบายที่ใช้งานจริงโดยคลิกตั้งค่านโยบาย

gcloud

  1. หากต้องการสร้างนโยบายองค์กรที่มีกฎบูลีน ให้สร้างไฟล์ YAML ของนโยบายที่อ้างอิงข้อจำกัดดังนี้
    name: projects/PROJECT_ID/policies/custom.restrictStorageClass
    spec:
      rules:
      -   enforce: true
    dryRunSpec:
      rules:
      -   enforce: true
  2. หากต้องการบังคับใช้นโยบายขององค์กรในโหมดทดลองใช้ ให้เรียกใช้คำสั่งต่อไปนี้พร้อมกับแฟล็ก dryRunSpec
    gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
  3. หลังจากยืนยันว่านโยบายขององค์กรในโหมดทดลองใช้ทำงานได้ตามที่ต้องการแล้ว ให้ตั้งค่านโยบายที่ใช้งานอยู่ด้วยคำสั่ง org-policies set-policy และแฟล็ก spec ดังนี้
    gcloud org-policies set-policy POLICY_PATH --update-mask=spec

ทดสอบนโยบายองค์กรที่กำหนดเอง

ตัวอย่างต่อไปนี้จะสร้างข้อจำกัดและนโยบายที่กำหนดเองซึ่งกำหนดให้บักเก็ตเริ่มต้นที่สร้างขึ้นใหม่ทั้งหมดหลีกเลี่ยงการใช้คลาสพื้นที่เก็บข้อมูล STANDARD คุณสามารถทดสอบนโยบายได้โดยลองดำเนินการที่นโยบายควรป้องกัน

สร้างข้อจำกัด

  1. บันทึกไฟล์ต่อไปนี้เป็น constraint-restrict-storage-class.yaml

    name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass
    resourceTypes:
    -   firebasestorage.googleapis.com/DefaultBucket
    methodTypes:
    -   CREATE
    condition: "resource.storageClass == 'STANDARD'"
    actionType: DENY
    displayName: Restrict Standard Storage Class
    description: Deny creating buckets with STANDARD storage class.
    

    แทนที่ ORGANIZATION_ID ด้วยรหัสองค์กร

  2. ใช้ข้อจำกัดต่อไปนี้

    gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yaml
    
  3. ยืนยันว่ามีข้อจำกัดอยู่ โดยทำดังนี้

    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
    

    เอาต์พุตจะคล้ายกับตัวอย่างต่อไปนี้

    CUSTOM_CONSTRAINT            ACTION_TYPE   METHOD_TYPES   RESOURCE_TYPES                                 DISPLAY_NAME
    custom.restrictStorageClass  DENY          CREATE         firebasestorage.googleapis.com/DefaultBucket   Restrict Standard Storage Class
    ...
    

สร้างนโยบาย

  1. บันทึกไฟล์ต่อไปนี้เป็น policy-restrict-storage-class.yaml

    name: projects/PROJECT_ID/policies/custom.restrictStorageClass
    spec:
      rules:
      -   enforce: true
    

    แทนที่ PROJECT_ID ด้วยรหัสโปรเจ็กต์

  2. ใช้นโยบายโดยทำดังนี้

    gcloud org-policies set-policy ~/policy-restrict-storage-class.yaml
    
  3. ตรวจสอบว่ามีนโยบายอยู่โดยทำดังนี้

    gcloud org-policies list --project=PROJECT_ID
    

    เอาต์พุตจะคล้ายกับตัวอย่างต่อไปนี้

    CONSTRAINT                   LIST_POLICY    BOOLEAN_POLICY    ETAG
    custom.restrictStorageClass  -              SET               CIqktscGELiZn6cC-
    

หลังจากใช้นโยบายแล้ว ให้รอประมาณ 2 นาทีเพื่อให้ Google Cloud เริ่มบังคับใช้นโยบาย

ทดสอบนโยบาย

ลองสร้างที่เก็บข้อมูลเริ่มต้นโดยใช้ Cloud Storage for Firebase REST API โดยไม่ระบุคลาสพื้นที่เก็บข้อมูล (ซึ่งค่าเริ่มต้นคือ STANDARD)

PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)

curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"location": "US-EAST1"}'

คำขอไม่สำเร็จโดยมีข้อผิดพลาดคล้ายกับข้อความต่อไปนี้

FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
-   '@type': type.googleapis.com/google.rpc.ErrorInfo
  domain: iam.googleapis.com
  metadata:
    customConstraints: customConstraints/custom.restrictStorageClass
  reason: CUSTOM_ORG_POLICY_VIOLATION

ตัวอย่างนโยบายองค์กรที่กำหนดเองสำหรับกรณีการใช้งานทั่วไป

ตารางนี้แสดงตัวอย่างไวยากรณ์สำหรับข้อจำกัดที่กำหนดเองที่พบบ่อยบางรายการ

คำอธิบาย ไวยากรณ์ของข้อจำกัด
จำกัดการสร้างที่เก็บข้อมูลเริ่มต้นด้วยคลาสพื้นที่เก็บข้อมูลมาตรฐาน
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass
resourceTypes:
-   firebasestorage.googleapis.com/DefaultBucket
methodTypes:
-   CREATE
condition: "resource.storageClass == 'STANDARD'"
actionType: DENY
displayName: Restrict Standard Storage Class
description: Deny creating buckets with STANDARD storage class.
กำหนดให้สร้างที่เก็บข้อมูลเริ่มต้นในตำแหน่งที่เจาะจง
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation
resourceTypes:
-   firebasestorage.googleapis.com/DefaultBucket
methodTypes:
-   CREATE
condition: "resource.location != 'US-EAST1'"
actionType: DENY
displayName: Require US-EAST1 Location
description: Deny creating default buckets outside the US-EAST1 location.

ขั้นตอนถัดไป