建立服務對服務授權
若要在不同帳戶的集線器和 DNS 共享 VPC 之間設定 VPE 閘道的 DNS 共享,集線器 VPC 管理員必須建立 IAM 服務對服務 ( s2s ) 授權政策。 如需相關資訊,請參閱使用授權來授與服務之間的存取權。
附註:
- 如果 DNS 共用 VPC 及中心 VPC 使用相同或不同的帳戶,則作為中心 VPC 管理者,您必須建立 IAM 服務對服務授權原則,以將中心 VPC 上的
DNSBindingConnector許可權提供給此 DNS 共用 VPC。 - 目前,使用者介面僅容許 所有 VPC 實例 在中心 VPC 上具有
DNSBindingConnector許可權。 若要指出「特定」VPC,您必須使用 API 或在 JSON 檔案中包裝 API 要求,以與 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 服務對服務授權原則,以將中心 VPC 上的 DNSBindingConnector 許可權提供給此 DNS 共用 VPC。
目前,使用者介面 Source service instance 僅容許 所有 VPC 實例 在中心 VPC 上具有 DNSBindingConnector 許可權。
若要從 CLI 指出特定的 VPC,您必須使用具有 API 要求內容的 JSON 檔案。 例如:
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 解析綁定,s2s策略必須存在於中心 VPC 帳戶中。 這會在中心 VPC 上為 DNS 共用 VPC 提供
DNSBindingConnector角色。 要創建s2s政策,請參閱policies方法中的 IAM 策略管理 API
要求範例
{
"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 服務對服務授權原則,以將中心 VPC 上的 DNSBindingConnector 許可權提供給此 DNS 共用 VPC。
目前,使用者介面 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" }
]
}
]
}