📤

個人から会社に非公開ソースなどを楽に共有する方法

に公開

はじめに

私は企業に勤めていますが、個人で作ったプログラムやアイディアを会社の環境に参考で持っていきたいときがあります。
ただ、会社のセキュリティポリシーの関係で厳しい。

  • メールでZIPファイルを送る→セキュリティで自動ブロック
  • .bat.shなどのスクリプト→検疫システムで除外
  • 複数ファイルを送りたい→メール本文に平文でコピペするしかない
  • GitHubに個人リポジトリでSSHアクセス→怪しい通信として検知されそう

そう考えて、S3の署名付きURLを使ったシンプルなファイル共有の仕組みを作りました。実装からリリースまで賞味60分。いい時代になりましたね。
本記事では、その考え方と使い方を整理したいと思います。

画面イメージ

個人用途なのですごくシンプルです。でも、こういうのでいいんです。一人で使うなら。

image

アプローチ

基本的な流れは以下の通りです。

  1. 個人PCでファイルをS3にアップロード
  2. 期限付きの署名付きURL(HTTPS)を生成
  3. メールでURLを自分宛てに送信
  4. 会社のPCでメール内のURLをクリックしてダウンロード

S3署名付きURLとは

仕組みの概要

S3の署名付きURLは、一時的なアクセス権限を付与するための仕組みです。以下のような形式のURLが生成されます。

https://your-bucket.s3.ap-northeast-1.amazonaws.com/20251107123045/document.pdf?
  X-Amz-Expires=3600&
  X-Amz-Signature=...

このURLには以下の特徴があります:

  • 期限付き: 指定した時間(15分〜24時間)で自動的に無効化される
  • 改ざん防止: HMAC署名により、URL自体が改ざんされると無効になる
  • HTTPSのみ: 暗号化された通信なので、企業のファイアウォールでブロックされにくい
  • パブリックアクセス不要: S3バケット自体は完全にプライベートのまま

ファイルの保存構造

ファイルは、アップロード時刻を基にしたディレクトリに保存されます。

s3://your-bucket/
  ├── 20251107123045/    ← 2025年11月7日 12:30:45
  │   ├── script.py
  │   ├── config.json
  │   └── README.md
  ├── 20251107150000/    ← 同日 15:00:00
  │   └── document.pdf
  └── 20251108090000/
      └── data.csv

期限が切れたURLにアクセスすると、以下のようなエラーが返されます。

<Error>
  <Code>AccessDenied</Code>
  <Message>Request has expired</Message>
</Error>

このように、URLは自動的に無効化されるため、手動で削除や権限変更をする必要がありません。

実際の使用例

基本的な操作フロー

アップロードが完了すると、以下のような通知メールが届きます。これはAWS SNSを使って作りました(SESでもいいけど、楽をした)。

件名: ファイル共有: 20251107123045 (2ファイル)

【ファイル共有通知】

ディレクトリ: 20251107123045
ファイル数: 2

署名付きURL:

script.py:
https://your-bucket.s3.ap-northeast-1.amazonaws.com/...

config.json:
https://your-bucket.s3.ap-northeast-1.amazonaws.com/...

有効期限: 2025-11-07 13:30:45 JST

この方法の利点

個人と会社間でファイルを共有する際、S3署名付きURLを使うことで以下のメリットがあります。

  • 企業ファイアウォールを通過しやすい: HTTPSの通常のアクセスなのでブロックされにくい
  • 期限付きで自動無効化: 手動で削除や権限変更をする必要がない
  • ファイル形式の制約なし: 実行ファイルでも画像でもデータファイルでもOK
  • 複数ファイルを一度に共有: ディレクトリ単位でまとめてアップロード可能
  • 個人で完結: 承認や申請の手続きが不要

まとめ

従来のメール添付やクラウドストレージ共有と比べて、以下の点で優れています:

  1. 一時的なアクセス: 期限付きで自動的に無効化される
  2. ブロックされにくい: HTTPSのURLなので企業ファイアウォールを通過しやすい
  3. シンプル: 複雑な設定や承認手続きが不要

もちろん、機密情報の共有には適していませんが、スクリプトや設定ファイルなど、参考程度のファイルを共有する分には十分実用的です。
フリーの共有サービスを使うのもちょっと怖いですしね。

同じような課題を抱えている方の参考になれば幸いです。

Discussion