Esta página descreve os limites de acesso às credenciais, que pode usar para downscope ou restringir as autorizações da gestão de identidade e de acesso (IAM) que uma credencial de curta duração pode usar.
Pode usar limites de acesso de credenciais para gerar chaves de acesso OAuth 2.0 que representam uma conta de serviço, mas têm menos autorizações do que a conta de serviço. Por exemplo, se um dos seus clientes precisar de aceder a dados do Cloud Storage que controla, pode fazer o seguinte:
- Crie uma conta de serviço que possa aceder a todos os contentores do Cloud Storage que lhe pertencem.
- Gere uma chave de acesso OAuth 2.0 para a conta de serviço.
- Aplique um limite de acesso às credenciais que só permita o acesso ao contentor que contém os dados do seu cliente.
Como funcionam os limites de acesso às credenciais
Para restringir as autorizações, define um limite de acesso às credenciais que especifica a que recursos a credencial de curta duração pode aceder, bem como um limite superior nas autorizações disponíveis em cada recurso. Em seguida, pode criar uma credencial de curta duração e trocá-la por uma nova credencial que respeite o limite de acesso às credenciais.
Se precisar de conceder aos principais um conjunto distinto de autorizações para cada sessão, a utilização de limites de acesso às credenciais pode ser mais eficiente do que criar muitas contas de serviço diferentes e conceder a cada conta de serviço um conjunto diferente de funções.
Componentes de um limite de acesso a credenciais
Um limite de acesso de credenciais é um objeto que contém uma lista de regras de limites de acesso. Cada regra contém as seguintes informações:
- O recurso ao qual a regra se aplica.
- O limite superior das autorizações disponíveis nesse recurso.
- Opcional: uma condição que restringe ainda mais as autorizações. Uma condição inclui
o seguinte:
- Uma expressão de condição que é avaliada como
true
oufalse
. Se a condição for avaliada comotrue
, o acesso é permitido; caso contrário, o acesso é negado. - Opcional: um título que identifica a condição.
- Opcional: uma descrição com mais informações sobre a condição.
- Uma expressão de condição que é avaliada como
Se aplicar um limite de acesso de credenciais a uma credencial de curta duração, a credencial só pode aceder aos recursos no limite de acesso de credenciais. Não estão disponíveis autorizações noutros recursos.
Um limite de acesso de credenciais pode conter até 10 regras de limite de acesso. Só pode aplicar um limite de acesso às credenciais a cada credencial de curta duração.
Quando representada como um objeto JSON, uma Credential Access Boundary contém os seguintes campos:
Campos | |
---|---|
accessBoundary |
Um wrapper para o limite de acesso às credenciais. |
accessBoundary.accessBoundaryRules[] |
Uma lista de regras de limite de acesso a aplicar a uma credencial de curta duração. |
accessBoundary.accessBoundaryRules[].availablePermissions[] |
Uma lista que define o limite superior das autorizações disponíveis para o recurso.
Cada valor é o identificador de uma função predefinida ou de uma função personalizada do IAM, com o prefixo |
accessBoundary.accessBoundaryRules[].availableResource |
O nome completo do recurso do contentor do Cloud Storage ao qual a regra se aplica. Use o formato
|
accessBoundary.accessBoundaryRules[].availabilityCondition |
Opcional. Uma condição que restringe a disponibilidade de autorizações a objetos específicos do Cloud Storage. Use este campo se quiser disponibilizar autorizações para objetos específicos, em vez de todos os objetos num contentor do Cloud Storage. |
accessBoundary.accessBoundaryRules[].availabilityCondition.expression |
Uma expressão de condição que especifica os objetos do Cloud Storage onde as autorizações estão disponíveis.
Para saber como referir-se a objetos específicos numa expressão de condição, consulte o
|
accessBoundary.accessBoundaryRules[].availabilityCondition.title |
Opcional. Uma string curta que identifica a finalidade da condição. |
accessBoundary.accessBoundaryRules[].availabilityCondition.description |
Opcional. Detalhes sobre a finalidade da condição. |
Para ver exemplos no formato JSON, consulte a secção Exemplos de limites de acesso às credenciais nesta página.
Exemplos de limites de acesso às credenciais
As secções seguintes mostram exemplos de limites de acesso às credenciais para exemplos de utilização comuns. Usa o limite de acesso às credenciais quando troca uma chave de acesso OAuth 2.0 por um token com âmbito reduzido.
Limite as autorizações para um contentor
O exemplo seguinte mostra um limite de acesso de credenciais simples. Aplica-se ao contentor do Cloud Storage example-bucket
e define o limite superior para as autorizações incluídas na função Leitor de objetos do Storage (roles/storage.objectViewer
):
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket"
}
]
}
}
Limite as autorizações para vários contentores
O exemplo seguinte mostra um limite de acesso às credenciais que inclui regras para vários contentores:
- O contentor do Cloud Storage
example-bucket-1
: para este contentor, apenas as autorizações na função Visualizador de objetos de armazenamento (roles/storage.objectViewer
) estão disponíveis. - O contentor do Cloud Storage
example-bucket-2
: para este contentor, só estão disponíveis as autorizações na função de criador de objetos de armazenamento (roles/storage.objectCreator
).
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket-1"
},
{
"availablePermissions": [
"inRole:roles/storage.objectCreator"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket-2"
}
]
}
}
Limite as autorizações para objetos específicos
Também pode usar condições do IAM para especificar a que objetos do Cloud Storage um principal pode aceder. Por exemplo, pode
adicionar uma condição que disponibilize autorizações para objetos cujo nome comece
com customer-a
:
{ "accessBoundary": { "accessBoundaryRules": [ { "availablePermissions": [ "inRole:roles/storage.objectViewer" ], "availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket", "availabilityCondition": { "expression" : "resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a')" } } ] } }
Limite as autorizações ao listar objetos
Quando lista os objetos num contentor do Cloud Storage, está a chamar um método num recurso de contentor e não num recurso de objeto. Como resultado, se uma condição for avaliada para um pedido de lista e a condição se referir ao nome do recurso, o nome do recurso identifica o contentor, e não um objeto no contentor. Por exemplo, quando lista objetos em
example-bucket
, o nome do recurso é projects/_/buckets/example-bucket
.
Esta convenção de nomenclatura pode levar a um comportamento inesperado quando lista objetos.
Por exemplo, suponhamos que quer um limite de acesso às credenciais que permita o acesso de visualização a objetos em example-bucket
com o prefixo customer-a/invoices/
.
Pode tentar usar a seguinte condição no limite de acesso às credenciais:
Incomplete: condição que verifica apenas o nome do recurso
resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/')
Esta condição funciona para ler objetos, mas não para listar objetos:
- Quando um principal tenta ler um objeto em
example-bucket
com o prefixocustomer-a/invoices/
, a condição é avaliada comotrue
. - Quando um principal tenta listar objetos com esse prefixo, a condição é avaliada como
false
. O valor deresource.name
éprojects/_/buckets/example-bucket
, que não começa comprojects/_/buckets/example-bucket/objects/customer-a/invoices/
.
Para evitar este problema, além de usar resource.name.startsWith()
, a sua condição pode verificar um atributo da API denominado storage.googleapis.com/objectListPrefix
. Este atributo contém o valor do parâmetro prefix
que foi usado para filtrar a lista de objetos. Como resultado,
pode escrever uma condição que faça referência ao valor do parâmetro prefix
.
O exemplo seguinte mostra como usar o atributo API numa condição. Permite ler e listar objetos em example-bucket
com o prefixo customer-a/invoices/
:
Complete: condição que verifica o nome do recurso e o prefixo
resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/') || api.getAttribute('storage.googleapis.com/objectListPrefix', '') .startsWith('customer-a/invoices/')
Já pode usar esta condição num limite de acesso a credenciais:
{
"accessBoundary": {
"accessBoundaryRules": [
{
"availablePermissions": [
"inRole:roles/storage.objectViewer"
],
"availableResource": "//storage.googleapis.com/projects/_/buckets/example-bucket",
"availabilityCondition": {
"expression":
"resource.name.startsWith('projects/_/buckets/example-bucket/objects/customer-a/invoices/') || api.getAttribute('storage.googleapis.com/objectListPrefix', '').startsWith('customer-a/invoices/')"
}
}
]
}
}
O que se segue?
- Saiba como criar uma credencial de curta duração com âmbito reduzido.
- Saiba mais sobre o controlo de acesso ao Cloud Storage.
- Veja as autorizações em cada função predefinida.
- Saiba mais sobre as funções personalizadas.