AWS キー管理のベストプラクティス

AWS キーの安全な管理は、機密データを保護し、重要なシステムやアプリケーションへの不正アクセスを防ぐために重要です。今日の急速に拡大する脅威環境では、組織は秘密が適切に管理および保護されていることを確認する必要があります。

AWS SDK (AWS SDK とも呼ばれます) は、開発者がアプリケーションで AWS のサービスを簡単に使用できるように設計されたソフトウェア開発ツールとライブラリのセットです。AWS 上の EC2、S3、DynamoDB などのリソースに簡単にアクセスできるアクセス可能なインターフェイスを提供します。

ただし、AWS SDK を使用して AWS のサービスとやり取りする場合は、認証と認可に使用されるキーを適切に管理する必要があります。このブログ投稿では、Python で AWS SDK を使用するときに AWS キーを管理するためのいくつかのベストプラクティスについて説明します。

前提条件

AWS SDK for Python を使用して AWS キーを安全に管理する前に、必ず次のことを行ってください。

  • Python の基本的な理解と知識、および pip を使用してパッケージをインストールする能力。
  • AWS サービスにアクセスするための適切な権限を持つ AWS アカウント。
  • 必要なアクセス権限を持つ IAM ユーザーまたはロール。
  • AWS SDK for Python である Boto3 も、pip を使用してシステムにインストールする必要があります。

コード内の有効期間の長いアクセス キーと秘密キーに関する問題

Python で AWS SDK を使用する場合、長期アクセスキーと秘密キーをハードコーディングすることはお勧めできません。これらの認証情報は AWS リソースの認証に使用されますが、これらのキーは自動的にローテーションされないため、セキュリティ上のリスクが生じます。

長期的なアクセス キーと秘密キーをコードにハードコーディングする場合の潜在的なリスクをいくつか示します。

  • コード共有により、パブリック共有またはパブリック リポジトリへの誤ったコミットを通じて、機密情報が訪問者に公開されるリスクが増加します。
  • アクセス キーと秘密キーのローテーションは困難な場合があり、バージョン管理の問題が発生する可能性があり、コードベースでこれらのキーのすべてのインスタンスを更新する必要があります。

次のセクションでは、一時キーを使用してこの問題を解決する方法を説明します。

代わりに一時アクセスキーを使用してください

Python で AWS SDK を使用する際のセキュリティを強化するには、一時アクセス キーを使用する方が良いソリューションです。一時キーは、AWS リソースへの安全なアクセスを可能にする短期の認証情報です。

一時アクセス キーを使用する利点は次のとおりです。

  • まず、指定された期間 (1 か月または 1 週間など) が経過すると期限切れになるため、不正アクセスのリスクが軽減され、リソース アクセスの管理が容易になります。
  • 一時的なアクセス認証情報はオンデマンドで生成できるため、各ユーザーに AWS ID を定義することなく、エンドユーザーに AWS リソースへのアクセスを提供することがより簡単になります。

注*: AWS Security Token Service (STS) は、一時的なアクセス キーを生成するためのユーティリティです。

AWS CLI を使用して AWS キーを管理する

AWS CLI は、エンジニアが CLI コマンドを使用して AWS のサービスと対話できるようにするコマンドライン ツールです。さらに、AWS CLI を使用して AWS キーを管理できます。

AWS CLI を使用する利点の 1 つは、AWS CLI によって作成された認証情報ファイルから AWS 認証情報 (アクセス キーとシークレット キー) が自動的に取得されるため、AWS クライアントの作成時にアクセス キーとシークレット キーを手動で指定する必要がないことです。 

以下は、AWS CLI を使用するときにアクセス キーと秘密キーを指定せずに AWS クライアントを作成する例です。


import boto3
client = boto3.client('s3')

 

この例では、boto3.client() 関数が s3 パラメーターを使用して呼び出され、Amazon S3 のクライアントを作成します。アクセスキーとシークレットキーが指定されていないため、AWS SDK は AWS CLI によって作成された認証情報ファイルからそれらを自動的に取得します。

認証情報ファイルを作成するには、ターミナルで次のコマンドを実行します。


aws configure

 

このコマンドでは、アクセス キー、秘密キー、デフォルトのリージョン、および出力形式の入力を求められます。実行すると、コンピューター上に認証情報ファイルが作成され、AWS クライアントの作成時に AWS SDK が自動的に検索して取得できるようになります。

AWS キーを手動で構成する方法

認証情報ファイルを作成するもう 1 つの方法は、手動で作成することです。このファイルのデフォルトの場所は ~/.aws/credentials です。認証情報ファイルには、少なくともアクセス キーとシークレット アクセス キーを指定する必要があります。

以下に示すファイル例では、アカウントのアクセス キーと秘密キーがデフォルトの構成ファイルで指定されています。


[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

 

aws configure コマンドを使用すると、リージョンや出力形式などの非依存的な設定オプションが config という名前のファイルに保存されます。このファイルは、ホーム ディレクトリの .aws フォルダーにも保存されます。

[default]
region=us-west-2
output=json

複数の名前付きプロファイルを作成する

開発者は、 --profile オプションを指定して aws configure コマンドを使用して、追加のプロファイルを作成および設定し、さまざまな AWS 認証情報のセットを管理できます。あるいは、構成ファイルと認証情報ファイルにエントリを手動で追加することもできます。これらのファイルには、各プロファイルの構成キーとアクセス キーが保存されます。

新しいプロファイルを追加するには、構成ファイルと認証情報ファイル内に別の名前付きプロファイルを作成します。

以下は、2 つの構成ファイルを含む認証情報ファイルの例です。


[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

 

この例では、プロファイルを指定せずに AWS CLI コマンドを使用する場合、デフォルトのプロファイル ([default]) が使用されます。2 番目のプロファイル ([user1]) は、 --profile user1 引数を指定してコマンドを実行するときに使用されます。このファイルは、Linux および Mac システムの ~/.aws/credentials にあります。

注*: Windows システムの認証情報の場所は、%USER%\.aws\credentials です。

AWS CLI 構成設定を管理する

AWS CLI には、構成設定を管理するためのいくつかのコマンドが用意されています。aws configure set コマンドを使用して構成設定を変更または設定し、aws configure get コマンドを使用して構成設定を取得できます。使用方法は次のとおりです。

構成設定を設定する

構成設定を行うには、awsconfigurationset コマンドを使用できます。--profile オプションを使用して、変更するプロファイルを指定します。たとえば、USER プロファイルのロケールを設定するには、次のコマンドを実行します。

aws configure set region me-south-1 --profile USER

構成設定を削除するには、値として空の文字列を使用するか、構成ファイルと認証情報ファイルから設定を手動で削除します。

構成設定の取得

aws config get コマンドを使用して設定された設定を取得できます。USER プロファイルのロケールを取得するには、次のコマンドを実行します。

aws configure get region --profile USER

CSV認証情報をインポートする

AWS 設定インポート コマンドを使用して、AWS ウェブコンソールから生成された CSV 認証情報をインポートできます。CSV ファイルには次のヘッダーが含まれている必要があります。

  • ユーザー名
  • アクセスキーID
  • シークレットアクセスキー

credentials.csv ファイルから資格情報をインポートするには、次のコマンドを実行します。

aws configure import --csv file://credentials.csv

プロフィールをリストする

aws config list profiles コマンドを使用して、すべてのプロファイル名を一覧表示できます。

aws configure list-profiles --region <<YOUR_REGION>>

AWS でのセキュリティ認証情報管理のベストプラクティス

AWS を使用する場合は、リソースを保護するために認証情報管理のベスト プラクティスに従う必要があります。AWS SDK 認証情報管理に関する 6 つの重要なヒントを次に示します。

  1. AWS CLI を使用して AWS キーを設定する: AWS アクセスキーと秘密キーをコードにハードコーディングすることは避けてください。代わりに、AWS CLI を利用してキーを設定し、安全に保存します。
  2. IAM ポリシーとロールを使用してシークレットへのアクセスを制限する: AWS Identity and Access Management (IAM) ポリシーとロールを使用して、シークレットへのアクセスを、シークレットを必要とするユーザーとサービスのみに制限します。
  3. キーを定期的にローテーションして影響を最小限に抑える: アクセス キー、パスワード、その他のシークレットを定期的にローテーションして、影響を最小限に抑えます。
  4. 機密性の高いアクセス許可を持つユーザーとサービスを最小限に抑える: 機密性の高い AWS リソースにアクセスするユーザーとサービスの数を最小限に抑え、潜在的な攻撃対象領域を減らします。
  5. アクセスの監視と監査: AWS リソースへのアクセス、およびアクセス キーとパスワードの使用を監視および監査します。
  6. 多要素認証を使用する: 多要素認証を使用して AWS リソースへのアクセスを保護し、セキュリティを強化します。

結論は

AWS リソースのセキュリティを維持するには、AWS 認証情報を適切に管理することが重要です。AWS の設定ファイルと認証情報ファイルを使用すると、AWS のアクセス キーと秘密キーを安全に保ち、コードから切り離すことができます。さらに、IAM ポリシーとロールを使用してシークレットへのアクセスを制限したり、シークレットを定期的にローテーションしたりするなどのベストプラクティスに従うことで、AWS 認証情報の管理をさらに強化できます。

いつものように、潜在的なセキュリティ侵害に警戒することが重要です。したがって、AWS を初めて使用する場合でも、熟練したプロフェッショナルである場合でも、AWS 認証情報を適切に管理し、AWS リソースを安全に保つための措置を講じることの重要性を忘れないでください。

このブログ投稿が、AWS キーを管理し、アプリケーションを安全に保つ方法をより深く理解していただければ幸いです。

おすすめ

転載: blog.csdn.net/weixin_56863624/article/details/130605233