9

Sto riscontrando un problema con le mie credenziali AWS. Ho usato il file delle credenziali che ho creato su ~/.aws/credentials proprio come è scritto nel documento AWS. Tuttavia, Apache non riesce a leggerlo.Credenziali AWS non funzionanti - ~/.aws/credenziali

In primo luogo, mi è stato sempre questo errore:

Errore durante il recupero delle credenziali dal server metadati profilo esempio. Quando non si esegue all'interno di Amazon EC2, è necessario fornire l'ID della chiave di accesso AWS e la chiave di accesso segreta nelle opzioni "chiave" e "segreto" durante la creazione di un client o fornire un oggetto Aws \ Common \ Credentials CredentialsInterface istanziato.

Poi ho provato alcune soluzioni che ho trovato su internet. Ad esempio, ho provato a controllare la mia variabile HOME. Era/home/ubuntu. Ho provato anche a spostare il mio file di credenziali nella directory/var/www anche se non è la directory del mio server web. Niente ha funzionato Stavo ancora ottenendo lo stesso errore.

Come seconda soluzione, ho visto che potevamo chiamare direttamente CredentialsProvider e indicare la directory sul client.

https://forums.aws.amazon.com/thread.jspa?messageID=583216&#583216

L'errore è cambiato, ma non ho potuto farlo funzionare:

Impossibile leggere le credenziali da /.aws/credentials

ho visto anche che potremmo utilizzare il provider di default di CredentialsProvider invece di indicare un percorso.

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#using-credentials-from-environment-variables

ho provato e continuo a ricevere lo stesso errore:

Impossibile leggere le credenziali da /.aws/credentials

Solo nel caso avete bisogno di questa informazione, sto usando aws/aws-sdk-php (3.2.5). Il servizio che sto cercando di utilizzare è l'AWS Elastic Transcoder. La mia istanza EC2 è una Ubuntu 14.04. Esegue un'applicazione Symfony distribuita usando Capifony.

Prima di provare questo server di produzione, l'ho provato in un server di sviluppo in cui funziona perfettamente solo con il file ~/.aws/credentials. Questo server di sviluppo è esattamente una copia del server di produzione. Tuttavia, non utilizza Capifony per la distribuzione. È solo un normale clone del progetto. E ha solo un volume EBS mentre il server di produzione ne ha uno per il sistema operativo e uno per l'applicazione.

Ah! E ho anche controllato se le autorizzazioni/i proprietari del file delle credenziali erano uguali su entrambi i server e sono gli stessi. Ho provato un 777 per vedere se poteva cambiare qualcosa ma niente.

Qualcuno ha un'idea?

+0

È incredibile quanto sia pessima questa parte di EC2. Hanno pagine di esempi inutili, roba non funzionante e codice a metà spiegato. Hai già attraversato lo stesso problema già da ore, cercando di utilizzare le credenziali IAM e continua a insistere sulla lettura di uno stupido file ini. Non importa quale dei 5 diversi metodi per autenticare effettivamente vengono utilizzati. – John

risposta

4

Sembra che tu stia sbagliando. Non è necessario distribuire le credenziali in un'istanza EC2 per far interagire tale istanza con altri servizi AWS e, in caso affermativo, non dovrebbe mai distribuire credenziali a un'istanza EC2.

Invece, quando si crea l'istanza, si associa un ruolo IAM con esso. Quel ruolo ha politiche che controllano l'accesso agli altri servizi AWS.

È possibile creare un ruolo vuoto, avviare l'istanza e quindi modificare il ruolo in un secondo momento. Non è possibile assegnare un ruolo dopo che l'istanza è stata avviata.

È ora possibile aggiungere ruoli a un'istanza dopo che è stata assegnata.

È ancora considerata una buona pratica non distribuire credenziali effettive a un'istanza EC2.

+0

Ciao Chris, grazie per la tua risposta, ma penso di non averlo spiegato bene. Ho bisogno delle credenziali per utilizzare i servizi tramite PHP. Questo è il collegamento: http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html –

+0

Leggete più avanti in questo articolo: "Usare i ruoli IAM è la tecnica preferita per fornire credenziali per le applicazioni in esecuzione su Amazon EC2. " Non si devono e non si devono mettere credenziali su un'istanza EC2. – chris

+0

Sto facendo questo ma non fallback utilizzando il profilo di istanza perché genera un errore che ~/.aws/credenziali non esiste. Mi aspettavo che usasse i profili se non esistessero. – thedjaney

3

Se questo può aiutare qualcuno, sono riuscito a fare il mio lavoro file .ini, facendo in questo modo:

$profile = 'default'; 
    $path = '/mnt/app/www/.aws/credentials/default.ini'; 
    $provider = CredentialProvider::ini($profile, $path); 
    $provider = CredentialProvider::memoize($provider); 
    $client = ElasticTranscoderClient::factory(array(
     'region' => 'eu-west-1', 
     'version' => '2012-09-25', 
     'credentials' => $provider 
    )); 

Il CredentialProvider è spiegato in questo documento:

http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html#ini-provider

ho ancora non capisco perché la mia applicazione non possa leggere il file nella directory home (~/.aws/credentials/default.ini) su un server ma nell'altro lo fa.

Se qualcuno sa qualcosa, per favore fatemelo sapere.

+0

Per impostazione predefinita, l'SDK cerca un file in ~ ~/.aws/credentials'. Dovrebbe essere un file senza estensione, non una cartella. – giaour

0

L'SDK si legge da a file located at ~/.aws/credentials, ma sembra che si stia salvando un file su ~/.aws/credentials/default.ini. Se sposti il ​​file, l'errore che hai riscontrato dovrebbe essere risolto.