メニュー
アマゾン ウェブ サービス
全般的なリファレンス (Version 1.0)

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

AWS にプログラムでアクセスするときには、アクセスキーを使用して、自身の ID とアプリケーションの ID を検証します。アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) とで構成されます。

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

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

注記

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

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

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

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

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

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

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

長期のアクセスキーの代わりに一時的なセキュリティ認証情報 (IAM ロール) を使用する

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

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

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

  • Amazon EC2 インスタンスで実行しているアプリケーションまたは AWS CLI スクリプトがある場合。 アクセスキーをアプリケーションに渡さず、アプリケーションに埋め込むか、アプリケーションに Amazon S3 バケット (バケットが暗号化されている場合でも) などのソースからキーを読み込みます。代わりに、アプリケーションに適したアクセス権限を持つ IAM ロールを定義し、EC2 のロールを使用して Amazon EC2 インスタンスを起動します。これにより IAM ロールを Amazon EC2 インスタンスに関連付け、アプリケーションが AWS 呼び出しを行うために使用できる一時的なセキュリティ認証情報を取得するようにします。AWS SDK と AWS CLI は、そのロールから一時的なセキュリティ認証情報を自動的に取得できます。

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

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

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

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

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

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

注記

Amazon EC2 インスタンスでアプリケーションを実行しており、そのアプリケーションが AWS リソースへのアクセスを必要とする場合、前のセクションで説明したように、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 セキュリティブログの「IAM ユーザーのアクセスキーをローテーションさせる方法」を参照してください。

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

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

その他のリソース

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