Esta página explica como gerir o acesso a contentores de armazenamento em projetos isolados do Google Distributed Cloud (GDC), para que as pessoas certas tenham as autorizações certas. Abrange os pré-requisitos e os passos para obter e conceder acesso de utilizadores e contas de serviço através de associações de funções e funções predefinidas. Estas informações permitem-lhe controlar eficazmente o acesso aos seus recursos de armazenamento e manter a segurança e a eficiência operacional.
Esta página destina-se a públicos-alvo, como administradores de TI no grupo de operadores de infraestrutura ou programadores no grupo de operadores de aplicações, que gerem as definições de acesso para contentores de armazenamento em ambientes isolados do GDC. Para mais informações, consulte o artigo Públicos-alvo para a documentação isolada do GDC.
Antes de começar
Um espaço de nomes do projeto gere os recursos de contentores no servidor da API Management. Tem de ter um projeto para trabalhar com contentores e objetos.
Conceda acesso ao contentor
Pode conceder acesso ao contentor a outros utilizadores ou contas de serviço criando e aplicando RoleBindings com funções predefinidas no servidor da API Management.
Funções predefinidas
project-bucket-object-viewer: permite que um utilizador liste todos os contentores no projeto, liste objetos nesses contentores e leia objetos e metadados de objetos. Não lhe permite escrever operações em objetos. Por exemplo: carregar, substituir ou eliminar. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso só de leitura aos objetos nesses contentores.
project-bucket-object-admin: permite que um utilizador liste todos os contentores no projeto e realize operações de leitura e escrita em objetos. Por exemplo: carregar, substituir ou eliminar. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso de leitura/escrita aos objetos nesses contentores.
project-bucket-admin: permite que os utilizadores façam a gestão de todos os contentores no espaço de nomes indicado, bem como de todos os objetos nesses contentores. Tem acesso só de leitura a contentores de duas zonas na organização e nos respetivos projetos, bem como acesso de leitura/escrita aos objetos nesses contentores.
Para ver uma lista completa das autorizações concedidas para as funções anteriores, consulte a secção Autorizações de funções predefinidas.
Peça ao administrador de IAM do projeto para lhe conceder autorizações para criar RoleBindings. Segue-se um exemplo de criação de uma RoleBinding para conceder acesso a um utilizador e a uma conta de serviço:
Crie um ficheiro YAML no seu sistema, como
rolebinding-object-admin-all-buckets.yaml
.# Example file name: # rolebinding-object-admin-all-buckets.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: NAMESPACE_NAME name: readwrite-all-buckets roleRef: kind: Role name: project-bucket-object-admin apiGroup: rbac.authorization.k8s.io subjects: - kind: ServiceAccount namespace: NAMESPACE_NAME name: SA_NAME - kind: User namespace: NAMESPACE_NAME name: bob@example.com apiGroup: rbac.authorization.k8s.io # Could be bob or bob@example.com based on your organization settings.
Aplique o ficheiro YAML:
kubectl apply \ -f rolebinding-object-admin-all-buckets.yaml
Obtenha credenciais de acesso ao contentor
Depois de conceder acesso a um contentor, são criadas as credenciais de acesso num segredo.
O formato do nome do segredo é object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH
.
- Os valores de
STORAGE_CLASS
são:std
para a classe de armazenamentoStandard
.
- Os valores de
SUBJECT_TYPE
são:user
para User.sa
para ServiceAccount.
SUBJECT_HASH
é o hash SHA256 codificado em base32 do nome do assunto.
Por exemplo, o utilizador bob@foo.com
tem dois segredos com os seguintes nomes:
object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Obtenha acesso de utilizador
Para um utilizador sujeito, o segredo encontra-se no espaço de nomes object-storage-access-keys
no servidor da API Management.
Execute o seguinte comando para encontrar o nome do segredo:
kubectl auth can-i --list --namespace object-storage-access-keys | grep object-storage-key-
Recebe um resultado semelhante ao seguinte:
secrets [] [object-storage-key-nl-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja,object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja] [get]
Obtenha o conteúdo do segredo correspondente para aceder a contentores na classe de armazenamento
Standard
:kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
Recebe um resultado semelhante ao seguinte:
data: access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8= create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3 secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
Descodifique o ID da chave de acesso e o segredo:
echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \ && echo \ && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
Recebe um resultado semelhante ao seguinte:
0HX3O0YC2J722EJLPJEO Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
Siga a secção Configure a CLI gcloud com as informações resultantes.
Obtenha acesso à conta de serviço
Para um assunto de conta de serviço (SA), encontre o nome do segredo no cluster de utilizadores.
Para a classe de armazenamento padrão, execute o seguinte comando para obter o nome do segredo:
kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
Em seguida, pode procurar manualmente os nomes dos segredos listados ou usar
grep
para encontrarobject-storage-key-(std|nl)
. Para a última opção, execute o seguinte:kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o=jsonpath='{.secrets}{"\n"}' | grep object-storage-key-(std|nl)
Pode fazer referência ao segredo no seu pod como variáveis de ambiente ou ficheiros.
Autorizações de funções predefinidas
As funções predefinidas estão disponíveis no servidor de API global para acesso administrativo e operacional a contentores de duas zonas. Estas funções também concedem acesso a contentores zonais, mas apenas se for usado um recurso IAMRoleBinding
em vez de um recurso RoleBinding
ou ClusterRoleBinding
. Para mais informações sobre associações de funções, consulte o artigo Conceda e revogue o acesso.
Autorizações project-bucket-object-viewer
Esta função concede autorizações para obter e listar objetos e metadados de objetos no contentor.
Seguem-se as concessões de project-bucket-object-viewer Role
para uma lista de todas as autorizações de armazenamento de objetos:
Autorizações da API Bucket:
- receber
- lista
- relógio
Autorizações de armazenamento de objetos do S3:
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
autorizações project-bucket-object-admin
Esta função concede autorizações para colocar e eliminar objetos, bem como versões e etiquetas de objetos no contentor. Além disso, também concede todas as autorizações no
project-bucket-object-viewer
.
Seguem-se as autorizações de armazenamento de objetos adicionais que a função concede:
Autorizações de armazenamento de objetos do S3:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
Autorizações global-project-bucket-object-viewer
Esta função concede autorizações para obter e listar objetos e os metadados dos objetos em contentores de duas zonas.
Seguem-se as autorizações de armazenamento de objetos que o global-project-bucket-object-viewer Role
concede:
Autorizações da API Bucket:
- receber
- lista
- relógio
Autorizações de armazenamento de objetos do S3:
- GetObject
- GetObjectAcl
- GetObjectLegalHold
- GetObjectRetention
- GetObjectTagging
- GetObjectVersion
- GetObjectVersionTagging
- ListBucket
- ListBucketVersions
- ListBucketMultipartUploads
- ListMultipartUploadParts
autorizações global-project-bucket-object-admin
Esta função concede autorizações para colocar e eliminar objetos, bem como versões e etiquetas de objetos em contentores de duas zonas. Além disso, também concede todas as autorizações no
global-project-bucket-object-viewer
.
Seguem-se os detalhes de todas as autorizações de armazenamento de objetos adicionais que as concessões Role
concedem:
Autorizações de armazenamento de objetos do S3:
- AbortMultipartUpload
- DeleteObject
- DeleteObjectTagging
- DeleteObjectVersion
- DeleteObjectVersionTagging
- PutObject
- PutObjectTagging
- PutObjectVersionTagging
- PutOverwriteObject
- RestoreObject
autorizações global-project-bucket-admin
Esta função concede autorizações para criar, atualizar ou eliminar recursos Bucket
no espaço de nomes do projeto para contentores de duas zonas. Além disso, também concede todas as autorizações em
global-project-bucket-object-admin
.
Segue-se uma lista de autorizações adicionais concedidas pelo Role
:
Autorizações da API Bucket:
- Criar
- Atualizar
- Eliminar
autorizações de administrador do projeto-contentor
Esta função concede autorizações para criar, atualizar ou eliminar recursos Bucket
no
namespace do projeto. Além disso, também concede todas as autorizações em
project-bucket-object-admin
.
Seguem-se as autorizações adicionais concedidas pela função:
Autorizações da API Bucket:
- Criar
- Atualizar
- Eliminar