Controlando o acesso a objetos individuais em um depósito
Este tutorial fornece exemplos de como usar políticas de acesso do IAM com depósitos do IBM Cloud® Object Storage para conceder aos usuários acesso a objetos individuais em um depósito.
Antes de Iniciar
O IBM Cloud Object Storage armazena dados em uma estrutura simples em que um depósito pode conter bilhões de objetos nomeados distintamente. Uma hierarquia de pastas pode ser simulada usando prefixos idênticos em nomes de objetos relacionados Além disso, um nome de objeto pode ser referido como uma chave de objeto.. Aqui está um exemplo:
Bucket Name: MyBucket
Objects in MyBucket:
User1/userDoc1.txt
User1/userDoc2.zip
Engineering/project1.git
Engineering/project2.git
Product/2023/roadmap1.ppt
Product/2024/roadmap2.ppt
Orgchart.pdf
Neste exemplo, o prefixo User1, Engineeringe Product podem ser semelhantes a pastas de nível raiz Além disso, 2023 e 2024 podem representar subdiretórios. Use o delimitador "/"
para representar a hierarquia de arquivos Um delimitador pode ser qualquer caractere suportado.. O Orgchart.pdf é considerado um objeto de nível raiz
Ao executar uma solicitação de lista no depósito, é possível especificar um prefixo para listar objetos ou listar o conteúdo do depósito inteiro. Além disso, é possível, opcionalmente, passar um valor de delimitador na solicitação de listagem para simular uma estrutura de pastas na resposta Para obter mais informações, consulte os exemplos de uso de instruções de condições prefix and delimiter.
Operações de leitura ou gravação geralmente têm como destino um nome de objeto específico que também é referido como o objeto path.
Cenários
Os exemplos a seguir mostram como usar políticas e condições do IAM para conceder acesso a objetos individuais em um depósito. Continuaremos usando o depósito de exemplo mostrado acima. Estes exemplos mostram trechos da política de acesso total com relação à configuração de instruções de condição Para obter mais informações, consulte Designando acesso a objetos dentro de um depósito usando condições de acesso do IAM.
Cenário 1: Conceder acesso de leitura Adam a todos os objetos na pasta User1 apenas.
Isso dará a Adam a capacidade de ler todos os objetos que começam com o nome da chave User1/. Isso não dará a Adam a capacidade de listar objetos e, portanto, ele não poderá navegar na UI para acessar esses objetos.. O Adam só
pode recuperar objetos na pasta User1 por meio de métodos não UI. Use um curinga na política para fornecer acesso a todos os objetos possíveis que comecem com User1/ A falha em incluir um curinga daria a Adam apenas
acesso ao objeto denominado User1/
"control": {
"grant": {
"roles": [
{ "role_id":
"crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ObjectReader"
}
]
}
},
"rule": {
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatch",
"value": "User1/*"
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"
Cenário 2: Conceder acesso de leitura e lista Adam a todos os objetos na pasta User1 .
Isso dará a Adam a capacidade de ler e listar todos os objetos que começam com o nome da chave User1/. Além disso, use um curinga no atributo de condição prefix Falha ao incluir o curinga resulta em Adam ter apenas
acesso de Lista ao primeiro nível de objetos ou pastas na pasta User1 . Essa política não permitirá que Adam liste o depósito no nível raiz.. Se Adam usar a IU, ele deverá procurar o depósito com o prefixo específico de User1/ para ver os objetos para os quais ele tem acesso
"control": {
"grant": {
"roles": [
{
"role_id":
"crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ContentReader"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatch",
"value": "User1/*"
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatch",
"value": "User1/*"
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard
Cenário 3: Conceder a Samantha acesso para listar, ler e replicar arquivos somente nos subdiretórios 2023 e 2024 na pasta Product .
Esses conjuntos de ações exigirão que Samantha tenha pelo menos a função Writer . A função Writer também contém algumas ações que não especificam um Path ou Prefix ou Delimiter como cloud-object-storage.bucket.put_replication. Para permitir essas ações, use o operador StringExists com as condições baseadas em atributos de recurso
Samantha não terá acesso para navegar na IU da pasta raiz. Essa situação é mostrada no Cenário 4.
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": false
}
]
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"
Cenário 4: Conceder acesso Samantha para navegar na UI para os arquivos nas pastas 2023 e 2024 , além de listar, ler e replicar arquivos em 2023 e 2024.
Para navegar na UI para MyBucket, Samantha precisa da função de plataforma Viewer. Além disso, Samantha recebe acesso a quaisquer diretórios acima da pasta de destino. Neste caso, Samantha precisa de acesso para listar
o nível raiz (definido pelo prefixo da sequência vazia) e a pasta Product/ . Isso permite que Samantha veja todas as pastas e objetos de nível raiz
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:iam::::serviceRole:Writer"
},
{
"role_id": "crn:v1:bluemix:public:iam::::role:Viewer"
}
]
}
},
"rule": {
"operator": "or",
"conditions": [
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"Product/"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"Product/2023/*",
"Product/2024/*"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": false
}
]
}
]
},
"pattern": "attribute-based-condition:resource:literal-and-wildcard"