2016-07-22 19 views
0

Für die Datei von HDFS S3 Eimer Kopieren verwendete ich den BefehlHDFS bis s3 Distcp - Access Keys

hadoop distcp -Dfs.s3a.access.key=ACCESS_KEY_HERE\ 
-Dfs.s3a.secret.key=SECRET_KEY_HERE /path/in/hdfs s3a:/BUCKET NAME 

Aber der Zugangsschlüssel und sectet Schlüssel sind hier sichtbar, die nicht sicher sind. Gibt es eine Methode, um Anmeldeinformationen aus der Datei bereitzustellen. Ich möchte die Konfigurationsdatei nicht bearbeiten, was eine der Methoden ist, auf die ich gestoßen bin.

Antwort

1

Recent (2.8+) Versionen können Sie Ihre Anmeldeinformationen in einer JCEKS Datei verstecken; Auf der Hadoop S3-Seite gibt es Dokumentation.Auf diese Weise müssen Sie keinerlei Geheimnisse in die Befehlszeile eingeben. Sie sie einfach über den Cluster teilen und dann im distcp Befehl gesetzt hadoop.security.credential.provider.path auf den Weg, wie jceks://[email protected]:9001/user/backup/s3.jceks

Fan: Wenn Sie in EC2 ausführen, die IAM Rolle Anmeldeinformationen automatisch von der Standardkette aufgenommen werden sollten Anmeldeinformationsanbieter: Nach der Suche nach den Konfigurationsoptionen & env vars wird ein GET des EC2-HTTP-Endpunkts versucht, der die Anmeldeinformationen der Sitzung abruft. Wenn das nicht geschieht, stellen Sie sicher, dass com.amazonaws.auth.InstanceProfileCredentialsProvider in der Liste der Anmeldeinformationsanbieter ist. Es ist ein bisschen langsamer als die anderen (und kann gedrosselt werden), also am besten am Ende.

0

Amazon ermöglicht temporäre Anmeldeinformationen zu generieren, die Sie von http://169.254.169.254/latest/meta-data/iam/security-credentials/

abrufen können Sie from there

Eine Anwendung auf der Instanz ruft die Anmeldeinformationen zur Verfügung gestellt von der Rolle aus der Instanz -Metadatenelement iam lesen/security-credentials/Rollenname. Der Anwendung werden die Berechtigungen für die Aktionen und Ressourcen erteilt, die Sie für die Rolle über die Sicherheitsanmeldeinformationen für die Rolle definiert haben. Diese Sicherheitsanmeldeinformationen sind temporär und wir rotieren sie automatisch. Wir stellen neue Anmeldeinformationen mindestens fünf Minuten vor Ablauf der alten Anmeldeinformationen zur Verfügung.

Der folgende Befehl ruft die Sicherheitsanmeldeinformationen für eine IAM-Rolle mit dem Namen s3access ab.

$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/s3access 

Folgendes Beispiel wird ausgegeben.

{ 
    "Code" : "Success", 
    "LastUpdated" : "2012-04-26T16:39:16Z", 
    "Type" : "AWS-HMAC", 
    "AccessKeyId" : "AKIAIOSFODNN7EXAMPLE", 
    "SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", 
    "Token" : "token", 
    "Expiration" : "2012-04-27T22:39:16Z" 
} 

Für Anwendungen, AWS CLI und Tools für Windows Powershell-Befehle, die ausgeführt wird auf der Instanz, müssen Sie nicht explizit die temporären Sicherheitsnachweise erhalten - den AWS SDKs, AWS CLI und Tools für Windows PowerShell ruft die Anmeldeinformationen automatisch vom EC2-Instanzmetadatendienst ab und verwendet sie. Um einen Anruf außerhalb der Instanz mit temporären Sicherheitsberechtigungsnachweisen zu tätigen (z. B. zum Testen von IAM-Richtlinien), müssen Sie den Zugriffsschlüssel, den geheimen Schlüssel und das Sitzungstoken bereitstellen. Weitere Informationen finden Sie im IAM-Benutzerhandbuch unter Using Temporary Security Credentials to Request Access to AWS Resources.

+0

Ich habe es nicht von diesem Artikel, können Sie erarbeiten, meine Frage ist, gibt es eine Möglichkeit, können wir diese Anmeldeinformationen durch die Datei direkt übergeben – Freeman

+0

gut können Sie nicht, aber Sie können temporäre Schlüssel verwenden - also müssten Sie lesen die Temp-Tasten von der URL und übergeben sie an die Befehlszeile –

1

Ich konfrontiert auch die gleiche Situation, und nachdem temporäre Anmeldeinformationen aus der Instanz der Metadaten. (Falls Sie sich mit Berechtigungsnachweis des IAM Benutzer, beachten Sie bitte, dass die temporären Anmeldeinformationen hier erwähnt IAM Rolle ist, die Server EC2 anhängen nicht menschlich, siehe http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)

Ich fand nur die Anmeldeinformationen in den hadoop distcp cmd Angabe wird nicht Arbeit. Sie müssen auch eine Konfig fs.s3a.aws.credentials.provider angeben. (Siehe http://hortonworks.github.io/hdp-aws/s3-security/index.html#using-temporary-session-credentials)

Schluss Befehl wird wie folgt aussehen

hadoop distcp -Dfs.s3a.aws.credentials.provider="org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider" -Dfs.s3a.access.key="{AccessKeyId}" -Dfs.s3a.secret.key="{SecretAccessKey}" -Dfs.s3a.session.token="{SessionToken}" s3a://bucket/prefix/file /path/on/hdfs 
+0

Kommentiert auf diese in meiner Antwort. Wenn Sie in EC2 arbeiten, müssen Sie hier keine Anmeldedaten angeben, es sei denn, Sie möchten andere E2-IAM-Rollen haben. –

+0

@SteveLoughran Vielen Dank für Ihre Antwort. hmm, ich habe vergessen zu erwähnen, dass ich den hadoop cmd von Airflow ausgeführt habe, und verwende IAM assume-role für das Sicherheitsmanagement. – Fan