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

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

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

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

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

注記

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

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

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

詳細については、IAM ユーザーガイドLock away your AWS account root user access key を参照してください。

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 コマンドラインインターフェイスのユーザーガイドEnvironment Variables を参照してください。

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

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

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

長期アクセスキーの代わりに 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 ユーザーガイドTutorial: Delegate Access Across AWS Accounts Using IAM Roles を参照してください。

  • モバイルアプリを持っている場合。 暗号化ストレージ内であっても、アクセスキーをアプリに埋め込まないでください。代わりに、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 ユーザーガイドCreating a URL that Enables Federated Users to Access the AWS Management Console (Custom Federation Broker) を参照してください。

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 アカウントの安全を確保するためのベストプラクティスの詳細については、次のリソースを参照してください。