AWSの認証プロセスを使用して、認証、MFAステップを実行し、1時間有効な資格情報を付与します。通常、これらは~/.aws/credentials
に配置されます。ただし、aws s3 cp ...
を介して大きなファイルをコピーするなど、長時間実行されるawscli操作を実行すると、認証情報が期限切れになり、コマンドが正常に完了しません。
コマンドを再実行して~/.aws/credentials
を再認証し、再入力を試みましたが、進行中のコマンドはこれを「認識」せず、元の資格情報が期限切れになっても失敗します。
これはどのように処理されることになっていますか?
いくつかのオプションがあります...
最大セッション期間を12時間に設定できます。これは、長時間実行するタスクには十分な場合があります。
一時的な認証情報を取得する方法がわからない場合は、セッションの継続時間を12時間に設定する必要があり、一部のツールはデフォルトで1時間有効なトークンをリクエストします。
また、ワークフローを容易にする get-credentials
script も確認してください。たぶん、あなたが今何をしているのか正確にはわかりませんが、~/.aws/credentials
に一時的なクレデンシャルを書き込むことは、通常、ベストプラクティスではありません。
最大継続時間の設定を大きくできない場合は、次の方法で制限を回避できる可能性があります。
最初にcopyingデータをEC2インスタンスにコピーします。 rsync
を使用します。
次に、インスタンスを利用してEC2アップロードからS3に EC2インスタンスロール 自動的に更新されます。 EC2からS3へのコピーに加えてはより高速です。
EC2ロールの認証情報を「盗み取り」、ローカルで使用することもできます。この get-instance-credentials
スクリプトを確認してください。
[ec2-user@ip-... ~] ./get-instance-credentials
export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
export AWS_SESSION_TOKEN="IQoJb3JpZ2Lux2VjEKf....PUtXw=="
これらの資格は通常6時間有効です。
次に、これらの行をローカルの非EC2マシンにコピーして貼り付けます。
user@server ~ $ export AWS_ACCESS_KEY_ID="ASIA5G7...R3KG5"
user@server ~ $ export AWS_SECRET_ACCESS_KEY="bzkNi/9YV...FDzzd0"
user@server ~ $ export AWS_SESSION_TOKEN="IQoJb3JpZ2Lux2VjEKf....PUtXw=="
資格情報が機能することを確認します。
user@server ~ $ aws sts get-caller-identity
{
"UserId": "AROAIA...DNG:i-abcde123456",
"Account": "987654321098",
"Arn": "arn:aws:sts::987654321098:assumed-role/EC2-Role/i-abcde123456"
}
ご覧のように、ローカルの非EC2サーバーには、認証情報を取得したEC2インスタンスと同じ権限があります。
aws
CLIを使用してファイルをmultipart-uploadします大きなファイルを小さなチャンクに分割し( split
manページを参照)、aws s3api
multipart-uploadサブコマンドを使用できます。 aws s3api create-multipart-upload
、complete-multipart-upload
、part-upload
をご覧ください。資格情報の途中で期限が切れた場合は、各パーツ間の資格情報を更新し、失敗したパーツを再試行できます。
ブリリアント boto3
Python AWS SDKライブラリを使用して、独自のファイルアップローダーを構築できます。 MFAの要求を含め、有効期限が切れるたびに新しい資格情報を要求します。
ご覧のとおり、多くのオプションがあります。
それが役に立てば幸い:)