Easy Digital Downloads 用の Amazon S3 拡張機能を使用すると、Amazon S3 アカウントでダウンロードファイルをホストできます。これは、ファイルを独自のホスティングアカウントに保存するよりも安全で信頼性が高くなります。
この記事の内容
IAM アカウントの作成
IAM アクセスキー
セットアップ
Amazon S3 と EDD の使用
ファイルをダウンロードに強制する
よくある問題と質問
IAM アカウントの作成
Easy Digital Downloads が Amazon S3 アカウントに接続するには、IAM ユーザーを作成し、そのユーザーに権限ポリシーをアタッチする必要があります。ユーザーのセキュリティ認証情報をすべて表示 をクリックすると、アクセスキーとシークレットキーを表示できます。これらは、WordPress サイトの Downloads → Settings → Extensions → Amazon S3. に入力する必要がある値です。
1. Amazon S3 アカウントにログインする
Amazon S3 アカウントにログインし、ユーザーページに移動します。このページは、右上隅のアカウント名をクリックし、セキュリティ認証情報 > ユーザー(ページ左側のアクセス管理の下)をクリックすることで見つけることができます。
2. IAM ユーザーの設定
A. ユーザーの追加
使用したい既存の IAM ユーザーがいる場合は、そのユーザーをクリックします。新しいユーザーを作成する必要がある場合は、青い ユーザーの作成 ボタンをクリックし、プロンプトに従います。次に、セキュリティ認証情報を取得し、ユーザーに権限ポリシーをアタッチする必要があります。

B. ユーザーの詳細を設定する:
ユーザー名: 好きなユーザー名を作成し、次へをクリックします。

C. 権限の設定
- 「ポリシーを直接アタッチ」ボックスを選択します。
- 次に、フィルター ボックスに「S3full」と入力します。これにより、Amazon S3 に関連する結果に絞り込まれます。
- AmazonS3FullAccess のボックスをチェックします。
- 「権限境界の設定 – オプション」セクションは無視してください。
- 次へをクリックします。

D. 確認と作成
権限が上記の指示と一致していることを確認します。それ以外の場合は、ここで設定するものは何もありません。ユーザーの作成をクリックします。

3. アクセスキーの取得
上記のステップの権限を使用した IAM アカウントが必要です。過去にAmazonS3FullAccess 権限を持つ IAM アカウントを作成したことがある場合は、既存のアカウントを使用できます。
A. 上記で作成した IAM ユーザー名を、AWS の ユーザーページに表示されているものをクリックします。
B. セキュリティ認証情報 タブをクリックし、アクセスキーの作成 をクリックします。

C. サードパーティサービスを選択し、確認 をチェックします。

D. アクセスキーの作成をクリックします。説明タグは不要です。
E. アクセスキー & シークレットアクセスキーを保存します。
注意: このユーザーのシークレットキーには二度とアクセスできなくなるため、ファイルを保存してください。資格情報を紛失した場合は、新しいアクセスキーを作成する必要があります。

これで、IAMユーザーはS3バケットへのファイルのアクセスおよびアップロードに関する完全な権限を持つことになります。これにより、EDDストアはファイルにアクセスし、顧客向けのセキュアなダウンロードリンクを作成できるようになります。
F. アクセスキーとシークレットアクセスキーを、ダウンロード → 設定 → 拡張機能 → Amazon S3の下にあるEDDストアのAmazon S3設定に追加します。

IAMユーザーの作成やポリシーのアタッチについてさらにサポートが必要な場合は、AmazonのIAMユーザー作成ガイドを参照してください。
特定のバケットへのアクセスを制限する
S3アカウントが他の目的で使用されており、IAMアカウント(EDDストア)を特定のバケットに制限したい場合は、AmazonS3FullAccessの代わりにカスタムポリシーを作成できます。これは、権限設定セクションのステップ3の代わりに行います。
「既存のポリシーを直接アタッチ」をクリックし、「ポリシーを作成」を選択します。
以下のポリシー詳細をJSONエディターで追加します。bucket-name-hereを、EDDストアからアクセスしたいバケットの名前(複数可)に更新してください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:ListBucketMultipartUploads",
"s3:AbortMultipartUpload",
"s3:ListBucket",
"s3:ListMultipartUploadParts"
],
"Resource": [
"arn:aws:s3:::bucket-name-here",
"arn:aws:s3:::bucket-name-here/*"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
このポリシーを使用すると、すべてのバケット名が表示されますが、Resourcesセクションに配置したもののみがアクセス可能になります。リソースリストに含まれていないバケットにEDD経由でアクセスしようとすると、PHPエラーが発生します。これは将来のリリースで改善される予定です。
セットアップ
拡張機能がインストールおよび有効化されたら、ダウンロード → 設定 → 拡張機能 → Amazon S3に移動して、Amazon S3アカウント情報を入力できます。

1. アクセスキーIDとシークレットキーを入力する
アクセスキーIDとシークレットキーは、S3アカウントでIAMユーザーを作成することによって取得されます。適切な権限を持つIAMユーザーの作成方法については、上記のガイドを参照してください。
2. デフォルトのバケットを入力する
これは、ファイルをアップロードしたいデフォルトのバケットです。新しいバケットを作成したり、現在のバケットのリストを取得したりするには、S3コンソールに移動してください(コンソールにアクセスするにはログインが必要です)。ここでデフォルトとして使用したいバケットの名前を入力します。Amazon S3にファイルをアップロードする際には、アップロード先のバケットを選択するオプションが表示されます。
バケットの権限
ファイルへの不正アクセスを制限するために、バケットにはすべてのパブリックアクセスをブロックをONにしてください。EDDは顧客に一時的なファイルアクセスを提供します。

3. Amazon S3ホストを入力する(オプション)
これは、バケットが使用しているS3ホストです。ほとんどの場合、このフィールドは空白のままで構いません。ただし、サイトがバケットにアクセスできない問題が発生した場合は、デフォルトバケットのリージョンのエンドポイントに変更してみてください。
バケットのリージョンは、AmazonS3アカウントにログインし、S3をクリックしてから、各バケットの横に表示されるリージョン列を確認することで見つけることができます。そこにリージョンが表示されます。それがわかったら、Amazon S3 リージョン ドキュメントに記載されている対応する正しいホストを見つけます。そのホストをコピーしてWordPressに保存します。

4. リンクの有効期限(任意)
これは、動的に生成されたURLが有効な分数です。Easy Digital Downloadsによって配信されたダウンロードリンクをお客様がクリックすると、Amazon S3上のファイルの新しいURLがオンザフライで生成されます。これは、新しくシークレットなURLが有効な分数です。
これでAmazon S3の設定は完了です。
EDDでのAmazon S3の使用
ダウンロード可能な商品へのファイルのアップロードは、これまでとまったく同じ方法で行いますが、メディアアップローダーにAmazon S3にアップロードとAmazon S3ライブラリという2つの新しいタブが表示されます。
このタブからファイルをアップロードすると、Amazon S3アカウントに自動的にアップロードされます。S3にアップロードしたファイルは、他のメディアファイルと同様に、WordPressメディアライブラリからアクセスできます。
EDD経由でのAmazon S3へのアップロード
このタブからファイルをアップロードすると、Amazon S3アカウントに自動的にアップロードされます。

Amazon S3にあるファイルをEDDに追加する
S3にアップロードしたファイルは、メディアアップローダーのAmazon S3ライブラリを介して、他のメディアファイルと同様にWordPressメディアライブラリからアクセスできます。

または、ファイルURLに手動でファイルを追加することもできます:

重要な注意点:
- Amazon S3ライブラリから直接URLをコピーしてファイルURLフィールドに貼り付けないでください。そうすると、ファイルをダウンロードしようとしたときにアクセス拒否エラーメッセージが表示されます。
- Amazon S3アカウントのすべてのバケット名とフォルダ名は、すべて小文字で、特殊文字を含まない必要があります。Amazonのバケット命名規則に関するドキュメントを参照してください。
- すべてのS3バージョンがすべてのリージョンで利用できるわけではありません。このチャートは、お住まいのリージョンで利用可能なバージョンを示しています。
- AmazonS3経由で配信されるファイルは、ストアが「強制」に設定されていても「リダイレクト」として配信されます。詳細はこちら。
ファイルをダウンロードに強制する
Webブラウザはダウンロードしようとしているファイルをブラウザで表示または再生しようとすることがあり、代わりにブラウザ内で音楽やビデオを再生してしまうことがあります。これを防ぎ、保存オプションを強制するためにさまざまなことができますが、ファイルをAmazon S3に保存している場合、Webサーバーの設定は無視されます。
Webサーバーの設定に依存するのではなく、S3でオプションを正しく設定する必要があります。設定方法は次のとおりです。
注意:この設定は、ファイルおよび/またはフォルダに適用され、バケット全体には適用されません
プロパティを開く
- S3バケットで、操作したいファイルを見つけて選択します。
- アクション > メタデータの変更をクリックします。

- メタデータの追加をクリックし、タイプをシステム定義、キーをContent-Disposition、値をattachmentに設定して変更を保存します。

これにより、ブラウザで再生または表示される代わりにダウンロードが強制されます。
一般的な問題と質問:
ファイルがダウンロードではなくブラウザで開かれる
これはファイルをダウンロードに強制することで解決できます。
顧客はファイルの実際のURLを確認し、直接ダウンロードできますか?
いいえ、顧客はあなたのストアへのURLを確認します。EDDは、顧客が元のAmazonソースURLを見ることなくダウンロードが機能するように、場所を翻訳します。
エラー:SSL証明書の問題:ローカル発行者の証明書を取得できません
このエラーは、ウェブサイトのサーバー上のSSL証明書が無効であるか、正しくインストールされていないことを意味します。これを解決するには、ホスティング会社に連絡し、証明書が正しくインストールされており、有効であることを確認するように依頼してください。
エラー:アクセス拒否
このエラーは、使用しているアクセスキーIDとシークレットキーを持つユーザーが、S3バケットとリソースにアクセスするために必要な権限を持っていないことを意味します。
これを解決するには、IAMユーザーに新しい権限ポリシーをアタッチする必要があります。このエラーを解決するために、適切な権限を持つIAMユーザーを作成するための
ガイドを参照してください。
Amazon S3からURLをコピーしてダウンロードのファイルURLフィールドに貼り付けた場合にも、このエラーメッセージが表示されることがあります。ファイルをダウンロードにリンクするために必要な正しい手順については、上記の注を参照してください。
エラー:RequestTimeTooSkewed
このエラーは、ウェブサーバーのタイムゾーン設定の誤設定が原因で発生します。これを解決するには、ホスティング会社に連絡し、タイムゾーン設定を正しく再設定するように依頼してください。
エラー:SignatureDoesNotMatch
このエラーに続いて、計算したリクエスト署名が提供された署名と一致しませんというエラーメッセージが表示される場合は、バケット名に大文字またはスペースが含まれている可能性があります。問題を解決するには、大文字を含まないようにバケット名を変更してください。また、名前が大文字を含まない新しいバケットを作成して解決することもできます。
エラー:NoSuchKey 指定されたキーが存在しません
このエラーは、ファイルまたはバケットの名前付け方法に問題がある場合に発生します。すべての句読点と特殊文字は削除する必要があります。
例: ファイル名が test-file-one.mp4.zip の場合は、 testfileone.zip に変更してください
Amazon S3へのファイルのアップロードに関するその他のエラーまたは問題
Amazon S3へのファイルのアップロードや、Amazon S3内の既存ファイルへのアクセスに問題がある場合は、問題を解決するために以下の手順を参照してください。
- Amazon S3 ホスト設定をダウンロード → 設定 → 拡張機能 → Amazon S3で確認してください。ホストが正しく設定されていることを確認し、正しいリージョンが設定されているかも確認してください(設定方法は上記「Amazon S3 ホスト」の項目を参照してください)。
- ファイル名を最大1024文字以内に収めてください。ファイル名の正しいフォーマットについては、Amazonのドキュメントで詳細を確認できます。
- 最近新しいAmazon S3アカウントに切り替えたばかりで、バケットへのファイルのアップロードに問題がある場合、これは通常、新しいバケットやアカウントを作成した直後に発生する一時的な問題です。数時間で自動的に解決されるはずです。詳細については、Amazonのドキュメントを参照してください。
- それでも解決しない場合は、サポートに連絡し、発生している正確なエラーメッセージまたは動作を添えてください。
ソフトウェアライセンスの更新が「ダウンロードに失敗しました。cURLエラー8:無効なContent-Length:値」により失敗しています。
Amazon S3拡張機能がダウンロードを強制リダイレクトしていない可能性があります。このエラーが表示される場合は、
ダウンロード方法を強制に設定してみてください。
顧客がプラグインの更新を試みるときに「更新失敗:ダウンロード失敗。内部サーバーエラー」が表示される
自動更新に使用されるソースファイルが、ダウンロードのライセンス設定で選択されていることを確認してください。
ストアのPHPエラーログファイルに、次のPHP致命的エラーが表示される可能性が高いです:
PHP Fatal error: Uncaught InvalidArgumentException: Found 2 errors while validating the input provided for the GetObject operation: [Key] is missing and is a required parameter [Key] expected string length to be >= 1, but found string length of 0 in /home/ph198/public_html/wp-content/plugins/edd-amazon-s3/vendor/aws/aws-sdk-php/src/Api/Validator.php:65


