

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Contoh 3: Kontrol akses multi-penyewa dengan RBAC
<a name="avp-mt-abac-examples"></a>

Untuk menguraikan contoh RBAC sebelumnya, Anda dapat memperluas persyaratan Anda untuk memasukkan multi-tenancy SaaS, yang merupakan persyaratan umum untuk penyedia SaaS. Dalam solusi multi-penyewa, akses sumber daya selalu disediakan atas nama penyewa tertentu. Artinya, pengguna Tenant A tidak dapat melihat data Tenant B, bahkan jika data tersebut secara logis atau fisik ditempatkan dalam suatu sistem. Contoh berikut menggambarkan bagaimana Anda dapat menerapkan isolasi penyewa dengan menggunakan beberapa [penyimpanan kebijakan Izin Terverifikasi, dan bagaimana Anda dapat menggunakan peran pengguna untuk menentukan izin](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores.html) dalam penyewa. 

Menggunakan pola desain Toko Kebijakan Per Penyewa adalah praktik terbaik untuk mempertahankan isolasi penyewa sambil menerapkan kontrol akses dengan Izin Terverifikasi. Dalam skenario ini, permintaan pengguna Penyewa A dan Penyewa B diverifikasi terhadap penyimpanan kebijakan terpisah, `DATAMICROSERVICE_POLICYSTORE_A` dan`DATAMICROSERVICE_POLICYSTORE_B`, masing-masing. Untuk informasi selengkapnya tentang pertimbangan desain Izin Terverifikasi untuk aplikasi SaaS multi-penyewa, lihat [bagian pertimbangan desain multi-penyewa Izin Terverifikasi](avp-design-considerations.md).

![Contoh kontrol akses multi-tenant dengan RBAC, Izin Terverifikasi Amazon, dan Cedar](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/saas-multitenant-api-access-authorization/images/avp-example-3.png)


Kebijakan berikut berada di toko `DATAMICROSERVICE_POLICYSTORE_A` kebijakan. Ini memverifikasi bahwa kepala sekolah akan menjadi bagian dari kelompok `allAccessRole` tipe`Role`. Dalam hal ini, kepala sekolah akan diizinkan untuk melakukan `viewData` dan `updateData` tindakan pada semua sumber daya yang terkait dengan Penyewa A.

```
permit (
    principal in MultitenantApp::Role::"allAccessRole",
    action in [
        MultitenantApp::Action::"viewData",
        MultitenantApp::Action::"updateData"
    ],
    resource
);
```

Kebijakan berikut berada di toko `DATAMICROSERVICE_POLICYSTORE_B` kebijakan. Kebijakan pertama memverifikasi bahwa prinsipal adalah bagian dari `updateDataRole` kelompok tipe`Role`. Dengan asumsi demikian, ia memberikan izin kepada kepala sekolah untuk melakukan `updateData` tindakan pada sumber daya yang terkait dengan Penyewa B.

```
permit (
    principal in MultitenantApp::Role::"updateDataRole",
    action == MultitenantApp::Action::"updateData",
    resource
);
```

Kebijakan kedua ini mengamanatkan bahwa kepala sekolah yang merupakan bagian dari `viewDataRole` kelompok tipe `Role` harus diizinkan untuk melakukan `viewData` tindakan terhadap sumber daya yang terkait dengan Penyewa B.

```
permit (
    principal in MultitenantApp::Role::"viewDataRole",
    action == MultitenantApp::Action::"viewData",
    resource
);
```

Permintaan otorisasi yang dibuat dari Penyewa A perlu dikirim ke toko `DATAMICROSERVICE_POLICYSTORE_A` kebijakan dan diverifikasi oleh kebijakan milik toko tersebut. Dalam hal ini, ini diverifikasi oleh kebijakan pertama yang dibahas sebelumnya sebagai bagian dari contoh ini. Dalam permintaan otorisasi ini, prinsipal tipe `User` dengan nilai `Alice` meminta untuk melakukan tindakan. `viewData` Kepala sekolah termasuk dalam kelompok `allAccessRole` tipe`Role`. Alice sedang mencoba untuk melakukan `viewData` tindakan pada `SampleData` sumber daya. Karena Alice memiliki `allAccessRole` peran, evaluasi ini menghasilkan `ALLOW` keputusan.

```
{
  "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A",
  "principal": {
      "entityType": "MultitenantApp::User",
      "entityId": "Alice"
  },
  "action": {
      "actionType": "MultitenantApp::Action",
      "actionId": "viewData"
  },
  "resource": {
      "entityType": "MultitenantApp::Data",
      "entityId": "SampleData"
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
            "entityType": "MultitenantApp::User",
            "entityId": "Alice"
        },
        "attributes": {},
        "parents": [
            {
                "entityType": "MultitenantApp::Role",
                "entityId": "allAccessRole"
            }
        ]
      },
      {
        "identifier": {
            "entityType": "MultitenantApp::Data",
            "entityId": "SampleData"
        },
        "attributes": {},
        "parents": []
      }
    ]
  }
}
```

Jika, sebaliknya, Anda melihat permintaan yang dibuat dari Penyewa B oleh`User Bob`, Anda akan melihat sesuatu seperti permintaan otorisasi berikut. Permintaan dikirim ke toko `DATAMICROSERVICE_POLICYSTORE_B` kebijakan karena berasal dari Penyewa B. Dalam permintaan ini, kepala sekolah `Bob` ingin melakukan tindakan `updateData` pada sumber daya. `SampleData` Namun, `Bob` bukan bagian dari grup yang memiliki akses ke tindakan `updateData` pada sumber daya itu. Oleh karena itu, permintaan menghasilkan `DENY` keputusan.

```
{
  "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_B",
  "principal": {
      "entityType": "MultitenantApp::User",
      "entityId": "Bob"
  },
  "action": {
      "actionType": "MultitenantApp::Action",
      "actionId": "updateData"
  },
  "resource": {
      "entityType": "MultitenantApp::Data",
      "entityId": "SampleData"
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
            "entityType": "MultitenantApp::User",
            "entityId": "Bob"
        },
        "attributes": {},
        "parents": [
            {
                "entityType": "MultitenantApp::Role",
                "entityId": "viewDataRole"
            }
        ]
      },
      {
        "identifier": {
            "entityType": "MultitenantApp::Data",
            "entityId": "SampleData"
        },
        "attributes": {},
        "parents": []
      }
    ]
  }
}
```

Dalam contoh ketiga ini, `User Alice ` cobalah untuk melakukan `viewData` tindakan pada sumber daya`SampleData`. Permintaan ini diarahkan ke toko `DATAMICROSERVICE_POLICYSTORE_A` kebijakan karena kepala sekolah `Alice` milik Penyewa A. `Alice` adalah bagian `allAccessRole` dari kelompok tipe`Role`, yang memungkinkannya untuk melakukan `viewData` tindakan pada sumber daya. Dengan demikian, permintaan menghasilkan `ALLOW` keputusan.

```
{
  "policyStoreId": "DATAMICROSERVICE_POLICYSTORE_A",
  "principal": {
      "entityType": "MultitenantApp::User",
      "entityId": "Alice"
  },
  "action": {
      "actionType": "MultitenantApp::Action",
      "actionId": "viewData"
  },
  "resource": {
      "entityType": "MultitenantApp::Data",
      "entityId": "SampleData"
  },
  "entities": {
    "entityList": [
      {
        "identifier": {
            "entityType": "MultitenantApp::User",
            "entityId": "Alice"
        },
        "attributes": {},
        "parents": [
            {
                "entityType": "MultitenantApp::Role",
                "entityId": "allAccessRole"
            }
        ]
      },
      {
        "identifier": {
            "entityType": "MultitenantApp::Data",
            "entityId": "SampleData"
        },
        "attributes": {},
        "parents": []
      }
    ]
  }
}
```