Credenciais de serviço

Uma credencial de serviço fornece as informações necessárias para conectar um aplicativo ao site Object Storage empacotado em um documento JSON.

As credenciais de serviço são sempre associadas a um ID de serviço e os novos IDs de serviço podem ser criados juntamente com uma nova credencial.

Para visualizar uma credencial, deve-se ter concedido a função de plataforma de Administrador ou uma função customizada que tenha a ação resource-controller.credential.retrieve_all Para obter mais informações sobre esta atualização, consulte a documentação.

Use as etapas a seguir para criar uma credencial de serviço:

  1. Efetue login no console do IBM Cloud e navegue para sua instância do Object Storage.
  2. Na navegação lateral, clique em Credenciais de serviço.
  3. Clique em Nova credencial e forneça as informações necessárias. Se desejar gerar credenciais HMAC, alterne o Include HMAC Credential para On. Verifique se a opção foi alternada para On antes de continuar
  4. Clique em Incluir para gerar a credencial de serviço.

Ao criar uma credencial de serviço, é possível fornecer um valor de None para a função. Isso evitará a criação de políticas de acesso do IAM indesejadas ou desnecessárias.. Qualquer política de acesso para o ID de serviço associado precisará ser gerenciada usando o console ou as APIs do IAM.

A credencial tem os valores a seguir:

Valores de credenciais
Nome do campo Valor
apikey Nova chave de API criada para o ID de serviço
cos_hmac_keys Par de Chave de acesso e Chave secreta para uso com ferramentas e bibliotecas compatíveis com S3
endpoints Link para a representação JSON de terminais disponíveis
iam_apikey_description Descrição da chave de API - gerada inicialmente, mas editável
iam_apikey_name Nome da chave de API - gerado inicialmente, mas editável
iam_role_crn Identificador exclusivo para a função designada
iam_serviceid_crn Identificador exclusivo para o ID de serviço
resource_instance_id Identificador exclusivo para a instância do Object Storage que a credencial acessa. Isso também é referido como uma credencial de serviço.

Este é um exemplo de uma credencial de serviço:

{
  "apikey": "0viPHOY7LbLNa9eLftrtHPpTjoGv6hbLD1QalRXikliJ",
  "cos_hmac_keys": {
      "access_key_id": "347aa3a4b34344f8bc7c7cccdf856e4c",
      "secret_access_key": "gvurfb82712ad14W7a7915h763a6i87155d30a1234364f61"
  },
  "endpoints": "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints",
  "iam_apikey_description": "Auto generated apikey during resource-key operation for Instance - crn:v1:bluemix:public:cloud-object-storage:global:a/3ag0e9402tyfd5d29761c3e97696b71n:d6f74k03-6k4f-4a82-b165-697354o63903::",
  "iam_apikey_name": "auto-generated-apikey-f9274b63-ef0b-4b4e-a00b-b3bf9023f9dd",
  "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Manager",
  "iam_serviceid_crn": "crn:v1:bluemix:public:iam-identity::a/3ag0e9402tyfd5d29761c3e97696b71n::serviceid:ServiceId-540a4a41-7322-4fdd-a9e7-e0cb7ab760f9",
  "resource_instance_id": "crn:v1:bluemix:public:cloud-object-storage:global:a/3ag0e9402tyfd5d29761c3e97696b71n:d6f74k03-6k4f-4a82-b165-697354o63903::"
}

Também é possível usar a CLI do IBM Cloud para criar uma nova credencial de serviço (que é um subconjunto de algo chamado chave de serviço). Este exemplo extrai a credencial e grava-a em um arquivo no qual os SDKs do IBM COS podem originar automaticamente a chave de API e o ID da Instância de Serviço. Primeiro, crie a Chave de serviço (chamada config-example e associada a uma instância do COS chamada cos-dev-enablement neste exemplo):

ic resource service-key-create config-example --instance-name cos-dev-enablement

Em seguida, extraia a credencial e crie o arquivo cos_credential:

ic resource service-key config-example --output JSON | jq '.[].credentials' > ~/.bluemix/cos_credentials

Entendendo os objetos endpoints

O endpoints URL (https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints) fornecido como parte da credencial de serviço fornece uma lista de todos os possíveis pontos de extremidade que podem ser usados ao conectar um cliente:

{
   "identity-endpoints":{
      "iam-token":"iam.cloud.ibm.com",
      "iam-policy":"iampap.cloud.ibm.com"
   },
   "service-endpoints":{
      "cross-region":{
         "us":{
            "public":{
               "us-geo":"s3.us.cloud-object-storage.appdomain.cloud",
               "Dallas":"s3.dal.us.cloud-object-storage.appdomain.cloud",
               "Washington":"s3.wdc.us.cloud-object-storage.appdomain.cloud",
               "San Jose":"s3.sjc.us.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "us-geo":"s3.private.us.cloud-object-storage.appdomain.cloud",
               "Dallas":"s3.private.dal.us.cloud-object-storage.appdomain.cloud",
               "Washington":"s3.private.wdc.us.cloud-object-storage.appdomain.cloud",
               "San Jose":"s3.private.sjc.us.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "us-geo":"s3.direct.us.cloud-object-storage.appdomain.cloud",
               "Dallas":"s3.direct.dal.us.cloud-object-storage.appdomain.cloud",
               "Washington":"s3.direct.wdc.us.cloud-object-storage.appdomain.cloud",
               "San Jose":"s3.direct.sjc.us.cloud-object-storage.appdomain.cloud"
            }
         },
         "eu":{
            "public":{
               "eu-geo":"s3.eu.cloud-object-storage.appdomain.cloud",
               "Amsterdam":"s3.ams.eu.cloud-object-storage.appdomain.cloud",
               "Frankfurt":"s3.fra.eu.cloud-object-storage.appdomain.cloud",
 /**              "Milan":"s3.mil.eu.cloud-object-storage.appdomain.cloud"*/
            },
            "private":{
               "eu-geo":"s3.private.eu.cloud-object-storage.appdomain.cloud",
               "Amsterdam":"s3.private.ams.eu.cloud-object-storage.appdomain.cloud",
               "Frankfurt":"s3.private.fra.eu.cloud-object-storage.appdomain.cloud",
 /**              "Milan":"s3.private.mil.eu.cloud-object-storage.appdomain.cloud"*/
            },
            "direct":{
               "eu-geo":"s3.direct.eu.cloud-object-storage.appdomain.cloud",
               "Amsterdam":"s3.direct.ams.eu.cloud-object-storage.appdomain.cloud",
               "Frankfurt":"s3.direct.fra.eu.cloud-object-storage.appdomain.cloud",
/**               "Milan":"s3.direct.mil.eu.cloud-object-storage.appdomain.cloud"*/
            }
         },
         "ap":{
            "public":{
               "ap-geo":"s3.ap.cloud-object-storage.appdomain.cloud",
               "Tokyo":"s3.tok.ap.cloud-object-storage.appdomain.cloud",
               "Seoul":"s3.seo.ap.cloud-object-storage.appdomain.cloud",
               "Hong Kong":"s3.hkg.ap.cloud-object-storage.appdomain.cloud",
               "Sydney":"s3.syd.ap.cloud-object-storage.appdomain.cloud",
               "Osaka":"s3.osa.ap.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "ap-geo":"s3.private.ap.cloud-object-storage.appdomain.cloud",
               "Tokyo":"s3.private.tok.ap.cloud-object-storage.appdomain.cloud",
               "Seoul":"s3.private.seo.ap.cloud-object-storage.appdomain.cloud",
               "Hong Kong":"s3.private.hkg.ap.cloud-object-storage.appdomain.cloud",
               "Sydney":"s3.private.syd.ap.cloud-object-storage.appdomain.cloud",
               "Osaka":"s3.private.osa.ap.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "ap-geo":"s3.direct.ap.cloud-object-storage.appdomain.cloud",
               "Tokyo":"s3.direct.tok.ap.cloud-object-storage.appdomain.cloud",
               "Seoul":"s3.direct.seo.ap.cloud-object-storage.appdomain.cloud",
               "Hong Kong":"s3.direct.hkg.ap.cloud-object-storage.appdomain.cloud",
               "Sydney":"s3.direct.syd.ap.cloud-object-storage.appdomain.cloud",
               "Osaka":"s3.direct.osa.ap.cloud-object-storage.appdomain.cloud"
            }
         }
      },
      "regional":{
         "us-south":{
            "public":{
               "us-south":"s3.us-south.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "us-south":"s3.private.us-south.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "us-south":"s3.direct.us-south.cloud-object-storage.appdomain.cloud"
            }
         },
         "us-east":{
            "public":{
               "us-east":"s3.us-east.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "us-east":"s3.private.us-east.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "us-east":"s3.direct.us-east.cloud-object-storage.appdomain.cloud"
            }
         },
         "eu-gb":{
            "public":{
               "eu-gb":"s3.eu-gb.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "eu-gb":"s3.private.eu-gb.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "eu-gb":"s3.direct.eu-gb.cloud-object-storage.appdomain.cloud"
            }
         },
         "eu-de":{
            "public":{
               "eu-de":"s3.eu-de.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "eu-de":"s3.private.eu-de.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "eu-de":"s3.direct.eu-de.cloud-object-storage.appdomain.cloud"
            }
         },
         "jp-tok":{
            "public":{
               "jp-tok":"s3.jp-tok.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "jp-tok":"s3.private.jp-tok.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "jp-tok":"s3.direct.jp-tok.cloud-object-storage.appdomain.cloud"
            }
         },
         "jp-osa":{
            "public":{
               "jp-osa":"s3.jp-osa.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "jp-osa":"s3.private.jp-osa.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "jp-osa":"s3.direct.jp-osa.cloud-object-storage.appdomain.cloud"
            }
         },
         "au-syd":{
            "public":{
               "au-syd":"s3.au-syd.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "au-syd":"s3.private.au-syd.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "au-syd":"s3.direct.au-syd.cloud-object-storage.appdomain.cloud"
            }
         },
         "ca-tor":{
            "public":{
               "ca-tor":"s3.ca-tor.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "ca-tor":"s3.private.ca-tor.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "ca-tor":"s3.direct.ca-tor.cloud-object-storage.appdomain.cloud"
            }
         },
         "br-sao":{
            "public":{
               "br-sao":"s3.br-sao.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "br-sao":"s3.private.br-sao.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "br-sao":"s3.direct.br-sao.cloud-object-storage.appdomain.cloud"
            }
         }
      },
      "single-site":{
         "ams03":{
            "public":{
               "ams03":"s3.ams03.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "ams03":"s3.private.ams03.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "ams03":"s3.direct.ams03.cloud-object-storage.appdomain.cloud"
            }
         },
         "che01":{
            "public":{
               "che01":"s3.che01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "che01":"s3.private.che01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "che01":"s3.direct.che01.cloud-object-storage.appdomain.cloud"
            }
         },
         "mon01":{
            "public":{
               "mon01":"s3.mon01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "mon01":"s3.private.mon01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "mon01":"s3.direct.mon01.cloud-object-storage.appdomain.cloud"
            }
         },
         "mex01":{
            "public":{
               "mex01":"s3.mex01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "mex01":"s3.private.mex01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "mex01":"s3.direct.mex01.cloud-object-storage.appdomain.cloud"
            }
         },
         "sjc04":{
            "public":{
               "sjc04":"s3.sjc04.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "sjc04":"s3.private.sjc04.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "sjc04":"s3.direct.sjc04.cloud-object-storage.appdomain.cloud"
            }
         },
         "mil01":{
            "public":{
               "mil01":"s3.mil01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "mil01":"s3.private.mil01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "mil01":"s3.direct.mil01.cloud-object-storage.appdomain.cloud"
            }
         },
         "par01":{
            "public":{
               "par01":"s3.par01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "par01":"s3.private.par01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "par01":"s3.direct.par01.cloud-object-storage.appdomain.cloud"
            }
         },
         "sng01":{
            "public":{
               "sng01":"s3.sng01.cloud-object-storage.appdomain.cloud"
            },
            "private":{
               "sng01":"s3.private.sng01.cloud-object-storage.appdomain.cloud"
            },
            "direct":{
               "sng01":"s3.direct.sng01.cloud-object-storage.appdomain.cloud"
            }
         }
      }
   },
   "resource-configuration-endpoints":{
      "global":{
         "public":"config.cloud-object-storage.cloud.ibm.com/v1",
         "private":"config.private.cloud-object-storage.cloud.ibm.com/v1",
         "direct":"config.direct.cloud-object-storage.cloud.ibm.com/v1"
      }
   }
}

Ao criar um cliente usando uma biblioteca que requer um valor de terminal "auth", é necessário incluir /oidc/token no final da URL do iam-token fornecida acima.

Usando credenciais de serviço para acesso a um único depósito

Quando uma credencial de serviço é criada, o ID de serviço subjacente é concedido a uma função na instância inteira do Object Storage. Se a intenção for que a credencial seja usada para conceder acesso a um subconjunto de depósitos e não à instância inteira, essa política precisará ser editada. Consulte a página Permissões de depósito para obter mais detalhes.

Uso de credenciais de serviço para acesso a um único objeto/pasta

Quando uma credencial de serviço é criada, o ID de serviço subjacente é concedido a uma função na instância inteira do Object Storage. Se a intenção for que a credencial seja usada para conceder acesso a um subconjunto de buckets e não à instância inteira, essa política precisará ser editada. Consulte a página Designando acesso a objetos em um depósito usando condições de acesso do IAM para obter mais detalhes.

Uso de uma chave de API para acessar várias instâncias

Se a intenção for usar a mesma chave de API para mais de uma instância Object Storage, você poderá modificar a política de acesso do ID do serviço para conceder acesso. Cada chave de API que está associada a um ID de serviço herda a política que é designada para o ID de serviço.

Use a ID do serviço gerada a partir de uma instância existente

Quando você cria uma credencial de serviço para uma instância específica, essa credencial tem um valor de chave de API. Para usar essa mesma chave de API com outra instância Object Storage, modifique a política de acesso para o ID de serviço associado a essa chave de API para conceder acesso à instância adicional.

Gerar uma ID de serviço diretamente

Se você preferir limitar a visibilidade da chave de API após sua criação, siga as etapas em Criação de uma chave de API para uma ID de serviço. Conforme observado nesse tópico, certifique-se de copiar ou fazer download da chave no momento da criação. Em seguida, configure as políticas de acesso para que o ID do serviço tenha acesso a uma ou mais instâncias Object Storage.

Chave de API vs. HMAC

Em geral, as Chaves de API do IAM são o método preferencial de autenticação do IBM Cloud® Object Storage. O HMAC é suportado principalmente para compatibilidade com uma versão anterior de aplicativos que migraram de IaaS Object Storage e aplicativos legados de S3. O IAM também é suportado nativamente ao desenvolver aplicativos com os SDKs do COS. A expiração e a atualização do token são manipuladas automaticamente para simplificar o processo.

Para obter mais informações sobre o IAM, visite Introdução ao IAM

Para obter mais informações sobre o HMAC, visite Usando credenciais HMAC