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

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

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

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

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

注記

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

アカウントアクセスキーを削除する (または生成しない)

アクセスキーを使用して、AWS コマンドラインツールAWS SDK、または API の直接呼び出しを使用して作成するリクエストに署名する必要があります。AWS アカウントのルートユーザー のアクセスキーを持っていれば誰でも、請求情報を含むアカウントのすべてのリソースに無制限にアクセスできます。AWS アカウントのルートユーザー のアクセス権限を制限することはできません。

アカウントを保護する最善の方法の 1 つは、AWS アカウントのルートユーザー のアクセスキーを持たないことです。 ルートユーザー アクセスキーを持つ必要がある場合 (まれです) を除いて、キーを生成しないことをお勧めします。代わりに、推奨されるベストプラクティスは、1 人以上の AWS Identity and Access Management (IAM) ユーザーを作成することです。これらの IAM ユーザーに必要なアクセス許可を付与し、AWS との日常的なやり取りに使用します。

アカウントのアクセスキーが既にある場合は、アクセスキーを現在使用しているアプリケーション (ある場合) の場所を見つけ、ルートユーザー アクセスキーを IAM ユーザーアクセスキーに置き換えることをお勧めします。次に、ルートユーザー アクセスキーを無効にして削除します。1 つのアクセスキーを別のアクセスキーに置き換える方法の詳細については、AWS セキュリティブログの投稿「IAM ユーザーのアクセスキーの更新方法」を参照してください。

デフォルトでは、AWS は新規アカウントのアクセスキーを生成しません。

管理権限を持つ IAM ユーザーを作成する方法については、IAM ユーザーガイドの「最初の IAM 管理者ユーザーとグループの作成」を参照してください。

長期のアクセスキーの代わりに一時的なセキュリティ認証情報 (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 ユーザーガイドチュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任を参照してください。

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

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

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

IAM ユーザーのアクセスキーを適切に管理する

AWS へのプログラムによるアクセスのためのアクセスキーを作成する必要がある場合は、IAM ユーザー用に作成して、必要なアクセス許可のみをユーザーに付与します。詳細については、IAM ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。

注記

AWS リソースへのプログラムによるアクセスを必要とするアプリケーションで、Amazon EC2 インスタンスを使用していますか? その場合は、EC2 のIAM ロールを使用します。

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

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

    次のいずれかのロケーションにアクセスキーを置きます。

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

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

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

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

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

  • 異なるアプリケーションには、異なるアクセスキーを使用します。 こうすることで、アクセスキーが公開された場合に、アクセス許可を分離して、個々のアプリケーションに対するアクセスキーを無効化できます。アプリケーションごとに別々のアクセスキーを持つと、AWS CloudTrail ログファイルに個別のエントリが生成されます。この設定により、特定のアクションを実行したアプリケーションを簡単に判別できます。

  • アクセスキーを定期的に更新します アクセスキーを定期的に変更します。詳細については、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) を使用」を参照してください。

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

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

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

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

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