服务凭证
服务凭据 提供了必要的信息,可将应用程序连接到 Object Storage,并以 JSON 文档的形式打包。
服务凭证始终与服务标识相关联,并且新的服务标识可以与新的凭证一起创建。
要查看凭证,必须向您授予管理员平台角色或具有 resource-controller.credential.retrieve_all
操作的定制角色。 有关 此更新 的更多信息,请参阅 文档。
使用以下步骤来创建服务凭证:
- 登录到 IBM Cloud 控制台,并导航至 Object Storage 的实例。
- 在侧边导航中,单击服务凭证。
- 单击新建凭证并提供必要的信息。 如果要生成 HMAC 凭证,请将
Include HMAC Credential
切换到On
。 请先验证该选项是否已切换到On
,然后再继续。 - 单击添加以生成服务凭证。
创建服务凭证时,可以为角色提供值 None
。 这将阻止创建意外或不必要的 IAM 访问策略。 将需要使用 IAM 控制台或 API 来管理关联服务标识的任何访问策略。
凭证包含以下值:
字段名称 | 值 |
---|---|
apikey |
为服务标识创建的新 API 密钥 |
cos_hmac_keys |
用于与 S3 兼容的工具和库的访问密钥和私钥对 |
endpoints |
可用端点的 JSON 表示的链接 |
iam_apikey_description |
API 密钥描述 - 初始生成,但可编辑 |
iam_apikey_name |
API 密钥名称 - 初始生成,但可编辑 |
iam_role_crn |
已分配角色的唯一标识 |
iam_serviceid_crn |
服务标识的唯一标识 |
resource_instance_id |
凭证访问的 Object Storage 实例的唯一标识。 这也称为服务凭证。 |
下面是服务凭证的示例:
{
"apikey": "0viPHOY7LbLNa9eLftrtHPpTjoGv6hbLD1QalRXikliJ",
"cos_hmac_keys": {
"access_key_id": "347aa3a4b34344f8bc7c7cccdf856e4c",
"secret_access_key": "gvurfb82712ad14W7a7915h763a6i87155d30a1234364f61"
},
"endpoints": "https://control.cloud-object-storage.test.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::"
}
您还可以使用 IBM Cloud CLI 来创建新的服务凭证 (这是称为 服务密钥的部分)。 此示例抽取凭证并将其写入 IBM COS SDK 可自动获取 API 密钥和服务实例标识的文件。 首先,创建服务密钥 (称为 config-example
,并在此示例中与名为 cos-dev-enablement
的 COS 实例相关联):
ic resource service-key-create config-example --instance-name cos-dev-enablement
然后,解压缩凭证并创建 cos_credential
文件:
ic resource service-key config-example --output JSON | jq '.[].credentials' > ~/.bluemix/cos_credentials
了解 endpoints
对象
作为服务凭证的一部分提供的 endpoints
URL (https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints
) 列出了连接客户端时可能使用的所有端点:
{
"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"
}
}
}
使用需要“auth”端点值的库来创建客户机时,需要将 /oidc/token
添加到上面提供的 iam-token
URL 的末尾。
使用服务凭证进行单存储区访问
创建服务凭证时,将向底层服务标识授予作用于整个 Object Storage 实例的角色。 如果凭证的目的是用于授予对部分存储区而不是整个实例的访问权,那么需要编辑此策略。 有关更多详细信息,请参阅存储区许可权页面。
使用服务凭证访问单个对象/文件夹
创建服务凭证时,将向底层服务标识授予作用于整个 Object Storage 实例的角色。 如果打算使用凭据来授予对某个存储桶而不是整个实例的访问权限,则需要对该策略进行编辑。 有关更多详细信息,请参阅 使用 IAM 访问条件分配对存储区中对象的访问权 页面。
使用 API 密钥访问多个实例
如果要在多个Object Storage实例中使用同一个 API 密钥,可以修改服务 ID 的访问策略以授予访问权限。 与服务 ID 关联的每个 API 密钥都会继承分配给服务 ID 的策略。
使用从现有实例生成的服务 ID
为特定实例创建服务凭证时,该凭证会有一个 API 密钥值。 要在另一个Object Storage实例中使用相同的 API 密钥,请修改与该 API 密钥相关联的服务 ID 的访问策略,以允许其访问附加实例。
直接生成服务 ID
如果希望在创建 API 密钥后限制其可见性,请按照 为服务 ID 创建 API 密钥 中的步骤操作。 如该主题所述,确保在创建时复制或下载密钥。 然后,为服务 ID 配置访问策略,使其能够访问一个或多个Object Storage实例。
API 密钥与 HMAC
一般情况下,IAM API 密钥是 IBM Cloud® Object Storage 的首选认证方法。 支持 HMAC 主要是为了与从 IaaS Object Storage 移植过来的应用程序和传统 S3 应用程序的早期版本兼容。 使用 COS SDK 开发应用程序时,还以本机方式支持 IAM。 系统会自动处理令牌到期和刷新,以简化过程。
有关 IAM 的更多信息,请访问 IAM 入门
有关 HMAC 的更多信息,请访问使用 HMAC 凭证