Aracılığıyla paylaş


NoSQL için Azure Cosmos DB ile denetim düzlemi rol tabanlı erişim denetimini kullanma

UYGULANANLAR: NoSQL

Dağıtım kılavuzu sırasındaki geçerli konumun ('Rol tabanlı erişim denetimi') diyagramı.

Şu konumlar da dahil olmak üzere dağıtım kılavuzu dizisinin şeması: Genel Bakış, Kavramlar, Hazırlama, Rol tabanlı erişim denetimi, Ağ ve Başvuru. 'Rol tabanlı erişim denetimi' konumu şu anda vurgulanmış durumda.

Bu makalede, NoSQL için Azure Cosmos DB hesabını ve kaynaklarını yönetmek üzere kimlik erişimi verme adımları açıklanmaktadır.

Önemli

Bu makaledeki adımlar yalnızca hesabın hiyerarşisindeki tüm kaynakların hesabında işlem gerçekleştirmek için denetim düzlemi erişimini kapsar. Öğeleri yönetmeyi ve veri düzlemi için sorgu yürütmeyi öğrenmek için bkz . Veri düzlemine rol tabanlı erişim verme.

Önkoşullar

  • Etkin aboneliği olan bir Azure hesabı. Ücretsiz hesap oluşturun.
  • Mevcut bir Azure Cosmos DB hesabı.
  • Microsoft Entra Id'de bir veya daha fazla mevcut kimlik.
  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

Rol tanımını hazırlama

İlk olarak, Azure Cosmos DB'deki hesap kaynaklarını yönetme erişimi vermek için listesini actions içeren bir rol tanımı hazırlamanız gerekir.

kullanarak Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listeleyin az role definition list. Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çıkış, özelliğindeki rol tanımının benzersiz tanımlayıcısını id içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

az role definition list \
    --name "Cosmos DB Operator"
[
  {
    "assignableScopes": [
      "/"
    ],
    "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
    "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
    "permissions": [
      {
        "actions": [
          "Microsoft.DocumentDb/databaseAccounts/*",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/deployments/*",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
          "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
          "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Cosmos DB Operator",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
  }
]

Not

Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Ancak tanımlayıcı (230815da-be43-4aae-9cb4-875f7bd000aa) Azure'daki tüm rol tanımlarında genel olarak benzersizdir.

  1. Azure portalında (https://portal.azure.com ) oturum açın.

  2. Genel arama çubuğuna Kaynak grubu girin.

    Azure portalındaki genel arama çubuğunun ekran görüntüsü.

  3. Hizmetler'de Kaynak grupları'ı seçin.

    Arama menüsünde seçilen 'Kaynak grupları' seçeneğinin ekran görüntüsü.

  4. Kaynak grupları bölmesinde mevcut kaynak grubunuzu seçin.

    Abonelik için kaynak grupları listesinde var olan bir kaynak grubunun ekran görüntüsü.

    Not

    Bu örnek ekran görüntüsü kaynak msdocs-identity-example grubunu içerir. Gerçek kaynak grubu adınız farklı olabilir.

  5. Kaynak grubunun bölmesinde, hizmet menüsünde Erişim denetimi (IAM) öğesini seçin.

    Kaynak grubunun hizmet menüsündeki 'Erişim Denetimi (IAM)' seçeneğinin ekran görüntüsü.

  6. Erişim denetimi (IAM) bölmesinde Roller'i seçin.

    'Erişim Denetimi (IAM)' bölmesindeki 'Roller' seçeneğinin ekran görüntüsü.

  7. Roller bölümünde Cosmos DB arama tümceciğini kullanın ve Cosmos DB İşleci rol tanımını bulun. Ardından, bu tanımla ilişkilendirilmiş Görünüm seçeneğini belirleyin.

    Yalnızca başlığa 'Cosmos DB' içeren tanımları içerecek şekilde filtrelenmiş geçerli atanabilir kapsamdaki rol tanımlarının listesinin ekran görüntüsü.

  8. Cosmos DB İşleci rol tanımı iletişim kutusunda, bu rol tanımının parçası olarak atanan eylemleri gözlemleyin.

    Yerleşik rol tanımıyla ilgili ayrıntıları içeren 'Cosmos DB İşleci' iletişim kutusunun ekran görüntüsü.

  9. Cosmos DB İşleci rol tanımı iletişim kutusunu kapatın.

Azure Cosmos DB hesabınızla ilişkili tüm rol tanımlarını listelemek için kullanın Get-AzRoleDefinition . Çıktıyı gözden geçirin ve Cosmos DB Yerleşik Veri Katkıda Bulunanı adlı rol tanımını bulun. Çıkış, özelliğindeki rol tanımının benzersiz tanımlayıcısını Id içerir. Bu değeri, bu kılavuzun devamında yer alan atama adımında kullanılması gerektiği şekilde kaydedin.

$parameters = @{
    Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name             : Cosmos DB Operator
Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom         : False
Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

Not

Bu örnekte Id değeri olacaktır 230815da-be43-4aae-9cb4-875f7bd000aa. Tanımlayıcı, Azure'daki tüm rol tanımlarında genel olarak benzersizdir.

Kimliğe rol atama

Şimdi, uygulamalarınızın Azure Cosmos DB'deki kaynaklara erişebilmesi için yeni tanımlanan rolü bir kimliğe atayın.

Önemli

Bu atama görevi, rol tabanlı erişim denetimi izinleri vermek istediğiniz herhangi bir kimliğin benzersiz tanımlayıcısına zaten sahip olmanız gerekir.

  1. Geçerli kaynak grubunuzun meta verilerini yeniden almak için kullanın az group show .

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Önceki komutun çıkışını gözlemleyin. Sonraki adımda kullanılması gerektiği için bu kaynak grubu için özelliğinin değerini id kaydedin.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Not

    Bu örnekte id değeri olacaktır /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Bu örnekte kurgusal veriler kullanılır ve tanımlayıcınız bu örnekten farklı olabilir. Bu, çıkışın kesilmiş bir örneğidir.

  3. kullanarak yeni rolü atayın az role assignment create. Bağımsız değişken için --scope kaynak grubunuzun tanımlayıcısını, bağımsız değişken için rolün -role tanımlayıcısını ve bağımsız değişken kimliğiniz için benzersiz tanımlayıcıyı --assignee kullanın.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Not

    Bu örnek komutta scope , önceki adımın örneğinden kurgusal örne /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example ayarlanmıştır. Kaynak grubunuzun tanımlayıcısı bu örnekten farklı olabilir. ayrıca role kurgusal /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0olarak ayarlanmıştır. Yine rol tanımlayıcınız farklı olabilir.

  4. Komutun çıkışını gözlemleyin. Çıkış, özelliğindeki id atama için benzersiz bir tanımlayıcı içerir.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Not

    Bu örnekte, id başka bir kurgusal örnek olan özelliğidir /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 .

  5. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    İpucu

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak erişmesine izin vermek için bu adımlar en azından yinelenir.

  1. Rol atamanızı tanımlamak için yeni bir Bicep dosyası oluşturun. Dosyaya control-plane-role-assignment.bicep adını verin.

    metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.'
    
    @description('Id of the role definition to assign to the targeted principal in the context of the account.')
    param roleDefinitionId string
    
    @description('Id of the identity/principal to assign this role in the context of the account.')
    param identityId string
    
    resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId)
      scope: resourceGroup()
      properties: {
        roleDefinitionId: roleDefinitionId
        principalId: identityId
      }
    }
    
  2. control-plane-role-assignment adlı yeni bir Bicep parametre dosyası oluşturun.bicepparam. Bu parametreler dosyasında; parametresine önceden kaydedilmiş rol tanımı tanımlayıcılarını roleDefinitionId ve parametreye kimliğinizin benzersiz tanımlayıcısını atayın identityId .

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. kullanarak bu Bicep şablonunu dağıtın az deployment group create.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters control-plane-role-assignment.bicepparam \
        --template-file control-plane-role-assignment.bicep
    
  4. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    İpucu

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak erişmesine izin vermek için bu adımlar en azından yinelenir.

  1. Erişim denetimi (IAM) bölmesinde Ekle'yi ve ardından Rol ataması ekle'yi seçin.

    'Ekle' seçeneğinin 'Erişim Denetimi (IAM)' menüsündeki 'Rol ataması ekle' seçeneğinin ekran görüntüsü.

  2. Rol bölmesinde, bu kılavuzun önceki bölümlerinde oluşturulan Azure Cosmos DB Denetim Düzlemi Sahibi rolünü arayın Azure Cosmos DB ve seçin. Ardından İleri'yi seçin.

    Rol ataması eklemeye yönelik 'Rol' bölmesinin ekran görüntüsü.

    İpucu

    İsteğe bağlı olarak rol listesini yalnızca özel rolleri içerecek şekilde filtreleyebilirsiniz.

  3. Üyeler bölmesinde Üyeleri seç seçeneğini belirleyin. Üyeler iletişim kutusunda, Azure Cosmos DB hesabınız için bu erişim düzeyini vermek istediğiniz kimliği seçin ve seçiminizi onaylamak için Seç seçeneğini kullanın.

    Rol ataması eklemeye yönelik 'Üyeler' bölmesinin ekran görüntüsü.

    Rol ataması eklemek için kimlik seçimi iletişim kutusunun ekran görüntüsü.

    Not

    Bu ekran görüntüsünde, "Kai Carter" adlı ve sorumlusu olan örnek bir kullanıcı gösterilmektedirkai@adventure-works.com.

  4. Üyeler bölmesine geri dönün, seçili üyeyi[s] gözden geçirin ve gözden geçir + ata'yı seçin.

    Rol ataması için seçilen kimlikle 'Üyeler' bölmesinin ekran görüntüsü.

  5. Gözden Geçir ve ata bölmesinde, yeni rol ataması için belirtilen seçenekleri gözden geçirin. Son olarak Gözden geçir ve ata'yı seçin.

    Rol ataması için 'Gözden geçir + oluştur' bölmesinin ekran görüntüsü.

  6. Portalın rol atamasını oluşturmayı tamamlanmasını bekleyin.

  1. kullanarak yeni rolü atayın New-AzRoleAssignment. Parametresi için rolün RoleDefinitionName adını ve parametre kimliğiniz için benzersiz tanımlayıcıyı ObjectId kullanın.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Komutun çıkışını gözlemleyin. Çıkış, özelliğindeki RoleAssignmentId atama için benzersiz bir tanımlayıcı içerir.

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Not

    Bu örnekte, RoleAssignmentId başka bir kurgusal örnek olan özelliğidir /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 . Bu, netlik için dağıtımın tipik çıkışının bir alt kümesidir.

  3. Kullanmak istediğiniz diğer kimliklerden hesaba erişim vermek için bu adımları yineleyin.

    İpucu

    İstediğiniz sayıda kimlik için bu adımları yineleyebilirsiniz. Genellikle, geliştiricilerin bir hesaba insan kimliklerini kullanarak erişmesine ve uygulamaların yönetilen kimlik kullanarak erişmesine izin vermek için bu adımlar en azından yinelenir.

Kodda denetim düzlemi erişimini doğrulama

Son olarak, tercih ettiğiniz programlama dilinde uygulama kodunu ve Azure Yönetim SDK'sını kullanarak doğru erişim verdiğini doğrulayın.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Önemli

Bu kod örneği, NuGet'ten Azure.ResourceManager.CosmosDB ve Azure.Identity kitaplıklarını kullanır.

Sonraki adım