web-dev-qa-db-ja.com

AWSアクセスキーIDとシークレットアクセスキーが内部で生成される方法

AWSの documentation によると、プログラムまたはCLIを介してAWSリソースにアクセスするには、次のようにAWSコンソールでアクセスキーを生成できます。

アクセスキーID:AKIAIOSFODNN7EXAMPLE

シークレットアクセスキー:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

そしてそれはドキュメントで述べられています:

  1. [資格情報のダウンロード]を選択し、キーを安全な場所に保存します。

秘密鍵はAWSマネジメントコンソールから利用できなくなります。あなたは唯一のコピーを持っています。

AWSにはシークレットアクセスキーが格納されていないので、(アクセスキーID、シークレットアクセスキー)を内部で生成する方法と、API/CLIアクセスを安全に認証する方法について知りたいと思います。

AWSは次のことを考えています:

  • アクセスキーIDをランダムに生成する
  • aWSの内部キーと暗号化アルゴリズムを使用して、シークレットアクセスキーを生成する
  • リクエストを認証するときに、同じ内部キーと同じアルゴリズムをアクセスキーIDに適用し、計算結果がシークレットアクセスキーであるかどうかを確認します

しかし、私はセキュリティの専門家とはほど遠く、本番環境のAWSでこれをどのように行うことができるのか知りたいです。ありがとう。

5
nybon

ドキュメント[0] [1]から、デジタル署名ではなくHMACを使用してシークレットアクセスキーを知っていることをAWSに証明していることがわかります。これは、認証を検証するときに、AWSがアクセスキーIDの正確なシークレットアクセスキーを生成できる必要があることを意味します。

したがって、シークレットアクセスキーを二度と見せないという彼らの約束はポリシーの問題であり、基礎となるテクノロジーについての真実ではありません。公開鍵暗号方式であり、シークレットアクセスキーが公開キーであるアクセスキーIDに対応する秘密キーであり、公開キーのみを保存している場合、本当に秘密キーを再生成して表示することはできません。ただし、その場合、クライアントは要求を認証するための秘密鍵署名を生成する必要があります。これは、HMACよりも低速で移植性が低くなります。

これについての証拠はありませんが、シークレットアクセスキーは、Amazonだけが利用できるキーを使用して、アクセスキーIDからHMACを使用して生成されていると思います。 Amazonに気付かれずにそのキーを盗むと、アクセスキーIDのみが与えられた誰かのシークレットアクセスキーを偽造できるようになります。 AWSキーが盗まれた場合、AWSはすべてのキーを無効にし、大規模なグローバルダウンタイムを引き起こさなければなりませんが、全員がAWSコンソールで新しいキーを生成して再デプロイします。可能性を低くするために彼らが取った安全策はわかりませんが、すべての非公開リクエストを処理する必要があるため、アベイラビリティーゾーンごとに1つのHSMにキーを配置できないと思います。

または、シークレットアクセスキーはランダムで、アクセスキーIDと一緒にAWS認証および承認システムに保存され、すべてのアベイラビリティーゾーンに複製されます。つまり、大惨事を引き起こすためには、誰かが単一の秘密鍵ではなく、大量のデータを引き出す必要があるということです。

0- https://docs.aws.Amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#ConstructingTheAuthenticationHeader

1- https://docs.aws.Amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationExamples

6
Z.T.