Dieser Artikel ist der 12. Tagesartikel von NIFTY Adventskalender 2016.
Gestern war ein Artikel von @ alice02 Eine Geschichte über eine Ruby-Studiensitzung unter neuen Mitarbeitern. Ich war froh, dass mein Name ein wenig erwähnt wurde.
Ich bin @umiiiiins, ein Ingenieurlehrling für das erste Jahr von Nifty-Absolventen. Ich wurde kürzlich einer Abteilung zugewiesen und hatte die Möglichkeit, auf die Nifty Cloud-API zuzugreifen. Daher möchte ich darüber sprechen, wie man mit Python einfach eine sehr einfache Nifty Cloud-API erstellt.
Nifty Cloud bietet verschiedene Funktionen als API. Zum Senden einer Anfrage sind 1 bis 4 Signaturversionen erforderlich, und die verfügbaren Signaturen variieren je nach Dienst. Dieses Mal verwenden wir als Beispiel die Nifty Cloud Script API und die Signaturversion 4.
Eine Low-Level-Schnittstelle für AWS, die derzeit in der AWS CLI und in boto3 verwendet wird. Da die Nifty Cloud API-Signatur auf dieselbe Weise wie AWS generiert wird, können Sie Botocore verwenden. Wenn Sie interessiert sind, überprüfen Sie bitte den Quellcode im Repository botocore.
Installieren Sie Python (diesmal verwende ich 3.5.2) Führen Sie Quick Start Von Nifty Cloud Script aus. Registrieren Sie den Zugriffsschlüssel und den geheimen Schlüssel, die aus dem roten Rahmenteil des Bildes erhalten wurden, als ACCESS_KEY_ID und SECRET_ACCESS_KEY in den Umgebungsvariablen. [Systemsteuerung]
Jetzt möchte ich das Skript ausführen.
Legen Sie zunächst die erforderliche Anforderungs-URL, den Header und die Parameter unter Bezugnahme auf die Skript-API-Referenz fest.
script_api.py
url = "https://script.api.cloud.nifty.com/2015-09-01"
headers = {
'X-Amz-Target': '2015-09-01.ExecuteScript',
}
params = {
'ScriptIdentifier': 'test.js',
'Method': 'GET',
'Header': '{}',
'Body': '{}',
'Query': '{"name":"Umino"}',
}
Verwenden Sie als Nächstes Botocore, um Signaturen zu generieren und anzufordern. Stellen Sie zu diesem Zeitpunkt sicher, dass die Methode des AWS Request-Arguments korrekt ist.
script_api.py
credentials = Credentials(os.environ["ACCESS_KEY_ID"],os.environ["SECRET_ACCESS_KEY"])
request = AWSRequest(method="POST",url=url,data=params,headers=headers)
SigV4Auth(credentials, "ExecuteScript",'east-1').add_auth(request)
response = BotocoreHTTPSession().send(request.prepare())
Importieren Sie, was Sie brauchen, und klicken Sie auf das obige Programm ...
<?xml version='1.0' encoding='utf-8'?>
<executescriptresponse>
<requestid>
9b195209-c025-4522-8e6a-9840324f3fb6
</requestid>
<executescriptresult>
<result>
<responsestatus>
200
</responsestatus>
<scriptidentifier>
test.js
</scriptidentifier>
<requestquery>
<![CDATA[{"name":"Umino"}]]>
</requestquery>
<requestbody>
<![CDATA[{}]]>
</requestbody>
<responseheader>
<![CDATA[{"Content-Type":"text/plain"}]]>
</responseheader>
<requestheader>
<![CDATA[{}]]>
</requestheader>
<responsedata>
<![CDATA[Umino]]>
</responsedata>
<status>
200
</status>
</result>
</executescriptresult>
</executescriptresponse>
Es war erfolgreich und die Ergebnisse wurden zurückgegeben. Weitere Informationen finden Sie im Skript unter hier.
Dieses Mal wird die Signatur durch verschiedene Methoden generiert, die in addAuth der SigV4Auth-Klasse aufgerufen werden. Zusätzlich zu SigV4Auth gibt es AigV2Auth, das die Signaturversion 2 generiert, sodass Sie mit diesen auf einfache Weise Verwendungssignaturen mit der Nifty Cloud-API generieren können. Wenn Sie versuchen, das Innere des Headers vor und nach der Ausführung von SigV4Auth zu vergleichen, sehen Sie, dass die Autorisierung nach der Ausführung hinzugefügt wird.
Vor der Signaturerstellung
{
'X-Amz-Target': '2015-09-01.ExecuteScript',
}
Nach der Signaturerstellung
{
'X-Amz-Target': '2015-09-01.ExecuteScript',
'X-Amz-Date': '20161211T090451Z',
'Authorization': 'AWS4-HMAC-SHA256
Credential=OOICPHKDBZZE9ZNGEBV7/20161211/east-1/ExecuteScript/aws4_request,
SignedHeaders=content-type;host;x-amz-date;x-amz-target,
Signature=ffddxxxxxxxxxxxxxxxxxxxxxxxxxxxxd4',
}
Wenn ich versuche, Describe Instances des Servers mit SigV2Auth auszuführen, wird die generierte Signatur nach der Ausführung dem Parameter hinzugefügt.
Vor der Signaturerstellung
{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
'Action': 'DescribeInstances', 'SignatureVersion': '2',
'Timestamp': '2016-12-11T18:28:03Z', 'SignatureMethod': 'HmacSHA256'
}
Nach der Signaturerstellung
{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
'Action': 'DescribeInstances', 'SignatureVersion': '2',
'Timestamp': '2016-12-11T09:28:03Z', 'SignatureMethod': 'HmacSHA256',
'Signature': 'FydxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqRc='
}
Dieses Mal habe ich als Beispiel für die Verwendung von Botocore ein Skript angegeben, das möglicherweise nur selten von Python aufgerufen wird, aber natürlich auch für andere Dienste als Skripte verwendet werden kann. Wenn es um die Signaturversion 4 geht, ist es ziemlich schwierig, sie selbst zu implementieren. Wenn Sie Probleme mit der Verwendung der Nifty Cloud-API von Python haben, lesen Sie diese bitte.
Morgen ist "Verwalten der Ansible-Konfigurationsinformationen mit Graph DB" von @ntoofu!
Recommended Posts