Cet article est l'article du 12ème jour du Calendrier de l'Avent NIFTY 2016.
Hier, il y avait un article de @ alice02 Une histoire sur une session d'étude Ruby parmi les nouveaux employés. J'étais content que mon nom soit un peu mentionné.
Je suis @umiiiiins, apprenti ingénieur pour la première année des diplômés de Nifty. J'ai récemment été affecté à un service et j'ai eu l'opportunité d'accéder à l'API Nifty Cloud, alors j'aimerais parler de la possibilité d'utiliser facilement une API Nifty Cloud très basique avec python.
Nifty Cloud fournit diverses fonctions en tant qu'API. Il existe 1 à 4 versions de signature nécessaires pour envoyer une demande, et les signatures disponibles varient en fonction du service. Cette fois, nous utiliserons l'API Nifty Cloud Script et la version 4 de la signature comme exemple.
Une interface de bas niveau pour AWS, actuellement utilisée dans l'AWS CLI et boto3. Étant donné que la signature de l'API Nifty Cloud est générée de la même manière qu'AWS, vous pouvez utiliser botocore. Si vous êtes intéressé, veuillez vérifier le code source dans le référentiel botocore.
Installez Python (j'utilise 3.5.2 cette fois) Exécutez Démarrage rapide De Nifty Cloud Script. Enregistrez la clé d'accès et la clé secrète obtenues à partir de la partie à cadre rouge de l'image en tant que ACCESS_KEY_ID et SECRET_ACCESS_KEY dans les variables d'environnement. [Panneau de configuration]
Maintenant, je voudrais exécuter le script.
Tout d'abord, définissez l'URL de requête, l'en-tête et les paramètres requis en vous référant à la Référence API de script.
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"}',
}
Ensuite, utilisez botocore pour générer et demander des signatures. À ce stade, assurez-vous que la méthode de l'argument AWS Request est correcte.
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())
Importez ce dont vous avez besoin et lancez le programme ci-dessus ...
<?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>
Cela a réussi et les résultats ont été renvoyés. Veuillez consulter le script à ici.
Cette fois, Signature est générée par diverses méthodes appelées dans addAuth de la classe SigV4Auth. En plus de SigV4Auth, il existe AigV2Auth qui génère la version 2 de la signature, vous pouvez donc facilement générer des signatures d'utilisation avec l'API Nifty Cloud en les utilisant. Si vous essayez de comparer l'intérieur de l'en-tête avant et après l'exécution de SigV4Auth, vous pouvez voir que l'autorisation est ajoutée après l'exécution.
Avant la génération de signature
{
'X-Amz-Target': '2015-09-01.ExecuteScript',
}
Après la génération de signature
{
'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',
}
De plus, lorsque j'essaie d'exécuter des instances de description du serveur à l'aide de SigV2Auth, la signature générée est ajoutée au paramètre après l'exécution.
Avant la génération de signature
{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
'Action': 'DescribeInstances', 'SignatureVersion': '2',
'Timestamp': '2016-12-11T18:28:03Z', 'SignatureMethod': 'HmacSHA256'
}
Après la génération de signature
{'AccessKeyId': 'OOICPHKDBZZE9ZNGEBV7',
'Action': 'DescribeInstances', 'SignatureVersion': '2',
'Timestamp': '2016-12-11T09:28:03Z', 'SignatureMethod': 'HmacSHA256',
'Signature': 'FydxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqRc='
}
Cette fois, à titre d'exemple d'utilisation de botocore, j'ai donné un script qui peut rarement être frappé depuis python, mais bien sûr, il peut également être utilisé pour des services autres que des scripts. En ce qui concerne la version 4 de la signature, il est assez difficile de l'implémenter par vous-même, alors veuillez vous y référer si vous rencontrez des problèmes avec l'API Nifty Cloud de python.
Demain, c'est "Gérer les informations de configuration d'Ansible avec Graph DB" par @ntoofu!
Recommended Posts