約10分
Amazon S3にファイルをアップロードして公開リンクで共有する方法
Amazon S3はオブジェクトストレージの元祖で、AktarのAmazon S3プリセットで利用できます。注意が必要なのは公開アクセスだけです。S3はデフォルトで公開アクセスをブロックするため、公開読み取り用のバケットポリシーを追加するか、バケットの前にCloudFrontを置く必要があります。
必要なもの
- AWSアカウント
- S3バケットとIAMユーザーを作成できる権限
- MacにインストールしたAktar
設定手順
- 1
バケットを作成する
S3コンソールでCreate bucketをクリックし、グローバルに一意な名前と、最寄りのリージョン(例:
eu-central-1)を選びます。Aktarはアクセスコントロールリスト(ACL)を使わないので、オブジェクト所有者の設定はデフォルトの「Bucket owner enforced」のままで構いません。 - 2
公開読み取りを許可する
方法A:バケットポリシー バケットのPermissionsタブで、公開バケットポリシーをブロックしている「Block public access」の設定をオフにし、次のバケットポリシーを追加します(
YOUR-BUCKETは置き換えてください)。{ "Version": "2012-10-17", "Statement": [{ "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::YOUR-BUCKET/*" }] }方法B:CloudFront バケットは非公開のままにし、バケットをオリジンとするCloudFrontディストリビューションを作成します(Origin Access Controlを使用)。独自ドメインでのHTTPS配信とキャッシュが利用できます。
- 3
Aktar用のIAMユーザーを作成する
IAMでユーザーを作成し、そのバケットに対してAktarに必要な操作だけを許可するポリシーをアタッチします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::YOUR-BUCKET" }, { "Effect": "Allow", "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"], "Resource": "arn:aws:s3:::YOUR-BUCKET/*" } ] }次に、そのユーザーのアクセスキーを作成し、Access Key IDとSecret Access Keyをコピーします。
- 4
Aktarにアップロード先を追加する
設定 → アップロード先 → アップロード先を追加でAmazon S3を選び、下の値を入力します。エンドポイントとリージョンは、バケットのリージョンと一致させる必要があります。
- 5
テストして保存する
「接続をテスト」をクリックし、バケットに書き込めること、公開URLでファイルが配信されることを確認したら、「保存」をクリックします。
Aktarでの設定
「設定 → アップロード先 → アップロード先を追加」で、次の値を入力します。項目名はアプリの表示と同じです。
| 項目 | 入力例 |
|---|---|
| プロバイダ | Amazon S3 |
| エンドポイント | https://s3.eu-central-1.amazonaws.comバケットのリージョンに合わせます。 |
| リージョン | eu-central-1 |
| アクセスキーID | AKIA…IAMユーザーのキーです。 |
| シークレットアクセスキー | •••••••• |
| バケット | your-bucket |
| 公開ベースURL | your-bucket.s3.eu-central-1.amazonaws.comまたはCloudFrontのドメイン。 |
ヒント
- リンクを公開で共有するなら、独自ドメインを設定したCloudFrontがおすすめです。キャッシュが効き、バケット自体は非公開のままにできます。
- IAMポリシーの対象は1つのバケットに限定しましょう。Aktarがアカウント全体の権限を必要とすることはありません。
- アップロードを速くするには近くのリージョンを、CDNを使わない場合は閲覧者に近いリージョンを選びましょう。
- 自動で消えるアップロードを使うには、IAMユーザーにバケットに対する
s3:GetLifecycleConfigurationとs3:PutLifecycleConfigurationの権限も必要です。付与しない場合は、ライフサイクルルールを自分で追加してください。詳しくは自動削除されるアップロードをご覧ください。
トラブルシューティング
「接続をテスト」でリージョンやリダイレクトに関するエラーが出る
エンドポイントとリージョンは、バケットを作成したリージョンと一致させる必要があります。例:https://s3.eu-central-1.amazonaws.comとeu-central-1。
アップロードがAccess Deniedで失敗する
IAMユーザーには、YOUR-BUCKET/*に対するs3:PutObjectと、バケット自体に対するs3:ListBucketが必要です。
リンクが403を返す
バケットポリシーがない、「Block public access」でまだブロックされている、またはCloudFrontがバケットを読み取れない状態です。Access Deniedエラーをご覧ください。
まだ解決しませんか?よくある質問を見るか、GitHubで質問してください。