创建可信概要文件
您可以使用可信概要文件来授予对帐户中资源的不同 IBM Cloud® 身份访问权。 根据公司目录中的 SAML 属性,使用条件自动授予联合用户对您帐户的访问权。 或者,使用可信配置文件为在计算资源中运行的应用程序设置精细授权。 这样,您就无需为计算资源创建服务标识或 API 密钥。 您还可以与其他帐户中的 IBM Cloud 服务或服务标识建立信任,以授予跨帐户访问权。
用户无需是帐户的成员即可采用可信概要文件。 如果用户的身份提供者 (IdP) 与信任条件中使用的 IdP 匹配,那么用户可以使用概要文件。
最初创建可信概要文件时,可以使用以下实体类型构建信任条件: 联合用户,计算资源,服务标识或 IBM Cloud 服务。 创建可信概要文件后,可以添加更多条件以组合同一概要文件中的多个实体类型。
您可以使用 Activity Tracker 来监视哪些联合用户计算资源,服务标识以及 IBM Cloud 服务应用可信概要文件。 有关更多信息,请参阅 监视可信概要文件的登录会话。
准备工作
如果您具有以下访问权,那么可以创建可信概要文件:
- 帐户所有者
- 所有账户管理服务的管理员角色
- IAM Identity Service上的管理员角色。 有关更多信息,请参阅 IAM 身份服务。
在控制台中与联合用户建立信任
完成以下步骤以定义哪些联合用户可以访问特定资源:
-
在 IBM Cloud 控制台中,单击 管理 > 访问权 (IAM),然后选择 可信概要文件。
-
点击创建个人资料。
-
通过提供名称和描述来描述概要文件,然后单击 继续。
在描述中,提供可用于此可信概要文件的操作列表。
-
您可以先创建可信概要文件,然后再通过选择 稍后决定来添加详细信息。 或者,通过完成以下步骤来建立信任:
-
从列表中选择 联合用户 作为可信实体类型。
-
选择 由 IBMid联合的用户 或 由 IBM Cloud App ID 联合的用户作为认证方法,并输入您在步骤 1 中启用的缺省身份提供者 (IdP)。
如果要创建可信概要文件以使用 IBM Cloud App ID的用户,请以 App ID 用户身份创建可信概要文件,同样为 IBMid创建可信概要文件。 这样,您自己的 SAML 属性可以让您了解如何构造可信概要文件条件。 具有相同 IdP 的其他用户可以具有不同的 SAML 属性。 仅将您自己的属性用作提示。 要在声明中使用不同于您自己的属性,请手动输入这些属性。
-
根据 IdP 数据添加条件,以定义联合用户可以应用概要文件的方式和时间。
- 通过单击 添加条件,可以定义多个条件。 联合用户必须满足要包含在可信概要文件中的所有条件。 有关用于创建条件的字段的更多信息,请参阅 IAM 条件属性。
- 单击 查看身份提供者 (IdP) 数据 以从 IdP中搜索您自己的个人数据中的属性名称和值。 有关更多信息,请参阅 使用 IdP 数据来构建可信概要文件。
-
定义用户在必须重新认证之前可以应用概要文件的时间长度的会话持续时间。
-
-
单击继续。
-
(可选) 分配对可信概要文件的访问权。
-
或者,单击 创建 而不分配任何访问权。
有关用于为可信概要文件创建条件的字段的更多信息,请参阅 IAM 条件属性。
在控制台中使用计算资源建立信任
完成以下步骤以设置对授予对计算资源的访问权的更好控制。
IBM Cloud Kubernetes Service 仅支持版本 1.21 和更高版本的可信概要文件。 免费 IBM Cloud Kubernetes Service 集群仅创建较早版本。 您可以选择使用标准套餐创建具有较早版本的集群,因此请确保选择版本 1.21 或更高版本。
-
在 IBM Cloud 控制台中,单击 管理 > 访问权 (IAM),然后选择 可信概要文件。
-
点击创建个人资料。
-
通过提供名称和描述来描述概要文件,然后单击 继续。
-
您可以先创建可信概要文件,然后再通过选择 稍后决定来添加详细信息。 或者,通过完成以下步骤来建立信任:
- 选择 计算资源,然后从列表中选择计算服务类型。
- 如果选择 所有服务资源选项,那么可以通过单击 添加条件来定义多个条件以过滤所选计算服务类型的资源。 这些条件基于属性 (例如资源组或位置),并应用于所有现有资源和未来资源。 资源必须满足要包含在可信概要文件中的所有条件。
您输入的 Kubernetes 名称空间和服务帐户名称不必存在。 任何将来具有这些名称的名称空间或服务帐户都可以建立信任。 要列出现有名称空间,请登录到集群并运行
kubectl get ns
。 要列出现有服务帐户,请登录到集群并运行kubectl get sa -n <namespace>
。 您还可以为这两者输入default
。 有关更多信息,请参阅 在 Kubernetes 和 Red Hat OpenShift 集群中使用可信概要文件。- 如果选择 特定资源,那么可以直接在没有条件的情况下与一个或多个现有计算资源实例建立信任。 例如,Kubernetes 集群。
-
单击继续。
-
(可选) 分配对可信概要文件的访问权。
-
或者,单击 创建 而不分配任何访问权。
有关用于为可信概要文件创建条件的字段的更多信息,请参阅 IAM 条件属性。
在控制台中使用 IBM Cloud 服务建立信任
帐户或其他帐户中的 IBM Cloud 服务可能需要令牌才能在您的帐户中运行操作。
- 示例 1
- 另一个帐户中的项目服务实例可以采用可信概要文件来安全地在您的帐户中部署体系结构,而无需密钥轮换。 有关更多信息,请参阅 使用可信概要文件来授权项目部署体系结构。
- 示例 2
- 专用目录是由 CRN 标识的目录管理服务的实例。 您可能希望在独立于包含商品目录的帐户中验证专用商品目录中的产品。 您可以授予专用目录访问权,以通过在目标帐户中创建可信概要文件在目标帐户中创建用于验证的资源。 然后,通过使用目录 CRN 将服务实例链接到可信概要文件来建立与目录的信任。 有关更多信息,请参阅 设置目标帐户以进行验证。
使用可信概要文件在帐户之间共享资源适用于一组有限的服务,并且不是跨帐户访问服务的常规方法。
完成以下步骤以定义 IBM Cloud 服务如何访问帐户中的特定资源:
-
向服务管理员询问唯一标识服务实例的云资源名称 (CRN)。 CRN 用于授权操作。
服务管理员可以通过转至“导航菜单”图标
> 资源列表 并单击目标服务的名称来查找 CRN。 在 详细信息 部分中,复制 CRN。 对于专用目录 CRN,请转至 管理 > 目录 > 专用目录 并选择专用目录。 单击操作 ... > 编辑目录详细信息 以查找目录 CRN。
-
在 IBM Cloud 控制台中,单击 管理 > 访问权 (IAM),然后选择 可信概要文件。
-
点击创建个人资料。
-
通过提供名称和描述来定义概要文件,然后单击 继续。
在描述中,提供可用于可信概要文件的操作列表。
-
您可以先创建可信概要文件,然后再通过选择 稍后决定来添加详细信息。 或者,通过完成以下步骤来建立信任:
- 选择 IBM Cloud® 服务。
- 输入服务管理员提供给您的 CRN。
IBM Cloud 服务是不使用条件来建立信任的静态身份。 而是通过使用 CRN 创建与可信实体的直接链接来建立信任。
-
单击继续。
-
(可选) 分配对可信概要文件的访问权。
-
或者,单击 创建 而不分配任何访问权。
在控制台中使用服务标识建立信任
您可以使用可信概要文件来授予服务标识跨帐户访问权和访问权以调用经典基础架构服务。 要授予一个帐户中的服务标识对目标帐户的访问权,请在目标帐户中创建可信概要文件。 完成以下步骤以定义服务标识如何访问帐户中的特定资源:
-
请其他帐户中的管理员提供用于标识服务标识的服务标识值。
管理员可以通过转至 管理 > 访问权 (IAM) > 服务标识并选择要作为目标的服务标识来查找服务标识值。 单击 详细信息 并复制以
ServiceId
开头的标识。 -
在 IBM Cloud 控制台中,单击 管理 > 访问权 (IAM),然后选择 可信概要文件。
-
点击创建个人资料。
-
通过提供名称和描述来定义概要文件,然后单击 继续。
在描述中,提供可用于此可信概要文件的操作的列表。
-
您可以先创建可信概要文件,然后再通过选择 稍后决定来添加详细信息。 或者,通过完成以下步骤来建立信任:
- 选择服务编号
- 输入管理员提供给您的服务标识值。
-
单击继续。
-
(可选) 分配对可信概要文件的访问权。
-
或者,单击 创建 而不分配任何访问权。
服务标识是不使用条件来建立信任的静态标识。 而是通过使用服务标识元数据中的标识值来创建与可信实体的直接链接,从而建立信任。
分配对可信配置文件的访问权限
在与联合用户,计算资源,IBM Cloud 服务或服务标识建立信任后,可以分配访问权。
仅当您的帐户链接到 Softlayer 帐户时,才能分配经典基础架构访问权。
- 分配访问权。
- 通过将可信概要文件添加到一个或多个访问组来分配对该可信概要文件的访问权。 这样,您可以使用已创建的访问组中存在的策略。
- 选择 访问组,然后选择要将可信概要文件添加到的所有组。 您只能将用户分配到您有权限管理的访问组中。
- 单击添加。
- 使用访问策略分配对可信概要文件的访问权。
- 选择 访问策略。 根据您的访问权限,您可以分配IAM策略和经典基础设施权限。
- 选择单个服务或一组服务,例如 所有启用身份和访问权的服务,所有帐户管理服务或 所有 IAM 帐户管理服务。 然后,单击下一步。
- 根据所选属性限定对 所有资源 或 特定资源 的访问范围。 然后,单击下一步。
- 选择任意角色和权限组合来定义访问范围,然后点击 “审核”。
- 单击 添加 以将策略配置添加到摘要。
- 您可以通过选择用户,设备或服务,然后选择粒度许可权的任意组合来分配 经典基础架构 访问权。
- 通过将可信概要文件添加到一个或多个访问组来分配对该可信概要文件的访问权。 这样,您可以使用已创建的访问组中存在的策略。
- 单击创建。
使用 CLI 与联合用户建立信任
完成以下步骤以定义哪些联合用户可以访问特定资源:
-
运行以下命令创建可信的个人资料:
ibmcloud iam trusted-profile-create my-profile -d "sample trusted profile"
有关更多信息,请参阅 CLI 参考。
-
要为可信概要文件创建条件,请运行
ibmcloud iam trusted-profile-rule-create
命令:ibmcloud iam trusted-profile-rule-create my-profile --name my-rule --type Profile-SAML --conditions claim:cn,operator:EQUALS,value:my_user --realm-name https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20 --expiration 1200
有关更多信息,请参阅 CLI 参考。
-
通过运行以下命令,为帐户中的所有资源创建具有
Viewer
角色的访问策略:ibmcloud iam trusted-profile-policy-create --roles Viewer
有关更多信息,请参阅 CLI 参考。
使用 CLI 建立对计算资源的信任
完成以下步骤以设置对授予对计算资源的访问权的更好控制。
IBM Cloud Kubernetes Service 仅支持版本 1.21 和更高版本的可信概要文件。 免费 IBM Cloud Kubernetes Service 集群仅创建较早版本。 您可以选择使用标准套餐创建具有较早版本的集群,因此请确保选择版本 1.21 或更高版本。
-
运行以下命令创建可信的个人资料:
ibmcloud iam trusted-profile-create sample-compute-profile -d "sample trusted profile for compute resources"
有关更多信息,请参阅 CLI 参考。
-
使用
ibmcloud iam trusted-profile-rule-create
命令为可信概要文件创建条件:ibmcloud iam trusted-profile-rule-create sample-compute-profile --name cr-rule --type Profile-CR --conditions claim:namespace,operator:EQUALS,value:default --conditions claim:crn,operator:EQUALS,value:crn:test:bluemix:public:containers-kubernetes:us-south:a/test:: --cr-type IKS_SA
有关更多信息,请参阅 CLI 参考。
您还可以创建直接链接:
ibmcloud iam trusted-profile-link-create sample-compute-profile --name my_link --cr-type IKS_SA --link-name default --link-namespace default --link-crn my_compute_resource_crn
有关更多信息,请参阅 CLI 参考。
-
运行以下命令创建访问策略:
ibmcloud iam trusted-profile-policy-create --roles Viewer
有关更多信息,请参阅 CLI 参考。
使用 CLI 建立与 IBM Cloud 服务的信任
另一个帐户中的 IBM Cloud 服务可能需要令牌才能在您的帐户中执行操作。 完成以下步骤以定义 IBM Cloud 服务如何访问帐户中的特定资源:
-
向另一个帐户中服务的管理员询问唯一标识服务实例的 CRN。 CRN 用于授权操作。
服务管理员可以通过转至“导航菜单”图标
> 资源列表 并单击目标服务来查找 CRN。 在 详细信息 部分中,复制 CRN。
-
使用直接链接创建信任关系:
ibmcloud iam trusted-profile-link-create sample-cloudservice-profile --name my_cloudservice_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
有关更多信息,请参阅 CLI 参考。
-
运行以下命令创建访问策略:
ibmcloud iam trusted-profile-policy-create --roles Viewer
有关更多信息,请参阅 CLI 参考。
使用 CLI 建立对服务标识的信任
完成以下步骤以定义服务标识如何访问帐户中的特定资源:
您可以使用可信概要文件来授予服务标识跨帐户访问权以及调用经典基础架构服务的访问权。
-
请其他帐户中的管理员提供用于标识服务标识的服务标识值。
管理员可以通过转至 管理 > 访问权 (IAM) > 服务标识 并选择要作为目标的服务标识来查找服务标识值。 单击 详细信息 并复制以
ServiceId
开头的标识。 -
使用直接链接创建信任关系:
ibmcloud iam trusted-profile-link-create sample-serviceid-profile --name my_serviceid_link --link-crn `crn:version:cname:ctype:service-name:location:scope:service-instance:resource-type:resource`
有关更多信息,请参阅 CLI 参考。
-
运行以下命令创建访问策略:
ibmcloud iam trusted-profile-policy-create --roles Viewer
有关更多信息,请参阅 CLI 参考。
使用 CLI 分配对可信概要文件的访问权
在与联合用户,计算资源,IBM Cloud 服务或服务标识建立信任后,可以分配访问权。
仅当您的帐户链接到 Softlayer 帐户时,才能分配经典基础架构访问权。
使用命令 trusted-profile-policy-create
将访问策略分配给可信概要文件。 以下示例在 所有帐户管理服务上分配具有管理员角色的策略:
ibmcloud iam trusted-profile-policy-create Profile-36f5c562-1t36-4442-b7f0-2663c85386f1 --roles Administrator --attributes serviceType=service
使用 API 与联合用户建立信任
完成以下步骤以定义哪些联合用户可以访问特定资源:
-
通过指定帐户标识来创建可信概要文件。
curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{ "name": "My Nice Profile", "description": "My Nice Profile - desc", "account_id": "ACCOUNT_ID" }'
在描述中,提供可用于此可信概要文件的操作列表。
-
为可信概要文件创建条件。 对于联合用户,将
type
属性设置为Profile-SAML
。realm-name
是 IdP URL。 有关更多信息,请参阅 IAM 身份服务 API。curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{ "type": "Profile-SAML", "realm_name": "https://www.example.org/my-nice-idp", "expiration": 43200, "conditions": [ { "claim": "groups", "operator": "EQUALS", "value": "\"cloud-docs-dev\"" } ] }'
每个可信概要文件的声明规则数限制为 20。
-
(可选) 分配对可信概要文件的访问权。
使用 API 与计算资源建立信任
完成以下步骤以设置对授予对计算资源的访问权的更好控制。
IBM Cloud Kubernetes Service 仅支持版本 1.21 和更高版本的可信概要文件。 免费 IBM Cloud Kubernetes Service 集群仅创建较早版本。 您可以选择使用标准套餐创建具有较早版本的集群,因此请确保选择版本 1.21 或更高版本。
-
通过指定帐户标识来创建可信概要文件。
curl -X POST 'https://iam.cloud.ibm.com/v1/profiles' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{ "name": "My Nice Profile", "description": "My Nice Profile - desc", "account_id": "ACCOUNT_ID" }'
在描述中,提供可用于此可信概要文件的操作列表。
-
通过指定仅以需要访问的资源为目标的条件,为可信概要文件创建遵循最小特权原则的声明规则。 条件适用于所有现有未来资源。 您还可以创建与特定现有资源的直接链接。
- 创建条件
- 对于计算资源,将
type
属性设置为Profile-CR
。 有关更多信息,请参阅 IAM 身份服务 API。
curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/rules' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{ "type": "Profile-CR", "conditions": [ { "claim": "namespace", "operator": "EQUALS", "value": "\"default123\"" } ] }'
每个可信概要文件的声明规则数限制为 20。
- 创建直接链接
- 您可以建立与特定现有资源的直接链接。
curl -X POST 'https://iam.cloud.ibm.com/v1/profiles/PROFILE_ID/links' -H 'Authorization: Bearer TOKEN' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{ "name": "my link", "cr_type": "VSI", "link": { "crn": "crn:v1:staging:public:iam-identity::a/18e3020749ce4744b0b472466d61fdb4::computeresource:Fake-Compute-Resource", "namespace": "default", "name": "my compute resource name" } }'
-
(可选) 分配对可信概要文件的访问权。
使用 API 分配对可信概要文件的访问权
在与联合用户,计算资源,IBM Cloud 服务或服务标识建立信任后,可以分配访问权。
仅当您的帐户链接到 Softlayer 帐户时,才能分配经典基础架构访问权。
以下示例在 所有帐户管理服务上分配具有管理员角色的策略:
curl -X POST \
'https://iam.cloud.ibm.com/v1/policies' \
-H 'Authorization: $TOKEN'\
-H 'Content-Type: application/json'\
-d '{
"type": "access",
"subjects": [
{
"attributes": [
{
"name": "iam_id",
"value": "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"
}
]
}'
],
"roles":[
{
"role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
}
],
"resources":[
{
"attributes": [
{
"name": "accountId",
"value": "$ACCOUNT_ID"
},
{
"name": "serviceType",
"value": "platform-service"
}
]
}
]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
.name("iam_id")
.value("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9")
.build();
PolicySubject policySubjects = new PolicySubject.Builder()
.addAttributes(subjectAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Administrator")
.build();
ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
.name("accountId")
.value("exampleAccountId")
.operator("stringEquals")
.build();
ResourceAttribute serviceTypeResourceAttribute = new ResourceAttribute.Builder()
.name("serviceType")
.value("platform-service")
.operator("stringEquals")
.build();
PolicyResource policyResources = new PolicyResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceTypeResourceAttribute)
.build();
CreatePolicyOptions options = new CreatePolicyOptions.Builder()
.type("access")
.subjects(Arrays.asList(policySubjects))
.roles(Arrays.asList(policyRoles))
.resources(Arrays.asList(policyResources))
.build();
Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();
System.out.println(policy);
const policySubjects = [
{
attributes: [
{
name: 'iam_id',
value: "Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9",
},
],
},
];
const policyRoles = [
{
role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
},
];
const accountIdResourceAttribute = {
name: 'accountId',
value: 'exampleAccountId',
operator: 'stringEquals',
};
const serviceTypeResourceAttribute = {
name: 'serviceType',
value: 'platform-service',
operator: 'stringEquals',
};
const policyResources = [
{
attributes: [accountIdResourceAttribute, serviceTypeResourceAttribute]
},
];
const params = {
type: 'access',
subjects: policySubjects,
roles: policyRoles,
resources: policyResources,
};
iamPolicyManagementService.createPolicy(params)
.then(res => {
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
})
.catch(err => {
console.warn(err)
});
policy_subjects = PolicySubject(
attributes=[SubjectAttribute(name='iam_id', value='Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9')])
policy_roles = PolicyRole(
role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
name='serviceType', value='platform-service')
policy_resources = PolicyResource(
attributes=[account_id_resource_attribute,
service_type_resource_attribute])
policy = iam_policy_management_service.create_policy(
type='access',
subjects=[policy_subjects],
roles=[policy_roles],
resources=[policy_resources]
).get_result()
print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
Name: core.StringPtr("iam_id"),
Value: core.StringPtr("Iam-Profile-35f55552-1e36-4442-z7f0-2673c85386f9"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("accountId"),
Value: core.StringPtr("ACCOUNT_ID"),
Operator: core.StringPtr("stringEquals"),
}
serviceTypeResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
Name: core.StringPtr("serviceType"),
Value: core.StringPtr("platform-service"),
Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
Attributes: []iampolicymanagementv1.ResourceAttribute{
*accountIDResourceAttribute, *serviceTypeResourceAttribute},
}
options := iamPolicyManagementService.NewCreatePolicyOptions(
"access",
[]iampolicymanagementv1.PolicySubject{*policySubjects},
[]iampolicymanagementv1.PolicyRole{*policyRoles},
[]iampolicymanagementv1.PolicyResource{*policyResources},
)
policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
受信任的配置文件限制
用户通过应用受信任的配置文件登录 IBM Cloud 时,无法使用支持中心。