約10分

Amazon S3にファイルをアップロードして公開リンクで共有する方法

Amazon S3はオブジェクトストレージの元祖で、AktarのAmazon S3プリセットで利用できます。注意が必要なのは公開アクセスだけです。S3はデフォルトで公開アクセスをブロックするため、公開読み取り用のバケットポリシーを追加するか、バケットの前にCloudFrontを置く必要があります。

必要なもの

  • AWSアカウント
  • S3バケットとIAMユーザーを作成できる権限
  • MacにインストールしたAktar

設定手順

  1. 1

    バケットを作成する

    S3コンソールでCreate bucketをクリックし、グローバルに一意な名前と、最寄りのリージョン(例:eu-central-1)を選びます。Aktarはアクセスコントロールリスト(ACL)を使わないので、オブジェクト所有者の設定はデフォルトの「Bucket owner enforced」のままで構いません。

  2. 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. 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. 4

    Aktarにアップロード先を追加する

    設定 → アップロード先 → アップロード先を追加でAmazon S3を選び、下の値を入力します。エンドポイントとリージョンは、バケットのリージョンと一致させる必要があります。

  5. 5

    テストして保存する

    「接続をテスト」をクリックし、バケットに書き込めること、公開URLでファイルが配信されることを確認したら、「保存」をクリックします。

Aktarでの設定

「設定 → アップロード先 → アップロード先を追加」で、次の値を入力します。項目名はアプリの表示と同じです。

項目入力例
プロバイダAmazon S3
エンドポイントhttps://s3.eu-central-1.amazonaws.comバケットのリージョンに合わせます。
リージョンeu-central-1
アクセスキーIDAKIA…IAMユーザーのキーです。
シークレットアクセスキー••••••••
バケットyour-bucket
公開ベースURLyour-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で質問してください。