本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立私有 API
建立私有 之前API,請先建立 API Gateway 的VPC端點。接下來,您可以建立私有API並連接資源政策。或者,您可以將VPC端點與私有建立關聯API,以簡化您叫用 的方式API。最後,您可以部署 API。
下列程序說明如何完成此操作。您可以使用 REST API AWS Management Console或 AWS CLI 建立私有 AWS SDK。
必要條件
若要遵循這些步驟,您必須具有完全設定的 VPC。若要了解如何建立 VPC,請參閱 Amazon 使用者指南 中的VPC僅建立 。 VPC 若要在建立 時遵循所有建議步驟VPC,請啟用私有 DNS。如此一來,您就可以在 API內叫用 ,VPC而不必傳遞主機或x-apigw-api-id
標頭。
若要啟用私有 DNS,您的 enableDnsSupport
和 enableDnsHostnames
屬性VPC必須設定為 true
。如需詳細資訊,請參閱 DNS 中的支援VPC和更新 的DNS支援VPC。
步驟 1:在您的 中建立 API Gateway 的VPC端點 VPC
下列程序說明如何建立 API Gateway 的VPC端點。若要建立 API Gateway 的VPC端點,請指定您建立私有 AWS 區域 的 execute-api
網域API。execute-api
網域是用於API執行的API閘道元件服務。
當您為 API Gateway 建立VPC端點時,您可以指定DNS設定。如果您關閉私有 DNS,您只能API使用公有 存取您的 DNS。如需詳細資訊,請參閱問題:我無法API從API閘道VPC端點連線至我的公有。
- AWS Management Console
建立 API Gateway 的介面VPC端點
-
登入 AWS Management Console 並在 開啟 Amazon VPC主控台https://console.aws.amazon.com/vpc/。
-
在導覽窗格中的虛擬私有雲端下,選擇端點。
-
選擇建立端點。
-
(選用) 針對名稱標籤 ,輸入名稱以協助識別VPC端點。
-
在 Service category (服務類別) 中,選擇 AWS
services。
-
在服務 下,在搜尋列中輸入 execute-api
。然後,在 中選擇API閘道服務端點 AWS 區域 ,以建立您的 API。服務名稱應該看起來像 ,com.amazonaws.us-east-1.execute-api
而類型應該是介面 。
-
針對 VPC,選擇您要VPC在其中建立端點的 。
-
(選用) 若要關閉啟用私有DNS名稱 ,請選擇其他設定,然後清除啟用私有DNS名稱 。
-
針對子網路 ,選擇您建立端點網路介面的可用區域。若要改善 的可用性API,請選擇多個子網路。
-
針對安全群組 ,選取要與VPC端點網路介面建立關聯的安全群組。
您選擇的安全群組必須設定為允許來自 中 IP 範圍的TCP連接埠 443 傳入HTTPS流量,VPC或來自 中的其他安全群組VPC。
-
對於政策 ,執行下列其中一項操作:
您可以在建立VPC端點後更新VPC端點政策。如需詳細資訊,請參閱更新VPC端點政策。
-
選擇建立端點。
複製產生的VPC端點 ID,因為您可能會在未來的步驟中使用它。
- 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,因為您可能會在未來的步驟中使用它。
步驟 2:建立私有 API
建立VPC端點後,您可以建立私有 REST API。下列程序說明如何建立私有 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
下列範例示範如何使用 JavaScript v3 API AWS SDK的 建立私有:
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
-
下列範例示範如何使用 for Python API 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
所有 都API無法存取您目前的私有VPCs。使用 資源政策來授予您的 VPCs和VPC端點對私有 的存取權APIs。您可以授予任何 AWS 帳戶中VPC端點的存取權。
您的資源政策應包含 aws:SourceVpc
或 aws:SourceVpce
條件以限制存取。我們建議您識別特定 VPCs和VPC端點,不要建立允許存取所有 VPCs和VPC端點的資源政策。
下列程序說明如何將資源政策連接至您的 API。
- AWS Management Console
-
- 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,APIGateway 會產生新的 Route 53 別名DNS記錄。您可以使用此記錄來叫用私有,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)
-
您可以在API建立VPC端點時或建立端點之後,將其與私有建立關聯。下列程序說明如何將VPC端點與先前建立的 建立關聯API。
- Dissociate a VPC endpoint (AWS Management Console)
-
- 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命令說明如何取消VPC端點與私有 的關聯API:
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
下列 create-deployment 命令顯示如何部署私有 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閘道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。