Policy

Chính sách Quản lý danh tính và quyền truy cập (IAM) chỉ định các chế độ kiểm soát quyền truy cập cho các tài nguyên trên Google Cloud.

Policy là một tập hợp bindings. binding liên kết một hoặc nhiều members (hoặc các thực thể chính) với một role. Chủ thể có thể là tài khoản người dùng, tài khoản dịch vụ, nhóm Google và miền (chẳng hạn như G Suite). role là danh sách các quyền được đặt tên; mỗi role có thể là một vai trò được xác định trước trong IAM hoặc một vai trò tuỳ chỉnh do người dùng tạo.

Đối với một số loại tài nguyên Google Cloud, binding cũng có thể chỉ định condition. Đây là một biểu thức logic chỉ cho phép truy cập vào một tài nguyên nếu biểu thức đó đánh giá là true. Một điều kiện có thể thêm các quy tắc ràng buộc dựa trên các thuộc tính của yêu cầu, tài nguyên hoặc cả hai. Để tìm hiểu những tài nguyên nào hỗ trợ các điều kiện trong chính sách IAM, hãy xem tài liệu về IAM.

Ví dụ về JSON:

    {
      "bindings": [
        {
          "role": "roles/resourcemanager.organizationAdmin",
          "members": [
            "user:mike@example.com",
            "group:admins@example.com",
            "domain:google.com",
            "serviceAccount:my-project-id@appspot.gserviceaccount.com"
          ]
        },
        {
          "role": "roles/resourcemanager.organizationViewer",
          "members": [
            "user:eve@example.com"
          ],
          "condition": {
            "title": "expirable access",
            "description": "Does not grant access after Sep 2020",
            "expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
          }
        }
      ],
      "etag": "BwWWja0YfJA=",
      "version": 3
    }

Ví dụ về tệp YAML:

    bindings:
    - members:
      - user:mike@example.com
      - group:admins@example.com
      - domain:google.com
      - serviceAccount:my-project-id@appspot.gserviceaccount.com
      role: roles/resourcemanager.organizationAdmin
    - members:
      - user:eve@example.com
      role: roles/resourcemanager.organizationViewer
      condition:
        title: expirable access
        description: Does not grant access after Sep 2020
        expression: request.time < timestamp('2020-10-01T00:00:00.000Z')
    etag: BwWWja0YfJA=
    version: 3

Để biết nội dung mô tả về IAM và các tính năng của IAM, hãy xem tài liệu về IAM.

Biểu diễn dưới dạng JSON
{
  "version": integer,
  "bindings": [
    {
      object (Binding)
    }
  ],
  "auditConfigs": [
    {
      object (AuditConfig)
    }
  ],
  "etag": string
}
Các trường
version

integer

Chỉ định định dạng của chính sách.

Các giá trị hợp lệ là 0, 13. Các yêu cầu chỉ định giá trị không hợp lệ sẽ bị từ chối.

Mọi thao tác ảnh hưởng đến liên kết vai trò có điều kiện phải chỉ định phiên bản 3. Yêu cầu này áp dụng cho các thao tác sau:

  • Nhận chính sách có liên kết vai trò có điều kiện
  • Thêm liên kết vai trò có điều kiện vào chính sách
  • Thay đổi liên kết vai trò có điều kiện trong chính sách
  • Xoá mọi mối liên kết vai trò, có hoặc không có điều kiện, khỏi chính sách có điều kiện

Lưu ý quan trọng: Nếu sử dụng Điều kiện IAM, bạn phải thêm trường etag mỗi khi gọi setIamPolicy. Nếu bạn bỏ qua trường này, IAM sẽ cho phép bạn ghi đè chính sách phiên bản 3 bằng chính sách phiên bản 1 và tất cả các điều kiện trong chính sách phiên bản 3 sẽ bị mất.

Nếu một chính sách không bao gồm bất kỳ điều kiện nào, thì các thao tác trên chính sách đó có thể chỉ định bất kỳ phiên bản hợp lệ nào hoặc để trống trường.

Để tìm hiểu những tài nguyên nào hỗ trợ các điều kiện trong chính sách IAM, hãy xem tài liệu về IAM.

bindings[]

object (Binding)

Liên kết danh sách members hoặc các thực thể chính với role. Bạn có thể chỉ định condition (không bắt buộc) để xác định cách thức và thời điểm áp dụng bindings. Mỗi bindings phải chứa ít nhất một nguyên tắc.

bindings trong Policy có thể tham chiếu đến tối đa 1.500 nguyên tắc; trong đó tối đa 250 nguyên tắc có thể là nhóm Google. Mỗi lần xuất hiện của một chủ thể đều được tính vào các hạn mức này. Ví dụ: nếu bindings cấp 50 vai trò khác nhau cho user:alice@example.com và không cấp cho bất kỳ đối tượng nào khác, thì bạn có thể thêm 1.450 đối tượng khác vào bindings trong Policy.

auditConfigs[]

object (AuditConfig)

Chỉ định cấu hình ghi nhật ký kiểm tra trên đám mây cho chính sách này.

etag

string (bytes format)

etag được dùng để kiểm soát đồng thời một cách lạc quan, nhằm giúp ngăn chặn việc các bản cập nhật đồng thời của một chính sách ghi đè lẫn nhau. Các hệ thống nên sử dụng etag trong chu kỳ đọc-sửa đổi-ghi để thực hiện việc cập nhật chính sách nhằm tránh tình trạng tương tranh: etag được trả về trong phản hồi cho getIamPolicy và các hệ thống dự kiến sẽ đặt etag đó vào yêu cầu cho setIamPolicy để đảm bảo rằng thay đổi của chúng sẽ được áp dụng cho cùng một phiên bản chính sách.

Lưu ý quan trọng: Nếu sử dụng Điều kiện IAM, bạn phải thêm trường etag mỗi khi gọi setIamPolicy. Nếu bạn bỏ qua trường này, IAM sẽ cho phép bạn ghi đè chính sách phiên bản 3 bằng chính sách phiên bản 1 và tất cả các điều kiện trong chính sách phiên bản 3 sẽ bị mất.

Chuỗi được mã hoá base64.

Liên kết

Liên kết members (hoặc các bên chính) với role.

Biểu diễn dưới dạng JSON
{
  "role": string,
  "members": [
    string
  ],
  "condition": {
    object (Expr)
  }
}
Các trường
role

string

Vai trò được chỉ định cho danh sách members hoặc các thực thể chính. Ví dụ: roles/viewer, roles/editor hoặc roles/owner.

Để biết thông tin tổng quan về các vai trò và quyền trong IAM, hãy xem tài liệu về IAM. Để biết danh sách các vai trò được xác định trước hiện có, hãy xem tại đây.

members[]

string

Chỉ định các thực thể chính yêu cầu quyền truy cập vào một tài nguyên trên Google Cloud. members có thể có các giá trị sau:

  • allUsers: Giá trị nhận dạng đặc biệt đại diện cho bất kỳ ai trên Internet, có hoặc không có Tài khoản Google.

  • allAuthenticatedUsers: Giá trị nhận dạng đặc biệt đại diện cho bất kỳ ai được xác thực bằng Tài khoản Google hoặc tài khoản dịch vụ. Không bao gồm những danh tính đến từ nhà cung cấp dịch vụ danh tính (IdP) bên ngoài thông qua liên kết danh tính.

  • user:{emailid}: Địa chỉ email đại diện cho một Tài khoản Google cụ thể. Ví dụ: alice@example.com .

  • serviceAccount:{emailid}: Địa chỉ email đại diện cho một tài khoản dịch vụ của Google. Ví dụ: my-other-app@appspot.gserviceaccount.com.

  • serviceAccount:{projectid}.svc.id.goog[{namespace}/{kubernetes-sa}]: Giá trị nhận dạng cho tài khoản dịch vụ Kubernetes. Ví dụ: my-project.svc.id.goog[my-namespace/my-kubernetes-sa].

  • group:{emailid}: Địa chỉ email đại diện cho một nhóm trên Google. Ví dụ: admins@example.com.

  • domain:{domain}: Miền G Suite (chính) đại diện cho tất cả người dùng của miền đó. Ví dụ: google.com hoặc example.com.
  • principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: Một danh tính trong nhóm danh tính của lực lượng lao động.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/group/{groupId}: Tất cả danh tính của lực lượng lao động trong một nhóm.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Tất cả danh tính của lực lượng lao động có một giá trị thuộc tính cụ thể.

  • principalSet://iam.googleapis.com/locations/global/workforcePools/{pool_id}/*: Tất cả danh tính trong nhóm danh tính của lực lượng lao động.

  • principal://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/subject/{subject_attribute_value}: Một danh tính trong nhóm danh tính tải.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/group/{groupId}: Nhóm nhóm nhận dạng khối lượng công việc.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/attribute.{attribute_name}/{attribute_value}: Tất cả danh tính trong một nhóm danh tính tải có một thuộc tính nhất định.

  • principalSet://iam.googleapis.com/projects/{projectNumber}/locations/global/workloadIdentityPools/{pool_id}/*: Tất cả danh tính trong nhóm danh tính tải.

  • deleted:user:{emailid}?uid={uniqueid}: Địa chỉ email (cùng với giá trị nhận dạng duy nhất) đại diện cho một người dùng đã bị xoá gần đây. Ví dụ: alice@example.com?uid=123456789012345678901. Nếu người dùng được khôi phục, giá trị này sẽ quay lại user:{emailid} và người dùng được khôi phục sẽ giữ lại vai trò trong liên kết.

  • deleted:serviceAccount:{emailid}?uid={uniqueid}: Địa chỉ email (cùng với giá trị nhận dạng duy nhất) đại diện cho một tài khoản dịch vụ đã bị xoá gần đây. Ví dụ: my-other-app@appspot.gserviceaccount.com?uid=123456789012345678901. Nếu bạn huỷ xoá tài khoản dịch vụ, giá trị này sẽ quay lại thành serviceAccount:{emailid} và tài khoản dịch vụ chưa bị xoá sẽ giữ lại vai trò trong liên kết.

  • deleted:group:{emailid}?uid={uniqueid}: Địa chỉ email (cùng với giá trị nhận dạng duy nhất) đại diện cho một nhóm Google đã bị xoá gần đây. Ví dụ: admins@example.com?uid=123456789012345678901. Nếu nhóm được khôi phục, giá trị này sẽ quay lại group:{emailid} và nhóm được khôi phục sẽ giữ lại vai trò trong liên kết.

  • deleted:principal://iam.googleapis.com/locations/global/workforcePools/{pool_id}/subject/{subject_attribute_value}: Xoá một danh tính trong nhóm danh tính của lực lượng lao động. Ví dụ: deleted:principal://iam.googleapis.com/locations/global/workforcePools/my-pool-id/subject/my-subject-attribute-value.

condition

object (Expr)

Điều kiện liên kết với liên kết này.

Nếu điều kiện đánh giá là true, thì liên kết này sẽ áp dụng cho yêu cầu hiện tại.

Nếu điều kiện đánh giá thành false, thì liên kết này sẽ không áp dụng cho yêu cầu hiện tại. Tuy nhiên, một liên kết vai trò khác có thể cấp cùng một vai trò cho một hoặc nhiều đối tượng chính trong liên kết này.

Để tìm hiểu những tài nguyên nào hỗ trợ các điều kiện trong chính sách IAM, hãy xem tài liệu về IAM.

Expr

Biểu thị một biểu thức văn bản theo cú pháp Ngôn ngữ diễn đạt thông thường (CEL). CEL là một ngôn ngữ biểu thức giống C. Cú pháp và ngữ nghĩa của CEL được ghi lại tại https://github.com/google/cel-spec.

Ví dụ (So sánh):

title: "Summary size limit"
description: "Determines if a summary is less than 100 chars"
expression: "document.summary.size() < 100"

Ví dụ (Bằng nhau):

title: "Requestor is owner"
description: "Determines if requestor is the document owner"
expression: "document.owner == request.auth.claims.email"

Ví dụ (Logic):

title: "Public documents"
description: "Determine whether the document should be publicly visible"
expression: "document.type != 'private' && document.type != 'internal'"

Ví dụ (Thao tác dữ liệu):

title: "Notification string"
description: "Create a notification string with a timestamp."
expression: "'New message received at ' + string(document.create_time)"

Các biến và hàm chính xác có thể được tham chiếu trong một biểu thức được xác định bởi dịch vụ đánh giá biểu thức đó. Hãy xem tài liệu về dịch vụ để biết thêm thông tin.

Biểu diễn dưới dạng JSON
{
  "expression": string,
  "title": string,
  "description": string,
  "location": string
}
Các trường
expression

string

Biểu diễn văn bản của một biểu thức theo cú pháp Ngôn ngữ biểu thức chung.

title

string

Không bắt buộc. Tiêu đề của biểu thức, tức là một chuỗi ngắn mô tả mục đích của biểu thức. Bạn có thể sử dụng tính năng này, ví dụ: trong các giao diện người dùng cho phép nhập biểu thức.

description

string

Không bắt buộc. Nội dung mô tả biểu thức. Đây là văn bản dài hơn mô tả biểu thức, ví dụ: khi di chuột qua biểu thức đó trong giao diện người dùng.

location

string

Không bắt buộc. Chuỗi cho biết vị trí của biểu thức để báo cáo lỗi, ví dụ: tên tệp và vị trí trong tệp.

AuditConfig

Chỉ định cấu hình kiểm tra cho một dịch vụ. Cấu hình xác định những loại quyền được ghi nhật ký và những danh tính (nếu có) được miễn ghi nhật ký. AuditConfig phải có một hoặc nhiều AuditLogConfig.

Nếu có AuditConfigs cho cả allServices và một dịch vụ cụ thể, thì tập hợp của hai AuditConfigs sẽ được dùng cho dịch vụ đó: các log_types được chỉ định trong mỗi AuditConfig sẽ được bật và exemptedMembers trong mỗi AuditLogConfig sẽ được miễn trừ.

Ví dụ về Chính sách có nhiều AuditConfigs:

{
  "auditConfigs": [
    {
      "service": "allServices",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ",
          "exemptedMembers": [
            "user:jose@example.com"
          ]
        },
        {
          "logType": "DATA_WRITE"
        },
        {
          "logType": "ADMIN_READ"
        }
      ]
    },
    {
      "service": "sampleservice.googleapis.com",
      "auditLogConfigs": [
        {
          "logType": "DATA_READ"
        },
        {
          "logType": "DATA_WRITE",
          "exemptedMembers": [
            "user:aliya@example.com"
          ]
        }
      ]
    }
  ]
}

Đối với sampleservice, chính sách này cho phép ghi nhật ký DATA_READ, DATA_WRITE và ADMIN_READ. Phương thức này cũng miễn trừ jose@example.com khỏi việc ghi nhật ký DATA_READ và aliya@example.com khỏi việc ghi nhật ký DATA_WRITE.

Biểu diễn dưới dạng JSON
{
  "service": string,
  "auditLogConfigs": [
    {
      object (AuditLogConfig)
    }
  ]
}
Các trường
service

string

Chỉ định một dịch vụ sẽ được bật tính năng ghi nhật ký kiểm tra. Ví dụ: storage.googleapis.com, cloudsql.googleapis.com. allServices là một giá trị đặc biệt bao gồm tất cả các dịch vụ.

auditLogConfigs[]

object (AuditLogConfig)

Cấu hình để ghi nhật ký cho từng loại quyền.

AuditLogConfig

Cung cấp cấu hình để ghi lại một loại quyền. Ví dụ:

{
  "auditLogConfigs": [
    {
      "logType": "DATA_READ",
      "exemptedMembers": [
        "user:jose@example.com"
      ]
    },
    {
      "logType": "DATA_WRITE"
    }
  ]
}

Thao tác này sẽ bật tính năng ghi nhật ký "DATA_READ" và "DATA_WRITE", đồng thời miễn trừ jose@example.com khỏi tính năng ghi nhật ký DATA_READ.

Biểu diễn dưới dạng JSON
{
  "logType": enum (LogType),
  "exemptedMembers": [
    string
  ]
}
Các trường
logType

enum (LogType)

Loại nhật ký mà cấu hình này bật.

exemptedMembers[]

string

Chỉ định những danh tính không gây ra hoạt động ghi nhật ký cho loại quyền này. Theo định dạng tương tự như Binding.members.

LogType

Danh sách các loại quyền hợp lệ mà bạn có thể định cấu hình tính năng ghi nhật ký. Hoạt động ghi của quản trị viên luôn được ghi lại và không thể định cấu hình.

Enum
LOG_TYPE_UNSPECIFIED Trường hợp mặc định. Không được như vậy.
ADMIN_READ Lượt đọc của quản trị viên. Ví dụ: CloudIAM getIamPolicy
DATA_WRITE Ghi dữ liệu. Ví dụ: Người dùng CloudSQL tạo
DATA_READ Đọc dữ liệu. Ví dụ: Danh sách người dùng CloudSQL