Proteger o acesso aos recursos com o IAM


Os utilizadores e as contas de serviço do Kubernetes precisam de autorizações para gerir os recursos do Config Connector. Com o Config Connector, o plano de controlo do seu projeto pode ser gerido por identidades que usam o controlo de acesso baseado em funções (CABF) do Kubernetes. Também pode consultar as políticas de gestão de identidade e de acesso (IAM).

Os recursos que podem fazer referência a IAMPolicy e IAMPolicyMember estão listados na Referência de recursos. Estes recursos têm a propriedade "Can Be Referenced by IAMPolicy/IAMPolicyMember".

Este tópico explica como proteger o acesso aos Google Cloud recursos através da gestão de identidade e de acesso.

Antes de começar

Instale o Config Connector no seu cluster.

Proteger o acesso ao plano de controlo com CABF

Neste exemplo, vai criar uma conta de serviço e conceder-lhe autorizações para gerir um PubSubTopic. Esta conta de serviço não pode gerir outros tipos de recursos do Config Connector.

  1. Crie um ficheiro com o nome pubsub-topic-service-account.yaml com o seguinte conteúdo:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: pubsub-topic-service-account
      namespace: default
    

    Aplique este comando para criar a conta de serviço pubsub-topic-service-account:

    kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

  2. Confirme que pubsub-topic-service-account não consegue criar recursos PubSubTopic validando se o resultado do seguinte comando contém no:

    kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
  3. Em seguida, crie uma ClusterRole que permita a criação de tópicos do Pub/Sub.

    O ClusterRole só pode gerir recursos que tenham valores especificados em rules.apiGroups e rules.resources. Para encontrar valores para apiGroups e resources, consulte a referência dos seus recursos.

    Crie um ficheiro denominado pubsub-topic-editor-role.yaml com o seguinte conteúdo:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      creationTimestamp: null
      name: pubsub-topic-editor
    rules:
    - apiGroups:
      - pubsub.cnrm.cloud.google.com
      resources:
      - pubsubtopics
      verbs:
      - get
      - list
      - watch
      - create
      - update
      - patch
      - delete
    

    Aplique o pubsub-topic-editor.yaml para criar o ClusterRole:

    kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

  4. Em seguida, crie uma RoleBinding entre o ClusterRole e a sua conta de serviço. Crie um ficheiro com o nome pubsub-topic-editor-rolebinding.yaml com o seguinte conteúdo:

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: pubsub-topic-editor-rolebinding.
    subjects:
    - kind: ServiceAccount
      name: pubsub-topic-service-account
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: pubsub-topic-editor
    
  5. Aplique pubsub-topic-editor-rolebinding.yaml ao seu cluster.

    kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

  6. Confirme que o pubsub-topic-service-account tem autorização para criar recursos PubSubTopic confirmando que o resultado do seguinte comando é yes:

    kubectl auth can-i get pubsubtopics \
      --as=system:serviceaccount:default:pubsub-topic-service-account

Limpar

Use kubectl delete para remover a conta de serviço, a função do IAM e a associação de funções.

kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE

Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

Proteger o plano de dados com políticas IAM

Neste exemplo, usa as autorizações concedidas anteriormente para criar um PubSubTopic e limitar o acesso ao mesmo com um recurso IAMPolicyMember.

  1. Crie um ficheiro denominado pubsub-topic-sample.yaml com o seguinte conteúdo:

    apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
    kind: PubSubTopic
    metadata:
      name: pubsubtopic-sample
    

    Aplique pubsub-topic-sample.yaml com kubectl:

    kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

  2. Crie um ficheiro denominado iampolicymember.yaml com o seguinte conteúdo, substituindo EMAIL_ADDRESS pelo endereço de email da sua Google Cloud conta:

    apiVersion: iam.cnrm.cloud.google.com/v1beta1
    kind: IAMPolicyMember
    metadata:
      name: iampolicymember-sample
    spec:
      resourceRef:
        apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
        kind: PubSubTopic
        name: pubsubtopic-sample
      role: roles/pubsub.admin
      member: "user:EMAIL_ADDRESS"
    
  3. Aplique o iampolicymember.yaml.

    kubectl apply -f iampolicymember.yaml  --namespace CC_NAMESPACE 

    Substitua CC_NAMESPACE pelo espaço de nomes a partir do qual o Config Connector gere os recursos.

  4. Confirme se a política foi aplicada Google Cloud executando este comando e procurando o seu endereço de email no resultado, substituindo PROJECT_ID pelo ID do seu projeto:

    gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample

O acesso aos seus tópicos do Pub/Sub está agora protegido com uma IAMPolicyMember.

Limpar

Use kubectl delete para remover o tópico Pub/Sub e o IAMPolicyMember do seu Google Cloud projeto.

kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE

O que se segue?

Use segredos para transmitir informações em segurança aos Google Cloud recursos.