AWS アクセスキーを管理するためのベストプラクティス - AWS 全般のリファレンス

AWS アクセスキーを管理するためのベストプラクティス

プログラム的に AWS を使用する場合は、AWS アクセスキーを提供して、AWS がプログラム的な呼び出しでアイデンティティを検証できるようにします。アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) で構成されます。

アクセスキーを持っているユーザーなら誰でも、AWS リソースに対して同じレベルのアクセス権を持ちます。したがって、AWS でのアクセスキーの保護は非常に困難で、しかも責任共有モデルに沿って行う必要があります。

以下のステップは、アクセスキーを保護するのに役立ちます。背景情報については、「AWS セキュリティ認証情報」を参照してください。

注記

組織によっては、セキュリティ要件とポリシーがこのトピックに記載されているものとは異なる可能性があります。ここで示すのは、一般的なガイドラインとしての提案です。

ルートユーザーアクセスキーを保護する、または作成しない

お客様はアクセスキー (アクセスキー ID およびシークレットアクセスキー) を使用し、 に対してプログラムによるリクエストをする必要がありますAWS 例えば、AWS Command Line InterfaceAWS SDK、または直接的な API コールを使用する場合などです。 AWS アカウント ルートユーザー用のアクセスキーを持っているユーザーなら誰でも、請求情報を含めた AWS アカウントのすべてのリソースに無制限にアクセスできます。 AWS アカウント ルートユーザーのアクセスキーに関連付けられた許可の範囲を縮小することはできません。

詳細については、IAM ユーザーガイドの「AWS AWS アカウント ルートユーザー アクセスキーをロックする」を参照してください。

IAM ユーザーのアクセスキーを管理します。

AWS アカウント ルートユーザーの認証情報を共有する代わりに、個々の IAM ユーザーを作成し、各ユーザーに必要な許可のみを付与します。詳細については、IAM ユーザーガイドの「IAM ユーザーのアクセスキーの管理」を参照してください。

アクセスキーを使用するときには、以下の点に注意してください。

  • アクセスキーを直接コードに埋め込まないでください。 AWS SDKAWS コマンドラインツール では、既知の場所にアクセスキーを置くことができるため、それらをコードで保持する必要がありません。

    次のいずれかの場所にアクセスキーを置きます。

    • AWS 認証情報ファイル。 AWS SDK と AWS CLI では、AWS 認証情報ファイルに保存した認証情報が自動的に使用されます。

      AWS 認証情報ファイルの使用については、SDK のドキュメントを参照してください。例えば、AWS SDK for Java デベロッパーガイドの「開発用の AWS 認証情報とリージョンのセットアップ」や AWS Command Line Interface ユーザーガイドの「設定ファイルと認証情報ファイル」などがあります。

      AWS SDK for .NET と AWS Tools for Windows PowerShell の認証情報を保存するには、SDK ストアの使用をお勧めします。詳細については、AWS SDK for .NET デベロッパーガイドの「SDK Store の使用」を参照してください。

    • 環境変数。 マルチテナントシステムでは、システム環境変数ではなくユーザー環境変数を選択します。

      環境変数を使用した認証情報の保存の詳細については、AWS Command Line Interface ユーザーガイドの「環境変数」を参照してください。

  • アクセスキーを定期的に更新します アクセスキーを定期的に変更します。詳細については、IAM ユーザーガイドの「アクセスキーのローテーション (AWS CLI、Tools for Windows PowerShell、および AWS API)」と、AWS セキュリティブログの How to Rotate Access Keys for IAM Users を参照してください。

  • 使用していないアクセスキーを削除します。 ユーザーが退職したら、そのユーザーがリソースにアクセスできないようにするため、対応する IAM ユーザーを削除します。アクセスキーが最後に使用された日時を調べるには、GetAccessKeyLastUsed API (AWS CLI コマンド: aws iam get-access-key-last-used) を使用します。

  • 最も精度の高い操作ができるよう、多要素認証を設定します。 詳細については、IAM ユーザーガイドの「AWS での多要素認証 (MFA) の使用」を参照してください。

長期アクセスキーの代わりに IAM ロールを使用する

多くの場合、期限のない長期のアクセスキー (IAM ユーザーのアクセスキーなど) は必要ありません。その代わり、IAM ロールを作成し、一時的なセキュリティ認証情報を生成できます。一時的なセキュリティ認証情報は、アクセスキー ID とシークレットアクセスキーで構成されていますが、認証情報がいつ無効になるかを示すセキュリティトークンも含んでいます。

IAM ユーザーや AWS アカウント ルートユーザーに関連付けられているものなどの長期的なアクセスキーは、それらを手動で取り消すまで有効です。ただし、IAM ロールや AWS Security Token Service の他の機能を使用して取得した一時的なセキュリティ認証情報は、短期間で期限が切れます。認証情報が誤って開示された場合のリスクに備えて、一時的なセキュリティ認証情報を使用することができます。

以下のシナリオでは、IAM ロールと一時的なセキュリティ認証情報を使用します。

  • Amazon EC2 インスタンスで実行されているアプリケーションまたは AWS CLI スクリプトがある場合。 アプリケーション内で直接アクセスキーを使用しないでください。アクセスキーをアプリケーションに渡したり、アプリケーションに埋め込んだり、ソースからアクセスキーを読み取ったりしないでください。代わりに、アプリケーションに適したアクセス権限を持つ IAM ロールを定義し、EC2 のロールを使用して Amazon EC2 インスタンスを起動します。これにより、IAM ロールが Amazon EC2 インスタンスに関連付けられます。この方法により、アプリケーションは一時的なセキュリティ認証情報を取得し、 へのプログラムされた呼び出しに使用することもできますAWS AWS SDK と AWS CLI は、そのロールから一時的なセキュリティ認証情報を自動的に取得できます。

  • クロスアカウントアクセス権限を付与する必要がある場合。 IAM ロールを使用してアカウント間の信頼を確立し、信頼できるアカウントへ制限されたアクセス許可を 1 つのアカウントのユーザーに付与します。詳細については、IAM ユーザーガイドの「IAM チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。

  • モバイルアプリを持っている場合。 暗号化ストレージ内であっても、アクセスキーをアプリに埋め込まないでください。代わりに、Amazon Cognito を使用して、アプリでユーザー ID を管理してください。このサービスでは、Login with Amazon、Facebook、Google、または OpenID Connect (OIDC) に対応している任意の ID プロバイダを使用してユーザーを認証できます。さらに、Amazon Cognito 認証情報プロバイダを使用して、AWS にリクエストを送信するためにアプリが使用する認証情報を管理できます。詳細については、AWS モバイルブログの Using the Amazon Cognito Credentials Provider を参照してください。

  • AWS へのフェデレーションを希望しており、組織が SAML 2.0 をサポートする。 SAML 2.0 をサポートする ID プロバイダーを持つ組織で作業する場合は、SAML を使用するようにプロバイダーを設定します。SAML を使用して、AWS と認証情報を交換し、一連の一時的なセキュリティ認証情報を取り戻すことができます。詳細については、IAM ユーザーガイドAbout SAML 2.0-based Federation を参照してください。

  • AWS へのフェデレーションを希望しており、組織にオンプレミスのアイデンティティストアがある。 ユーザーが組織内で認証できる場合、AWS リソースにアクセスするための一時的なセキュリティ認証情報を発行できるアプリケーションを記述することができます。詳細については、IAM ユーザーガイドフェデレーティッドユーザーが AWS Management Console にアクセスできるようにする URL の作成 (カスタムフェデレーションブローカー) を参照してください。

AWS アクセスキーを使用してモバイルアプリにアクセスする

AWS モバイルアプリを使用して、限定された AWS サービスと機能にアクセスできます。モバイルアプリは、外出先でもインシデント対応をサポートするのに役立ちます。詳細およびアプリのダウンロードについては、「AWS コンソールモバイルアプリケーション」を参照してください。

コンソールのパスワードまたはアクセスキーを使用して、モバイルアプリにサインインできます。ベストプラクティスとして、ルートユーザーアクセスキーは使用しないでください。その代わりに、モバイルデバイスでパスワードまたは生体認証ロックを使用することに加えて、AWS リソースを管理する IAM ユーザーを作成することを強くお勧めします。モバイルデバイスを紛失した場合は、その IAM ユーザーのアクセス権を削除します。IAM ユーザー向けの IAM アクセスキーの生成については、IAM ユーザーガイドManaging Access Keys for IAM Users を参照してください。

アクセスキーを使用してサインインするには (モバイルアプリ)

  1. モバイルデバイスでアプリを開きます。

  2. デバイスに ID を初めて追加する場合は、[Add an identity (ID を追加)]、[Access keys (アクセスキー)] の順に選択します。

    別の ID を使用してすでにサインインしている場合は、メニューアイコンを選択し、[Switch identity (ID を切り替える)] を選択します。次に、[Sign in as a different identity (別の ID としてサインイン)]、[ Access keys (アクセスキー)] の順に選択します。

  3. [Access keys (アクセスキー)] ページで、情報を入力します。

    • Access key ID (アクセスキー ID) – アクセスキー ID を入力します。

    • Secret access key (シークレットアクセスキー) – シークレットアクセスキーを入力します。

    • Identity name (ID 名) – モバイルアプリに表示される ID の名前を入力します。これは、IAM ユーザー名と一致する必要はありません。

    • Identity PIN (ID PIN) – 今後のサインイン時に使用する個人識別番号 (PIN) を作成します。

      注記

      AWS モバイルアプリで生体認証を有効にすると、作成した PIN ではなく、指紋認証または顔認識を使用して検証するように求められます。生体認証に失敗した場合は、代わりに PIN の入力を求められることがあります。

  4. [Verify and add keys] (確認してキーを追加) を選択します。

    モバイルアプリを使用して、一部のリソースにアクセスできるようになりました。

詳細はこちら

AWS アカウントの安全を確保するためのベストプラクティスの詳細については、以下のリソースを参照してください。