web-dev-qa-db-fra.com

Impossible de lire les informations d'identification depuis /.aws/credentials - PHP script call AWS-SDK

J'ai regardé toutes les réponses ici et il semble que mon problème soit un peu différent ou qu'il n'y ait pas eu de solution appropriée. Je fais ce qui suit dans mon fichier PHP:

use Aws\Route53\Route53Client;

$client = Route53Client::factory(array(
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2013-04-01'
));

Obtenir cette erreur:

Fatal error: Uncaught Aws\Exception\CredentialsException: Cannot read credentials from /.aws/credentials

On dirait que la solution facile serait de s'assurer que le répertoire HOME est le bon. C'est déjà le cas. Les fichiers sont lisibles et mon utilisateur ec2 est déjà propriétaire. Key and Secret est déjà installé dans le fichier 'credentials'. Le nom du profil est déjà défini sur "par défaut". J'ai essayé de copier /.aws dans d'autres répertoires tels que la racine,/home, etc. et changé les autorisations, chmod, tout ce qui précède. Toujours rien.

Ensuite, j'ai essayé de coder en dur les informations d'identification (je sais - non recommandé) juste pour lui donner un petit coup de pied, et il ignore complètement que j'ai fait cela:

$client = Route53Client::factory(array(
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2013-04-01',
    'credentials' => [
            'key' => $key,
            'secret' => $secret,
    ]
));

En dernier recours, j'ai même essayé d'inclure la classe CredentialProvider et de la transmettre à mon tableau - toujours rien:

'credentials' => CredentialProvider::ini('default', '/home/ec2-user/.aws/credentials'),

Qu'est-ce que je fais de mal?

17
Justin H

Je ne sais pas ce que vous faites de mal, mais je suggère de contourner complètement le problème et d'attribuer un rôle d'instance EC2 au vm en question et vous n'aurez alors pas à vous en préoccuper; c'est une solution meilleure/plus sécurisée.

https://docs.aws.Amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-Amazon-ec2.html

1
E.J. Brennan

Il suffit de supprimer 'profile' => 'default', et vous devriez bien travailler

$client = Route53Client::factory(array(
  'region' => 'us-east-1',
  'version' => 'latest',
  'credentials' => [
        'key' => $key,
        'secret' => $secret,
  ]
));
64
faruk

Sous AWS Centos 7, j'ai tout essayé (chmod/chown/root/home/user, env, bashrc, etc.) pour que le fichier /.aws/credentials fonctionne en dehors du répertoire Apache/var/www. Le SDK a signalé qu'il ne pouvait pas lire le fichier d'informations d'identification.

J'ai regardé PHP pour voir si je pouvais définir/remplacer la variable HOME et il n'a toujours pas lu le fichier d'informations d'identification jusqu'à ce que je place le dossier .aws dans le dossier '/ var/www' et définissez la variable HOME dans mon fichier php comme suit:

 <%php
 putenv('HOME=/var/www');

 //Zip File SDK Install requires aws-autoloader
 require 'aws-autoloader.php'; //Your php code below
4
Henry Parra

Voici ce que j'ai fini par faire aux fins de cette question, bien que la réponse d'EJ ci-dessus soit en fait la bonne réponse. Espérons que cela aide quelqu'un à lire son fichier de références:

use Aws\Credentials\CredentialProvider;
use Aws\Route53\Route53Client;

$profile = 'default';
$path = '/var/www/html/.aws/credentials';
$provider = CredentialProvider::ini($profile, $path); 
$provider = CredentialProvider::memoize($provider);

$client = Route53Client::factory(array(
    'region' => 'us-east-1',
    'version' => '2013-04-01',
    'credentials' => $provider
));
2
Justin H
  • vérifier l'autorisation des fichiers .aws/* en utilisant "ls -l"
  • Modifiez l'autorisation de lire en grand ou accordez toutes les autorisations "Sudo chmod 777 .aws/*"
  • relancez le code