【发布时间】:2019-12-02 19:44:49
【问题描述】:
我编写的代码似乎是我需要的,但是它不起作用并且我收到 401 错误(身份验证)我已经尝试了所有方法:1. 服务帐户权限 2. 创建密钥 id 和密钥(不知道如何使用这些来获取访问令牌) 3. 基本上,过去 2 天都尝试了所有方法。
import requests
from google.oauth2 import service_account
METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/'
METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
SERVICE_ACCOUNT = [NAME-OF-SERVICE-ACCOUNT-USED-WITH-CLOUD-FUNCTION-WHICH-HAS-COMPUTE-ADMIN-PRIVILEGES]
def get_access_token():
url = '{}instance/service-accounts/{}/token'.format(
METADATA_URL, SERVICE_ACCOUNT)
# Request an access token from the metadata server.
r = requests.get(url, headers=METADATA_HEADERS)
r.raise_for_status()
# Extract the access token from the response.
access_token = r.json()['access_token']
return access_token
def start_vms(request):
request_json = request.get_json(silent=True)
request_args = request.args
if request_json and 'number_of_instances_to_create' in request_json:
number_of_instances_to_create = request_json['number_of_instances_to_create']
elif request_args and 'number_of_instances_to_create' in request_args:
number_of_instances_to_create = request_args['number_of_instances_to_create']
else:
number_of_instances_to_create = 0
access_token = get_access_token()
address = "https://www.googleapis.com/compute/v1/projects/[MY-PROJECT]/zones/europe-west2-b/instances?sourceInstanceTemplate=https://www.googleapis.com/compute/v1/projects/[MY-PROJECT]/global/instanceTemplates/[MY-INSTANCE-TEMPLATE]"
headers = {'token': '{}'.format(access_token)}
for i in range(1,number_of_instances_to_create):
data = {'name': 'my-instance-{}'.format(i)}
r = requests.post(address, data=data, headers=headers)
r.raise_for_status()
print("my-instance-{} created".format(i))
有什么建议/指导吗?如果有人能告诉我如何使用秘密 ID 和密钥获取访问令牌。另外,我不太确定 OAuth2.0 是否会起作用,因为我本质上是想打开这些机器,它们会进行一些处理然后自毁。因此,无需用户参与即可允许访问。如果 OAuth2.0 是错误的方法,我还能使用什么?
我尝试使用 gcloud,但不推荐子处理 gcloud 命令。
【问题讨论】:
标签: python google-cloud-platform oauth-2.0 google-cloud-functions google-compute-engine