4

HDFS から S3 バケットにファイルをコピーするために、コマンドを使用しました

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

ただし、アクセス キーとセクテット キーはここに表示されており、安全ではありません。file から資格情報を提供する方法はありますか。私が遭遇した方法の1つである構成ファイルを編集したくありません。

4

5 に答える 5

2

Amazon では、http: //169.254.169.254/latest/meta-data/iam/security-credentials/から取得できる一時的な認証情報を生成できます。

そこから読めます

インスタンス上のアプリケーションは、インスタンス メタデータ アイテムiam/security-credentials/role-nameからロールによって提供されるセキュリティ資格情報を取得します。アプリケーションには、ロールに関連付けられたセキュリティ資格情報を通じて、ロールに対して定義したアクションとリソースのアクセス許可が付与されます。これらのセキュリティ資格情報は一時的なものであり、自動的にローテーションされます。古い資格情報の有効期限が切れる少なくとも 5 分前に、新しい資格情報を利用できるようにします。

次のコマンドは、s3access という名前の IAM ロールのセキュリティ認証情報を取得します。

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

以下は出力例です。

{
  "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"
}

インスタンスで実行されるアプリケーション、AWS CLI、および Tools for Windows PowerShell コマンドの場合、一時的なセキュリティ認証情報を明示的に取得する必要はありません — AWS SDK、AWS CLI、および Tools for Windows PowerShell は、EC2 インスタンスから認証情報を自動的に取得します。メタデータ サービスとそれらを使用します。一時的なセキュリティ認証情報を使用してインスタンスの外部で呼び出しを行うには (たとえば、IAM ポリシーをテストするため)、アクセス キー、シークレット キー、およびセッション トークンを提供する必要があります。詳細については、IAM ユーザーガイドの「一時的なセキュリティ認証情報を使用して AWS リソースへのアクセスをリクエストする」を参照してください。

于 2016-07-22T12:25:05.257 に答える
2

最近の (2.8+) バージョンでは、資格情報を jceks ファイルに隠すことができます。そこのHadoop s3ページにいくつかのドキュメントがあります。そうすれば、コマンド ラインにシークレットを入力する必要がまったくなくなります。クラスター全体でそれらを共有するだけで、distcp コマンドで次のhadoop.security.credential.provider.pathようにパスに設定します。jceks://hdfs@nn1.example.com:9001/user/backup/s3.jceks

ファン: EC2 で実行している場合、IAM ロールの資格情報は、資格情報プロバイダーの既定のチェーンから自動的に取得される必要があります: 構成オプションと環境変数を検索した後、セッションを提供する EC2 http エンドポイントの GET を試みます。資格。それが起こっていない場合は、それcom.amazonaws.auth.InstanceProfileCredentialsProviderが資格情報プロバイダーのリストにあることを確認してください。他のものよりも少し遅い (そしてスロットルされる可能性がある) ため、最後に配置するのが最善です。

于 2017-12-06T10:26:30.777 に答える
0

アクセスと秘密鍵を使用したくない場合 (またはスクリプトでそれらを表示したい場合) で、EC2 インスタンスが S3 にアクセスできる場合は、インスタンスの資格情報を使用できます。

hadoop distcp \
-Dfs.s3a.aws.credentials.provider="com.amazonaws.auth.InstanceProfileCredentialsProvider" \
/hdfs_folder/myfolder \
s3a://bucket/myfolder
于 2018-05-15T13:22:40.443 に答える