建立服务到服务授权
要在不同账户的集线器和 DNS 共享 VPC 之间为 VPE 网关配置 DNS 共享,集线器 VPC 管理员必须建立 IAM 服务到服务 ( s2s ) 授权策略。 有关更多信息,请参阅使用授权来授予服务之间的访问权。
注释:
- 如果 DNS 共享 VPC 和中心 VPC 使用的帐户相同或不同,那么作为中心 VPC 管理员,您必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的
DNSBindingConnector许可权。 - 当前,UI 仅允许 所有 VPC 实例 在中心 VPC 上具有
DNSBindingConnector许可权。 要指示“特定”VPC,必须使用 API 或将 API 请求打包在 JSON 文件中以与 CLI 配合使用。 提供了用于 CLI 和 API 的示例代码。
可以通过控制台、CLI、API 或 Terraform 建立 s2s 授权。
在控制台中创建 IAM s2s 授权策略
要在控制台中创建 IAM s2s 授权策略,请按照以下步骤操作:
-
在 IBM Cloud 控制台中,转至 管理> 访问权 (IAM)。 此时将显示 IBM Cloud® Identity and Access Management 页面。
-
从侧面板中,选择 授权。
-
在“管理授权”页面上,单击 “创建”。
-
在“授予服务授权”页面,选择一个源账户:
-
如果要在帐户中设置授权,请选择 此帐户。
-
如果在企业账户中设置授权,请选择另一个账户。
仅对于跨账户配置,通过输入账户 ID 指定授权的源账户。
-
-
对于源服务,从列表中选择 VPC 基础架构服务。
-
选择作用域。 选择 特定资源。
-
选择资源类型。 从列表中,选择 Virtual Private Cloud。
-
选择源服务实例。 选择 所有实例。
-
对于目标服务,从列表中选择 VPC 基础架构服务。
-
对于范围,选择特定资源。
-
选择资源类型。 从列表中,选择 Virtual Private Cloud。
如果要提供目标 VPC,请选择 VPC ID。 操作员:选择字符串等号并输入 VPC 值。
-
在“服务访问权”下的“角色”部分中,选择 DNSBindingConnector。
-
单击授权。
-
返回到“管理权限”页面时,请再次单击 创建,并遵循相同的步骤为其他两个服务设置权限。
从 CLI 创建 IAM s2s 授权策略
要从 CLI 创建 IAM s2s 授权策略,请执行以下步骤:
-
使用 CLI 登录您的账户。 输入密码后,系统会提示您要使用的帐户和区域:
ibmcloud login --sso -
创建 IAM s2s 授权策略:
ibmcloud iam authorization-policy-create is DNSBindingConnector --source-resource-type vpc --target-resource-type vpc
从 CLI 指示特定 VPC 实例
如果 DNS 共享 VPC 和中心 VPC 使用的帐户与中心 VPC 管理员相同,那么必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的 DNSBindingConnector 许可权。
目前,UI Source service instance 仅允许 所有 VPC 实例 在中心 VPC 上具有 DNSBindingConnector 许可权。
要从 CLI 指示特定 VPC,必须将 JSON 文件与 API 请求内容配合使用。 例如:
ibmcloud iam authorization-policy-create --file JSON_FILE
其中 JSON_FILE 包含:
{"type":"authorization","subjects":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"resourceType","value":"vpc"},{"name":"resource","value":"r006-fd189c4f-52a0-4694-abfd-186cb6011a3c"}]}],"roles":[{"role_id":"crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"}],"resources":[{"attributes":[{"name":"accountId","value":"e38cfd44b6e44b249ac75dd5de0cc8aa"},{"name":"serviceName","value":"is"},{"name":"vpcId","value":"r006-ffaedf75-4f44-4ead-989d-cd37816a13d2"}]}]}
使用 API 创建 IAM s2s 授权策略
要使用 API 创建 IAM s2s 授权策略,请执行以下步骤:
-
设置 API 环境。
-
将以下值存储在要在 API 命令中使用的变量中:
export dns_shared_account_id=<dns_shared_vpc_account_id> export hub_account_id=<hub_vpc_account_id> export dns_shared_vpc_id=<dns_shared_vpc_id> export hub_vpc_id=<hub_vpc_id> -
要在不同账户的集线器和 DNS 共享 VPC 之间创建和删除 DNS 解析绑定,集线器 VPC 账户中必须存在 s2s 策略。 这将为 DNS 共享的 VPC 提供中心 VPC 上的
DNSBindingConnector角色。 要创建 s2s 策略,请参考 IAM 策略管理 API 中的policies方法
示例请求
{
"type": "authorization",
"subjects": [
{
"attributes": [
{
"name": "accountId",
"value": "'$dns_shared_account_id'"
},
{
"name": "serviceName",
"value": "is"
},
{
"name": "resourceType",
"value": "vpc"
},
{
"name": "resource",
"value": "'$dns_shared_vpc_id'"
}
]
}
],
"roles": [
{
"role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector"
}
],
"resources": [
{
"attributes": [
{
"name": "accountId",
"value": "'$hub_account_id'"
},
{
"name": "serviceName",
"value": "is"
},
{
"name": "vpcId",
"value": "'$hub_vpc_id'"
}
]
}
]
}
命令示例
curl -sX POST "$iam_api_endpoint/v1/policies" -H "Authorization: Bearer ${iam_token}" -d '$request_body'
使用 API 指示特定 VPC 实例
如果 DNS 共享 VPC 和中心 VPC 使用的帐户与中心 VPC 管理员相同,那么必须创建 IAM 服务到服务授权策略,以授予此 DNS 共享 VPC 对中心 VPC 的 DNSBindingConnector 许可权。
目前,UI Source service instance 仅允许 所有 VPC 实例 在中心 VPC 上具有 DNSBindingConnector 许可权。
以下是一个样本 API,用于授予 DNS 共享的 VPC 在中心 VPC 上具有 DNSBindingConnector 许可权。 请注意,role_id 是 crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector。
{
"type": "authorization",
"subjects": [
{
"attributes": [
{ "name": "accountId", "value": "Account S (Spoke)" }
,
{ "name": "serviceName", "value": "is" }
,
{ "name": "resourceType", "value": "vpc" }
,
{ "name": "resource", "value": "Spoke VPC ID" }
]
}
],
"roles": [
{ "role_id": "crn:v1:bluemix:public:is::::serviceRole:DNSBindingConnector" }
],
"resources": [
{
"attributes": [
{ "name": "accountId", "value": "Account H (Hub)" }
,
{ "name": "serviceName", "value": "is" }
,
{ "name": "vpcId", "value": "Hub VPC ID" }
]
}
]
}