Các quy tắc ràng buộc tuỳ chỉnh của chính sách tổ chức

Trang này hướng dẫn bạn cách sử dụng các quy tắc ràng buộc tuỳ chỉnh của Dịch vụ chính sách tổ chức Google Cloud để hạn chế một số thao tác cụ thể đối với các tài nguyên Cloud Storage for Firebase sau:

  • firebasestorage.googleapis.com/DefaultBucket

Để tìm hiểu thêm về Chính sách của tổ chức, hãy xem bài viết Chính sách tuỳ chỉnh của tổ chức.

Giới thiệu về chính sách và quy tắc ràng buộc của tổ chức

Dịch vụ chính sách tổ chức của Google Cloud cung cấp cho bạn quyền kiểm soát tập trung và có lập trình đối với các tài nguyên của tổ chức. Là quản trị viên chính sách tổ chức, bạn có thể xác định một chính sách tổ chức, tức là một tập hợp các quy định hạn chế (gọi là ràng buộc) áp dụng cho các tài nguyên Google Cloud và tài nguyên con của các tài nguyên đó trong hệ thống phân cấp tài nguyên Google Cloud. Bạn có thể thực thi chính sách của tổ chức ở cấp tổ chức, thư mục hoặc dự án.

Chính sách tổ chức cung cấp các quy tắc ràng buộc được quản lý tích hợp sẵn cho nhiều dịch vụ của Google Cloud. Tuy nhiên, nếu muốn có quyền kiểm soát chi tiết hơn, có thể tuỳ chỉnh đối với các trường cụ thể bị hạn chế trong chính sách của tổ chức, bạn cũng có thể tạo các quy tắc ràng buộc tuỳ chỉnh và sử dụng các quy tắc ràng buộc tuỳ chỉnh đó trong chính sách của tổ chức.

Kế thừa chính sách

Theo mặc định, các chính sách tổ chức được kế thừa bởi các tài nguyên con của tài nguyên mà bạn thực thi chính sách. Ví dụ: nếu bạn thực thi một chính sách trên một thư mục, Google Cloud sẽ thực thi chính sách đó trên tất cả dự án trong thư mục. Để tìm hiểu thêm về hành vi này và cách thay đổi, hãy tham khảo Quy tắc đánh giá hệ phân cấp.

Ngoài ra, vì Cloud Storage for Firebase lưu trữ tệp trong các bộ chứa Cloud Storage cơ bản, nên mọi chính sách của tổ chức hoặc quy tắc ràng buộc tuỳ chỉnh được thực thi trên tài nguyên Cloud Storage cũng áp dụng cho các bộ chứa Cloud Storage for Firebase của bạn.

Lợi ích

  • Bảo mật và quản trị: Thực thi quyền kiểm soát tập trung của tổ chức đối với việc cấp bộ chứa Cloud Storage để đảm bảo tuân thủ các biện pháp bảo vệ về nơi lưu trữ dữ liệu và quản lý chi phí.
  • Kiểm soát thuộc tính chi tiết: Hạn chế việc tạo bộ chứa mặc định dựa trên các thuộc tính tài nguyên cụ thể như storageClass hoặc location.

Hạn chế

Các quy định hạn chế sau đây sẽ được áp dụng khi bạn sử dụng chính sách tổ chức tuỳ chỉnh với Cloud Storage for Firebase:

  • Không thực thi có hiệu lực trở về trước: Các quy tắc ràng buộc tuỳ chỉnh mới được thực thi sẽ không áp dụng cho các tài nguyên hiện có. Các bộ chứa mặc định hiện có sẽ không được đánh giá trừ phi được cập nhật. Để xác định những tài nguyên hiện có có thể vi phạm một quy tắc ràng buộc, bạn có thể kiểm thử chính sách bằng chế độ chạy thử.
  • Các quy định hạn chế về kiểm soát quyền truy cập: Các quy tắc ràng buộc tuỳ chỉnh không thể hạn chế danh sách kiểm soát quyền truy cập (ACL) hoặc chính sách IAM đối với bộ chứa.

Trước khi bắt đầu

  1. Trong bảng điều khiển của Firebase, hãy chọn hoặc tạo một dự án Firebase.

    Đảm bảo rằng dự án của bạn thuộc về một tổ chức và bạn biết mã nhận dạng tổ chức của mình.

  2. Để thiết lập và thực thi các quy tắc ràng buộc tuỳ chỉnh bằng dòng lệnh, hãy cài đặt Google Cloud CLI (gcloud). Bạn không thể quản lý các chính sách tuỳ chỉnh của tổ chức bằng Giao diện dòng lệnh (CLI) của Firebase.

Vai trò bắt buộc

Để có các quyền cần thiết nhằm quản lý chính sách tuỳ chỉnh của tổ chức, hãy yêu cầu quản trị viên cấp cho bạn vai trò Quản trị viên chính sách tổ chức (roles/orgpolicy.policyAdmin) trong IAM đối với tổ chức.

Cloud Storage for Firebase tài nguyên được hỗ trợ

Bảng sau đây liệt kê các tài nguyên Cloud Storage for Firebase mà bạn có thể tham chiếu trong các quy tắc ràng buộc tuỳ chỉnh. Bạn cũng có thể tham khảo các tài nguyên được hỗ trợ Cloud Storage, vì các quy tắc ràng buộc tuỳ chỉnh đối với những tài nguyên đó cũng áp dụng cho các bộ chứa Cloud Storage for Firebase.

Tài nguyên Các trường được hỗ trợ
firebasestorage.googleapis.com/DefaultBucket
  • resource.location
  • resource.storageClass

Thiết lập quy tắc ràng buộc tuỳ chỉnh

Một quy tắc ràng buộc tuỳ chỉnh được xác định trong tệp YAML theo các tài nguyên, phương thức, điều kiện và hành động được dịch vụ hỗ trợ, trong đó bạn đang thực thi chính sách của tổ chức. Điều kiện cho các quy tắc ràng buộc tuỳ chỉnh được xác định bằng Ngôn ngữ biểu thức chung (CEL). Để biết thêm thông tin về cách tạo điều kiện trong các quy tắc ràng buộc tuỳ chỉnh bằng CEL, hãy xem phần CEL trong bài viết Tạo và quản lý các quy tắc ràng buộc tuỳ chỉnh.

Bảng điều khiển

Để tạo quy tắc ràng buộc tuỳ chỉnh, hãy làm như sau:

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Chính sách của tổ chức.

    Chuyển đến trang Chính sách của tổ chức

  2. Trong bộ chọn dự án, hãy chọn dự án mà bạn muốn đặt chính sách của tổ chức.
  3. Nhấp vào Ràng buộc tuỳ chỉnh.
  4. Trong hộp Tên hiển thị, hãy nhập tên con người có thể đọc được cho quy tắc ràng buộc. Tên này được dùng trong thông báo lỗi và có thể dùng để nhận dạng và gỡ lỗi. Đừng sử dụng thông tin nhận dạng cá nhân (PII) hoặc dữ liệu nhạy cảm trong tên hiển thị vì tên này có thể xuất hiện trong thông báo lỗi. Trường này có thể chứa tối đa 200 ký tự.
  5. Trong hộp Mã quy tắc ràng buộc, hãy nhập mã bạn muốn cho quy tắc ràng buộc tuỳ chỉnh mới. Một quy tắc ràng buộc tuỳ chỉnh chỉ có thể chứa chữ cái (bao gồm cả chữ hoa và chữ thường) hoặc số, ví dụ: custom.restrictStorageClass. Trường này có thể chứa tối đa 70 ký tự, không tính tiền tố (custom.), ví dụ: organizations/123456789/customConstraints/custom.restrictStorageClass. Đừng đưa thông tin nhận dạng cá nhân (PII) hoặc dữ liệu nhạy cảm vào mã ràng buộc vì thông tin đó có thể xuất hiện trong thông báo lỗi.
  6. Trong hộp Description (Mô tả), hãy nhập nội dung mô tả con người có thể đọc được về quy tắc ràng buộc. Nội dung mô tả này được dùng làm thông báo lỗi khi chính sách bị vi phạm. Cung cấp thông tin chi tiết về lý do xảy ra lỗi vi phạm chính sách và cách giải quyết lỗi vi phạm chính sách. Đừng đưa thông tin nhận dạng cá nhân (PII) hoặc dữ liệu nhạy cảm vào nội dung mô tả, vì thông tin đó có thể xuất hiện trong thông báo lỗi. Trường này có thể chứa tối đa 2.000 ký tự.
  7. Trong hộp Resource type (Loại tài nguyên), hãy chọn tên của tài nguyên REST chứa đối tượng và trường mà bạn muốn hạn chế, ví dụ: firebasestorage.googleapis.com/DefaultBucket. Hầu hết các loại tài nguyên đều hỗ trợ tối đa 20 quy tắc ràng buộc tuỳ chỉnh. Nếu bạn cố gắng tạo thêm các quy tắc ràng buộc tuỳ chỉnh, thao tác này sẽ không thành công.
  8. Trong phần Phương thức thực thi, hãy chọn xem bạn muốn thực thi quy tắc ràng buộc đối với phương thức REST CREATE hay cả phương thức CREATE và UPDATE. (Lưu ý: DefaultBucket chỉ hỗ trợ CREATE).
  9. Để xác định một điều kiện, hãy nhấp vào biểu tượng Chỉnh sửa điều kiện.
    1. Trong bảng điều khiển Thêm điều kiện, hãy tạo một điều kiện CEL tham chiếu đến tài nguyên dịch vụ được hỗ trợ, ví dụ: resource.storageClass == 'STANDARD'. Trường này có thể chứa tối đa 1.000 ký tự. Để biết thông tin chi tiết về cách sử dụng CEL, hãy xem bài viết Ngôn ngữ biểu thức chung.
    2. Nhấp vào Lưu.
  10. Trong mục Hành động, hãy chọn cho phép hoặc từ chối phương thức được đánh giá nếu điều kiện được đáp ứng.

    Hành động từ chối có nghĩa là thao tác tạo hoặc cập nhật tài nguyên sẽ bị chặn nếu điều kiện được đánh giá là đúng.

    Hành động cho phép có nghĩa là thao tác tạo hoặc cập nhật tài nguyên chỉ được cho phép nếu điều kiện được đánh giá là đúng. Mọi trường hợp khác ngoại trừ những trường hợp được liệt kê rõ ràng trong điều kiện đều bị chặn.

  11. Nhấp vào Create constraint (Tạo quy tắc ràng buộc).

gcloud

  1. Để tạo một quy tắc ràng buộc tuỳ chỉnh, hãy tạo một tệp YAML theo định dạng sau:
    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. Sau khi tạo tệp YAML cho một quy tắc ràng buộc tuỳ chỉnh mới, bạn phải thiết lập tệp đó để có thể sử dụng cho các chính sách của tổ chức trong tổ chức của bạn. Để thiết lập một quy tắc ràng buộc tuỳ chỉnh, hãy dùng lệnh gcloud org-policies set-custom-constraint:
    gcloud org-policies set-custom-constraint CONSTRAINT_PATH

    Thay thế CONSTRAINT_PATH bằng đường dẫn đầy đủ đến tệp quy tắc ràng buộc tuỳ chỉnh. Ví dụ: /home/user/customconstraint.yaml.

  3. Để xác minh rằng quy tắc ràng buộc tuỳ chỉnh tồn tại, hãy sử dụng lệnh gcloud org-policies list-custom-constraints:
    gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID

Thực thi chính sách tổ chức tuỳ chỉnh

Bạn có thể thực thi một quy tắc ràng buộc bằng cách tạo một chính sách tổ chức tham chiếu đến quy tắc ràng buộc đó, rồi áp dụng chính sách tổ chức đó cho một tài nguyên Google Cloud.

Bảng điều khiển

  1. Trong bảng điều khiển Google Cloud, hãy chuyển đến trang Chính sách của tổ chức.

    Chuyển đến trang Chính sách của tổ chức

  2. Trong bộ chọn dự án, hãy chọn dự án mà bạn muốn đặt chính sách của tổ chức.
  3. Trong danh sách trên trang Chính sách của tổ chức, hãy chọn quy tắc ràng buộc để xem trang Chi tiết chính sách cho quy tắc ràng buộc đó.
  4. Để định cấu hình chính sách của tổ chức cho tài nguyên này, hãy nhấp vào Quản lý chính sách.
  5. Trên trang Chỉnh sửa chính sách, hãy chọn Ghi đè chính sách của thư mục mẹ.
  6. Nhấp vào Thêm quy tắc.
  7. Trong phần Thực thi, hãy chọn xem chính sách tổ chức này có được thực thi hay không.
  8. Để thực thi chính sách tổ chức ở chế độ chạy thử nghiệm, hãy nhấp vào Thiết lập chính sách chạy thử nghiệm. Để biết thêm thông tin, hãy xem bài viết Kiểm thử chính sách của tổ chức.
  9. Sau khi bạn xác minh rằng chính sách của tổ chức ở chế độ chạy thử hoạt động như dự kiến, hãy đặt chính sách thực tế bằng cách nhấp vào Đặt chính sách.

gcloud

  1. Để tạo chính sách tổ chức có quy tắc boolean, hãy tạo một tệp YAML chính sách tham chiếu đến quy tắc ràng buộc:
    name: projects/PROJECT_ID/policies/custom.restrictStorageClass
    spec:
      rules:
      -   enforce: true
    dryRunSpec:
      rules:
      -   enforce: true
  2. Để thực thi chính sách của tổ chức ở chế độ chạy thử, hãy chạy lệnh sau bằng cờ dryRunSpec:
    gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
  3. Sau khi bạn xác minh rằng chính sách của tổ chức ở chế độ chạy thử hoạt động như dự kiến, hãy đặt chính sách đang hoạt động bằng lệnh org-policies set-policy và cờ spec:
    gcloud org-policies set-policy POLICY_PATH --update-mask=spec

Kiểm thử chính sách tổ chức tuỳ chỉnh

Ví dụ sau đây tạo một quy tắc ràng buộc và chính sách tuỳ chỉnh yêu cầu tất cả các bộ chứa mặc định mới tạo không được sử dụng lớp lưu trữ STANDARD. Bạn có thể kiểm tra chính sách bằng cách thử thực hiện một hành động mà chính sách đó sẽ ngăn chặn.

Tạo quy tắc ràng buộc

  1. Lưu tệp sau dưới dạng 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.
    

    Thay thế ORGANIZATION_ID bằng mã tổ chức của bạn.

  2. Áp dụng quy tắc ràng buộc:

    gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yaml
    
  3. Xác minh rằng quy tắc ràng buộc tồn tại:

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

    Kết quả sẽ tương tự như sau:

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

Tạo chính sách

  1. Lưu tệp sau dưới dạng policy-restrict-storage-class.yaml:

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

    Thay thế PROJECT_ID bằng mã dự án của bạn.

  2. Áp dụng chính sách:

    gcloud org-policies set-policy ~/policy-restrict-storage-class.yaml
    
  3. Xác minh rằng chính sách này tồn tại:

    gcloud org-policies list --project=PROJECT_ID
    

    Kết quả sẽ tương tự như sau:

    CONSTRAINT                   LIST_POLICY    BOOLEAN_POLICY    ETAG
    custom.restrictStorageClass  -              SET               CIqktscGELiZn6cC-
    

Sau khi bạn áp dụng chính sách, hãy đợi khoảng hai phút để Google Cloud bắt đầu thực thi chính sách.

Kiểm thử chính sách

Hãy thử tạo một bộ chứa mặc định bằng API REST Cloud Storage for Firebase mà không chỉ định lớp lưu trữ (mặc định là 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"}'

Yêu cầu không thành công và có lỗi tương tự như sau:

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

Ví dụ về chính sách tổ chức tuỳ chỉnh cho các trường hợp sử dụng phổ biến

Bảng này cung cấp các ví dụ về cú pháp cho một số quy tắc ràng buộc tuỳ chỉnh phổ biến.

Mô tả Cú pháp ràng buộc
Hạn chế tạo bộ chứa mặc định có lớp lưu trữ STANDARD
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.
Yêu cầu tạo bộ chứa mặc định ở một vị trí cụ thể
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.

Bước tiếp theo