AWS KMS の認証とアクセスコントロール - AWS Key Management Service

AWS KMS の認証とアクセスコントロール

AWS KMS を使用する場合は、AWS によってリクエストの認証に使用される認証情報が必要です。認証情報には、AWS リソースへのアクセス、AWS KMS keys およびエイリアスを含める必要があります。AWS プリンシパルは、そのアクセス許可が明示的に提供され、拒否されていない限り、KMS キーに対して何もアクセス許可はありません。KMS キーを使用または管理するための暗黙的または自動的な権限はありません。

AWS KMS リソースへのアクセスを管理する主な手段は、ポリシーです。ポリシーは、どのプリンシパルがどのリソースにアクセスできるかを記述するドキュメントです。IAM アイデンティティにアタッチされたポリシーはアイデンティティベースのポリシー (または IAM ポリシー) と呼ばれ、他の種類のリソースにアタッチされたポリシーはリソースポリシーと呼ばれます。KMS キーの AWS KMS リソースポリシーはキーポリシーと呼ばれます。すべての KMS キーにはキーポリシーがあります。

AWS KMS エイリアスへのアクセスを管理するには、IAM ポリシーを使用します。プリンシパルにエイリアスの作成を許可するには、IAM ポリシーのエイリアスに対する許可と、キーポリシーのキーに対する許可を提供する必要があります。詳細については、「エイリアスへのアクセスの制御」を参照してください。

KMS キーへのアクセスを制御するには、次のポリシーメカニズムを使用できます。

  • キーポリシー — すべての KMS キーにはキーポリシーがあります。これは、KMS キーへのアクセスを制御するための主要メカニズムです。キーポリシーを単独で使用してアクセスを制御できます。この場合、KMS キーへのアクセスの完全な範囲が 1 つのドキュメント (キーポリシー) で定義されます。キーポリシーの使用の詳細については、「キーポリシー」を参照してください。

  • IAM ポリシー — IAM ポリシーをキーポリシーと組み合わせて使用し、KMS キーへのアクセスを制御できるように許可を付与します。この方法でアクセスを制御すると、IAM の IAM ID に対するすべてのアクセス許可を管理できます。IAM ポリシーを使用して KMS キーへのアクセスを許可するには、キーポリシーで明示的に許可する必要があります。IAM ポリシーの使用の詳細については、「IAM ポリシー」を参照してください。

  • グラント — グラントをキーポリシーおよび IAM ポリシーと組み合わせて使用し、KMS キーへのアクセスを許可します。この方法でアクセスを制御すると、キーポリシーで KMS キーへのアクセスを許可し、ユーザーが他のユーザーにアクセスを委任できるようになります。グラントの使用の詳細については、「AWS KMS でのグラント」を参照してください。

KMS キーは、作成された AWS アカウントに属します。ただし、アクセスグラントがキーポリシー、IAM ポリシー、またはグラントで明示的に提供されていない限り、アイデンティティやプリンシパルは、AWS アカウントのルートユーザーも含め、KMS キーを使用または管理するアクセス許可はありません。KMS キーを作成する IAM ユーザーはキー所有者とはみなされないため、作成した KMS キーを使用または管理するためのアクセス許可が自動的に付与されません。他のプリンシパルと同様に、キー作成者は、キーポリシー、IAM ポリシー、またはグラントを使用してアクセス許可を取得する必要があります。ただし、kms:CreateKey アクセス許可を持つプリンシパルは、初期キーポリシーを設定し、キーを使用または管理するためのアクセス許可を自分自身に付与できます。

次のトピックでは、AWS Identity and Access Management (IAM) と AWS KMS アクセス許可を使用して、リソースにアクセスできるユーザーを制御することでリソースをセキュア化する方法の詳細について説明します。

AWS KMS アクセスコントロールの概念

AWS KMS でのアクセスコントロールに関する説明で使用した概念について説明します。

認証

AWS には、次のいずれかのタイプのアイデンティティでアクセスできます。

  • AWS アカウント ルートユーザー – AWS にサインアップするときは、AWS アカウント の E メールアドレスとパスワードを指定します。これらはルート認証情報であり、これらの情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。

    重要

    セキュリティ上の理由から、ルート認証情報は、管理者ユーザー (AWS アカウント への完全なアクセス許可を持つ IAM ユーザー) を作成するためにのみ使用することをお勧めします。その後、この管理者ユーザーを使用して、制限されたアクセス許可を持つ他の IAM ユーザーとロールを作成できます。詳細については、「IAM ユーザーガイド」の「個別の IAM ユーザーの作成 (IAM ベストプラクティス)」および「管理者ユーザーとグループの作成」を参照してください。

    注記

    キーポリシー、IAM ポリシー、またはグラントで明示的に許可され、拒否されない限り、ルートユーザーやキー作成者を含むすべての AWS プリンシパルは、KMS キーに対するアクセス許可を持ちません。

  • IAM ユーザーIAM ユーザーは、特定のアクセス許可 (KMS キーの使用など) を持つ AWS アカウント のアイデンティティです。IAM のユーザー名とパスワードは、AWS Management ConsoleAWS ディスカッションフォーラム、または AWS Support センターなどのセキュアな AWS ウェブページへのサインインに使用できます。

    ユーザー名とパスワードに加えて、アクセスキーを各ユーザーに作成し、ユーザーが AWS SDKAWS Command Line InterfaceAWS Tools for PowerShell によって、AWS サービスにプログラムでアクセスできるようにします。SDK やコマンドラインツールは、アクセスキーを使って API リクエストに暗号により署名します。AWS ツールを使用しない場合は、API リクエストを自分で署名する必要があります。AWS KMS では、署名バージョン 4 がサポートされています。これは API リクエストを認証するための AWS プロトコルです。API リクエストの認証の詳細については、AWS の全般リファレンス署名バージョン 4: 署名プロセスを参照してください。

  • IAM ロールIAM ロールは、特定のアクセス権限を持ち、アカウントで作成できるもう 1 つの IAM ID です。これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。IAM ロールでは、AWS サービスおよびリソースにプログラムでアクセスする、一時的なアクセスキーを取得することができます。IAM ロールは、次のような場合に役立ちます。

    • フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブアイデンティティプロバイダーからの既存のユーザーアイデンティティを使用できます。このようなユーザーはフェデレーションユーザーと呼ばれます。フェデレーションユーザーは、ID プロバイダーを通じて IAM ロールを使用します。フェデレーションユーザーの詳細については、「IAM ユーザーガイド」の「フェデレーションユーザーとロール」を参照してください。

    • クロスアカウントアクセス – AWS アカウント で IAM ロールを使って、お客様のアカウントのリソースへのアクセス権を別の AWS アカウント に許可できます。この例については、「IAM ユーザーガイド」の「チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任」を参照してください。

    • AWS サービスアクセス — アカウントの IAM ロールを使用して、アカウントのリソースへアクセスするための AWS サービス許可を付与します。例えば、Amazon Redshift がお客様に代わって S3 バケットにアクセスし、S3 バケットに保存されたデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、「IAM ユーザーガイド」の「AWS のサービスへの許可を委任するロールの作成」を参照してください。

    • EC2 インスタンスで実行されるアプリケーション — インスタンスで実行され、AWS API リクエストを作成するアプリケーションで使用されるアクセスキーを EC2 インスタンスに保存する代わりに、IAM ロールを使用してこれらのアプリケーションの一時的なアクセスキーを提供します。EC2 インスタンスに IAM ロールを割り当てるには、 インスタンスプロファイル を作成し、インスタンスの起動時にアタッチします。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるアプリケーションは一時アクセスキーを取得することができます。詳細については、「IAM ユーザーガイド」の「Amazon EC2 上のアプリケーションに対するロールの使用」を参照してください。

認証

リクエストを認証する有効な認証情報を持つことができますが、AWS KMS リソースを作成、管理、または使用する AWS KMS API リクエストを作成するアクセス権限も必要です。例えば、暗号化オペレーションで KMS キーの作成、管理、使用を行うためのアクセス許可が必要です。

キーポリシー、IAM ポリシー、およびグラントを使用して、AWS KMS リソースへのアクセスを制御します。リクエストまたはリソースが指定した条件を満たす場合にのみ、ポリシー条件キーを使用してアクセスを許可できます。他の AWS アカウントで、信頼するプリンシパルへのアクセスを許可できます。

AWS KMS リソース

AWS KMS では、プライマリリソースは AWS KMS keys です。AWS KMS は、KMS キーのわかりやすい名前を提供する独立したリソースであるエイリアスもサポートします。一部の AWS KMS オペレーションでは、エイリアスを使用して KMS 許可キーを識別できます。

KMS キーまたはエイリアスの各インスタンスには、標準形式の一意の Amazon リソースネーム (ARN) があります。AWS KMS リソースの場合、AWS のサービス名は kms です。

  • AWS KMS key

    ARN 形式:

    arn:AWS partition name:AWS service name:AWS リージョン:AWS アカウント ID:key/key ID

    ARN の例:

    arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab

  • エイリアス

    ARN 形式:

    arn:AWS partition name:AWS service name:AWS リージョン:AWS アカウント ID:alias/alias name

    ARN の例:

    arn:aws:kms:us-west-2:111122223333:alias/example-alias

AWS KMS には、AWS KMS リソースをオペレーションするための一連の API オペレーションが用意されています。AWS Management Console および AWS KMS API オペレーションでの KMS キーの識別の詳細については、キー識別子 (KeyId) を参照してください。AWS KMS オペレーションのリストについては、「AWS Key Management Service API リファレンス」を参照してください。