皆さん、こんにちは。
Discourse の AWS [1] 認証の処理方法を改善したいと考えており、変更を加える前に、皆様が現在どのようにセットアップされているかを理解したいと思います。
現状
現在、Discourse で AWS 認証を構成するには、いくつかの方法があります。
オプション 1: 明示的な認証情報(サイト設定経由)
- サイト設定で
s3_access_key_idとs3_secret_access_keyを設定します。 - 認証はサイトごとに行われます。
オプション 2: 明示的な認証情報(環境変数経由)
- 環境変数を設定します。
DISCOURSE_S3_ACCESS_KEY_ID
DISCOURSE_S3_SECRET_ACCESS_KEY - マルチサイトクラスター内のすべてのサイトで認証は同じになります。
オプション 3: 「IAM プロファイルを使用」設定
s3_use_iam_profileサイト設定を有効にするか、環境変数DISCOURSE_S3_USE_IAM_PROFILE=trueを設定します。- Discourse に AWS SDK が自動的に認証情報を見つけられるように指示します。
- 元々は EC2 インスタンスや IMDS を介した認証情報の取得のために設計されましたが、他の環境でも機能します。
変更したい理由
1. 設定名の混乱
s3_use_iam_profile 設定の名前は誤解を招きます。EC2 インスタンスプロファイルでのみ機能するように示唆されていますが、実際には あらゆる AWS SDK 認証情報ソース を有効にします。
- EC2 インスタンスプロファイル
- ECS タスクロール
- 環境変数
- AWS 認証情報ファイル
- IAM ロール引き受け
- その他多数…
2. セキュリティ: 静的キー vs ロール引き受け
当社のメタルホスティングプラットフォームでは、定期的にローテーションされるアクセスキーを使用しています。より優れた分離、アクセス制御の機会、および優れた内部プロセスのサポートのために、ロール引き受けに切り替えることを目指しています。
現在の方法の欠点:
- アクセスキーは(ローテーションされるまで)期限切れになりません。
- 広範な権限スコープを持っています。
- 漏洩した場合に侵害される可能性があります。
- 手動ローテーション手順が必要です。
代わりにロール引き受けを使用することの利点:
- 永続的な認証情報は IP アドレスによって制限できます。
- 操作は、自動的に期限切れになる(通常は 1 時間)一時的な認証情報を使用して行われます。
- 認証情報は必要なときにのみ存在するため、ジャストインタイムアクセスが可能です。
- 侵害された一時的な認証情報はすぐに期限切れになるため、影響範囲が縮小されます。
- キーローテーションなし - ロール引き受けプロセスが更新を処理します。
- より優れた監査証跡 - 各セッションは個別に追跡されます。
検討中のこと
以下のいずれかを検討しています。
- 設定名を
aws_credentials_from_environmentのように、より明確な名前に変更する。 - 設定を完全に削除し、認証情報が環境から取得されるべきか、サイト設定から取得されるべきかを自動的に検出する。
皆様からのご意見が必要です!
お知らせください:
-
S3 認証にはどのように接続していますか?
- サイト設定での明示的なアクセスキー
- EC2 インスタンスプロファイル(
s3_use_iam_profileを有効にした状態) - ECS タスクロール(
s3_use_iam_profileを有効にした状態) - 環境変数(
s3_use_iam_profileを有効にした状態) - … その他?
-
s3_use_iam_profileを使用している場合:- どのような環境で実行していますか?(EC2、ECS、Docker、ベアメタルなど)
- 現在の名前/説明で混乱がありましたか?
- 別の名前の方が明確になりますか?
-
この設定の変更に関する懸念はありますか?
- 現在のセットアップが壊れることを心配していますか?
- 変更をテストする時間を確保する必要がありますか?
- その他の考慮事項はありますか?
なぜこれが重要なのか
より良い S3 認証とは:
- より安全 - 管理する静的キーはありません。
- セットアップが容易 - 特にクラウドデプロイメントの場合。
- 混乱が少ない - より明確な設定とドキュメント。
- 最新の AWS 認証パターンをより良くサポートします。
皆様からのフィードバックは、すべての人に役立つ改善を行うのに役立ちます。皆様のセットアップを共有するお時間をいただき、ありがとうございます!
ここを読む: 使用している S3 互換オブジェクトストレージプロバイダー ↩︎