本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
創建一個私人 API
在建立私有之前API,請先為API閘道建立VPC端點。接下來,您創建您的私人API並附加一個資源策略。或者,您可以將VPC端點與私有端點API相關聯,以簡化調用API. 最後,您部署API.
下列程序說明如何完成此作業。您可以RESTAPI使用 AWS Management Console、 AWS CLI 或建立私有的 AWS SDK。
必要條件
要遵循這些步驟,您必須完全配置VPC。若要了解如何建立VPC,請參閱 Amazon VPC 使用者指南中的建立VPC僅限。要在創建時遵循所有建議步驟VPC,請啟用私有DNS。通過這種方式,您可以API在 a 中調用您的,VPC而無需傳遞 Host 或x-apigw-api-id
頭文件。
若要啟用私有DNS,您的enableDnsSupport
和enableDnsHostnames
屬性VPC必須設定為true
。如需詳細資訊,請參閱DNS您的 VPC. VPC DNS
步驟 1:在您的API網關中創建VPC端點 VPC
下列程序顯示如何建立API閘道的VPC端點。若要為API閘道建立VPC端點,請為您建立私人的 AWS 區域 位置指定execute-api
網域API。execute-api
網域是要API執行的API閘道元件服務。
當您為API閘道建立VPC端點時,請指定DNS設定。如果您關閉私人DNS,則只能API使用公共訪問您的DNS。如需詳細資訊,請參閱問題:我無法API從 API Gateway VPC 端點連線到我的公用。
- AWS Management Console
建立API閘道的介面VPC端點
-
登錄 AWS Management Console 並在打開 Amazon VPC 控制台https://console.aws.amazon.com/vpc/。
-
在導覽窗格中的虛擬私有雲端下,選擇端點。
-
選擇建立端點。
-
(選擇性) 在 Name 標籤中,輸入名稱以協助識別您的VPC端點。
-
在 Service category (服務類別) 中,選擇 AWS
services。
-
在「服務」下方的搜尋列中,輸入execute-api
。然後,選擇要在 AWS 區域 其中創建的 API Gateway 服務端點API。服務名稱應該是類似的com.amazonaws.us-east-1.execute-api
,類型應該是接口。
-
在中 VPC,選擇您VPC要在其中建立端點的端點。
-
(選擇性) 若要關閉「啟用私人DNS名稱」,請選擇「其他設定」,然後清除「啟用私人DNS名稱」。
-
對於子網路,請選擇您在其中建立端點網路介面的可用區域。若要改善您的可用性API,請選擇多個子網路。
-
對於「安全性」群組,請選取要與VPC端點網路介面關聯的安全性群組。
您選擇的安全性群組必須設定為允許來自您VPC或其他安全性群組中某個 IP 範圍的TCP連接埠 443 輸入HTTPS流量。VPC
-
針對「原則」,執行下列其中一個動作:
您可以在建立VPC端點之後更新VPC端點策略。如需詳細資訊,請參閱更新VPC端點策略。
-
選擇建立端點。
複製產生的VPC端點 ID,如您在 future 步驟中可能會使用的那樣。
- AWS CLI
下列create-vpc-endpoint指令可用來建立VPC端點:
aws ec2 create-vpc-endpoint \
--vpc-id vpc-1a2b3c4d \
--vpc-endpoint-type Interface \
--service-name com.amazonaws.us-east-1.execute-api \
--subnet-ids subnet-7b16de0c \
--security-group-id sg-1a2b3c4d
複製產生的VPC端點 ID,如您在 future 步驟中可能會使用的那樣。
步驟 2:建立私人 API
建立VPC端點之後,您會建立私有端點RESTAPI。下列程序顯示如何建立專用API。
- AWS Management Console
-
完成上述步驟後,您可以按照中開始使用主RESTAPI控台的說明為此設定方法和整合API,但無法部署API. 要部署您的API,請按照步驟 3 操作,並將資源策略附加到您的API.
- AWS CLI
下面的create-rest-api命令顯示了如何創建一個私有API:
aws apigateway create-rest-api \
--name 'Simple PetStore (AWS CLI, Private)' \
--description 'Simple private PetStore API' \
--region us-west-2 \
--endpoint-configuration '{ "types": ["PRIVATE"] }'
成功的呼叫會傳回類似如下的輸出:
{
"createdDate": "2017-10-13T18:41:39Z",
"description": "Simple private PetStore API",
"endpointConfiguration": {
"types": "PRIVATE"
},
"id": "0qzs2sy7bh",
"name": "Simple PetStore (AWS CLI, Private)"
}
完成上述步驟後,您可以按照中教學課程:使用 AWS 開發套件或建立 REST API AWS CLI的說明為此設定方法和整合API,但無法部署API. 要部署您的API,請按照步驟 3 操作,並將資源策略附加到您的API.
- SDK JavaScript v3
下面的例子演示了如何API通過使用 AWS SDK為 JavaScript v3 創建一個私有:
import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway";
const apig = new APIGatewayClient({region:"us-east-1"});
const input = { // CreateRestApiRequest
name: "Simple PetStore (JavaScript v3 SDK, private)", // required
description: "Demo private API created using the AWS SDK for JavaScript v3",
version: "0.00.001",
endpointConfiguration: { // EndpointConfiguration
types: [ "PRIVATE"],
},
};
export const handler = async (event) => {
const command = new CreateRestApiCommand(input);
try {
const result = await apig.send(command);
console.log(result);
} catch (err){
console.error(err)
}
};
成功的呼叫會傳回類似如下的輸出:
{
apiKeySource: 'HEADER',
createdDate: 2024-04-03T17:56:36.000Z,
description: 'Demo private API created using the AWS SDK for JavaScript v3',
disableExecuteApiEndpoint: false,
endpointConfiguration: { types: [ 'PRIVATE' ] },
id: 'abcd1234',
name: 'Simple PetStore (JavaScript v3 SDK, private)',
rootResourceId: 'efg567',
version: '0.00.001'
}
完成上述步驟後,您可以按照中教學課程:使用 AWS 開發套件或建立 REST API AWS CLI的說明為此設定方法和整合API,但無法部署API. 要部署您的API,請按照步驟 3 操作,並將資源策略附加到您的API.
- Python SDK
-
下面的例子演示了如何API通過使用 Python 創建一個私有: AWS SDK
import json
import boto3
import logging
logger = logging.getLogger()
apig = boto3.client('apigateway')
def lambda_handler(event, context):
try:
result = apig.create_rest_api(
name='Simple PetStore (Python SDK, private)',
description='Demo private API created using the AWS SDK for Python',
version='0.00.001',
endpointConfiguration={
'types': [
'PRIVATE',
],
},
)
except botocore.exceptions.ClientError as error:
logger.exception("Couldn't create private API %s.", error)
raise
attribute=["id", "name", "description", "createdDate", "version", "apiKeySource", "endpointConfiguration"]
filtered_data ={key:result[key] for key in attribute}
result = json.dumps(filtered_data, default=str, sort_keys='true')
return result
成功的呼叫會傳回類似如下的輸出:
"{\"apiKeySource\": \"HEADER\", \"createdDate\": \"2024-04-03 17:27:05+00:00\", \"description\": \"Demo private API created using the AWS SDK for \", \"endpointConfiguration\": {\"types\": [\"PRIVATE\"]}, \"id\": \"abcd1234\", \"name\": \"Simple PetStore (Python SDK, private)\", \"version\": \"0.00.001\"}"
完成上述步驟後,您可以按照中教學課程:使用 AWS 開發套件或建立 REST API AWS CLI的說明為此設定方法和整合API,但無法部署API. 要部署您的API,請按照步驟 3 操作,並將資源策略附加到您的API.
步驟 3:為非公開設定資源策略 API
所有人都無法訪問您當前的私人APIVPCs。使用資源策略授予您VPCs和VPC端點對您私有的訪問權限APIs。您可以授予任何 AWS 帳戶中VPC端點的存取權。
您的資源策略應包含aws:SourceVpc
或限制存取的aws:SourceVpce
條件。我們建議您識別特定VPC端點VPCs和端點,並且不要建立允許所有VPC端點VPCs和端點存取的資源策略。
下列程序顯示如何將資源策略附加至您的API.
- AWS Management Console
-
在 https://console.aws.amazon.com/ap igateway 登入API閘道主控台。
選擇一個RESTAPI。
-
在主導覽窗格中,選擇資源政策。
-
選擇 建立政策。
-
選擇 「選取範本」,然後選擇「來源」VPC。
-
將{{vpceID}}
(包括大括號)替換為您的VPC端點 ID。
-
選擇 Save changes (儲存變更)。
- AWS CLI
以下update-rest-api命令顯示如何將資源策略附加到現有的API:
aws apigateway update-rest-api \
--rest-api-id a1b2c3 \
--patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument
\"}"'
您可能還想控制哪些資源可以訪問您的VPC端點。要控制哪些資源可以訪問您的VPC端點,請將端點策略附加到您的VPC端點。如需詳細資訊,請參閱APIs在API閘道中使用私有VPC端點政策。
(選擇性) 將端點與私用VPC端點建立關聯或取消關聯 API
將VPC端點與私有端點建立關聯時API,API閘道會產生新的 Route 53 別名DNS記錄。您可以使用此記錄來調用您的 private,APIs就像您做公開一樣,APIs而不會覆蓋Host
標題或傳遞x-apigw-api-id
標題。
生成的基礎URL格式如下:
https://{rest-api-id}
-{vpce-id}
.execute-api.{region}
.amazonaws.com/{stage}
- Associate a VPC endpoint (AWS Management Console)
-
您可以在建立VPC端點API時或建立後將端點與您的私有端點建立關聯。下列程序顯示如何將VPC端點與先前建立的端點相關聯API。
將端點與私用VPC端點建立關聯 API
在 https://console.aws.amazon.com/ap igateway 登入API閘道主控台。
-
選擇您的私人API。
-
在主導覽窗格中,選擇資源政策。
-
編輯您的資源策略以允許來自其他VPC端點的呼叫。
-
在主導覽窗格中,選擇 [API設定]。
-
在API詳細資料區段中,選擇編輯。
-
對於VPC端點 IDs,選取其他VPC端點IDs。
-
選擇 Save (儲存)。
-
重新部署您API的更改以使更改生效。
- Dissociate a VPC endpoint (AWS Management Console)
-
取消端點與私用VPC端點的關聯 REST API
在 https://console.aws.amazon.com/ap igateway 登入API閘道主控台。
-
選擇您的私人API。
-
在主導覽窗格中,選擇資源政策。
-
編輯您的資源策略以移除您想要與私人分離的VPC端點的提及。API
-
在主導覽窗格中,選擇 [API設定]。
-
在API詳細資料區段中,選擇編輯。
-
對於VPC端點 IDs,請選擇 X 以解除端點的VPC關聯。
-
選擇 Save (儲存)。
-
重新部署您API的更改以使更改生效。
- Associate a VPC endpoint (AWS CLI)
-
下列create-rest-api指令顯示如何在API建立時關聯VPC端點:
aws apigateway create-rest-api \
--name Petstore \
--endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \
--region us-west-2
輸出將如下所示:
{
"apiKeySource": "HEADER",
"endpointConfiguration": {
"types": [
"PRIVATE"
],
"vpcEndpointIds": [
"vpce-0212a4ababd5b8c3e",
"vpce-0393a628149c867ee"
]
},
"id": "u67n3ov968",
"createdDate": 1565718256,
"name": "Petstore"
}
以下update-rest-api指令顯示如何將VPC端點與API您已建立的端點相關聯:
aws apigateway update-rest-api \
--rest-api-id u67n3ov968 \
--patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \
--region us-west-2
輸出將如下所示:
{
"name": "Petstore",
"apiKeySource": "1565718256",
"tags": {},
"createdDate": 1565718256,
"endpointConfiguration": {
"vpcEndpointIds": [
"vpce-0212a4ababd5b8c3e",
"vpce-0393a628149c867ee",
"vpce-01d622316a7df47f9"
],
"types": [
"PRIVATE"
]
},
"id": "u67n3ov968"
}
重新部署您API的更改以使更改生效。
- Disassociate a VPC endpoint (AWS CLI)
-
下列update-rest-api命令顯示如何取消端點與私API用VPC端點的關聯:
aws apigateway update-rest-api \
--rest-api-id u67n3ov968 \
--patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \
--region us-west-2
輸出將如下所示:
{
"name": "Petstore",
"apiKeySource": "1565718256",
"tags": {},
"createdDate": 1565718256,
"endpointConfiguration": {
"vpcEndpointIds": [
"vpce-0212a4ababd5b8c3e",
"vpce-01d622316a7df47f9"
],
"types": [
"PRIVATE"
]
},
"id": "u67n3ov968"
}
重新部署您API的更改以使更改生效。
步驟 4:部署私有 API
若要部署您的API,您可以建立API部署並將其與階段產生關聯。下列程序顯示如何部署您的私有API。
- AWS Management Console
若要部署私有 API
選擇您的API.
選擇部署API。
針對階段,選取新階段。
針對階段名稱,輸入階段名稱。
在描述,請輸入描述。
選擇部署。
- AWS CLI
下面的創建部署命令顯示如何部署私有:API
aws apigateway create-deployment --rest-api-id a1b2c3 \
--stage-name test \
--stage-description 'Private API test stage' \
--description 'First deployment'
疑難排解私人 API
以下提供建立私人時可能遇到的錯誤和問題的疑難排解建議API。
問題:我無法API從 API Gateway VPC 端點連線到我的公用
當您建立時VPC,您可以進行DNS設定。我們建議您DNS為您的VPC. 如果您選擇關閉私人DNS,則只能API通過公共訪問您的DNS。
如果啟用私有DNS,則無法API從端點存取公用API閘道的預設VPC端點。您可以使API用自訂網域名稱存取。
如果您建立區域自訂網域名稱,請使用 A 類型別名記錄,如果您建立邊緣最佳化的自訂網域名稱,您的記錄類型沒有任何限制。您可以在DNS啟用私人APIs的情況下訪問這些公共。如需詳細資訊,請參閱問題:我API從API閘道VPC端點連線到公用。
問題:我的API退貨 {"Message":"User:
anonymous is not authorized to perform: execute-api:Invoke on resource:
arn:aws:execute-api:us-east-1:********/****/****/"}
在您的資源策略中,如果您將主參與者設定為 AWS 主參與者,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
""Principal": {
"AWS": [
"arn:aws:iam::account-id:role/developer",
"arn:aws:iam::account-id:role/Admin"
]
},
"Action": "execute-api:Invoke",
"Resource": [
"execute-api:/*"
]
},
...
}
您必須為您的每個方法使用AWS_IAM
授權API,否則API返回以前的錯誤消息。如需如何開啟方法AWS_IAM
授權的詳細指示,請參閱API閘道RESTAPIs中的方法。
問題:我無法判斷我的VPC端點是否與我的相關聯 API
如果您將端點與私有VPC端點建立關聯或解除關聯API,則需要重新部署. API 由於DNS傳播,更新作業可能需要幾分鐘才能完成。在此期間,您API可以使用,但新產生的DNS傳輸DNSURLs可能仍在進行中。如果幾分鐘後,您的新URLs版本尚未解決DNS,我們建議您API重新部署.