キーの管理 - Amazon Simple Notification Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キーの管理

次のセクションでは、AWS Key Management Service (AWS KMS) で管理されるキーの操作方法について説明します。詳細について

注記

Amazon SNS は、対称暗号化 KMS キーのみをサポートします。他のタイプの KMS キーを使用してサービスリソースを暗号化することはできません。KMS キーが対称暗号化キーかを判別するには、「非対称 KMS キーを識別する」を参照してください。

AWS KMSコストの見積もり

コストを予測して AWS の請求内容をより正確に把握するため、Amazon SNS が AWS KMS key を使用する頻度を調べることをお勧めします。

注記

コストは下の計算式でかなり正確に予測できますが、Amazon SNS の分散性により、実際のコストの方が高くなることがあります。

API リクエスト (R) トピックごとの数を計算する場合は、次の式を使用します。

R = B / D * (2 * P)

B は請求期間(秒)です。

D は、データキー再利用期間 (秒単位で、 Amazon SNS では、最大 5 分間データキーを再利用します) を表します。

P は、Amazon SNS トピックに送信するプリンシパル発行数です。

以下は計算の例です。正確な料金については、「AWS Key Management Service 料金表」を参照してください。

例 1: AWS KMS API コール数の計算 (1 公開プリンシパル、1 トピック)

この例では、以下を想定しています。

  • 請求期間は1月1日から31日(2,678,400秒)です。

  • データキー再利用期間は 5 分 (300 秒) です。

  • 1 トピックあります。

  • 公開中のプリンシパルが 1 つあります。

2,678,400 / 300 * (2 * 1) = 17,856

例 2: AWS KMS API 呼び出し数の計算 (複数の公開プリンシパル、2 トピック)

この例では、以下を想定しています。

  • 請求期間は2月1日から28日(2,419,200秒) です。

  • データキー再利用期間は 5 分 (300 秒) です。

  • 2 トピックあります。

  • 最初のトピックには、公開中のプリンシパルが 3 つあります。

  • 2 つめのトピックには、公開中のプリンシパルが 5 つあります。

(2,419,200 / 300 * (2 * 3)) + (2,419,200 / 300 * (2 * 5)) = 129,024

AWS KMS 許可を設定する

SSE を使用するには、トピックの暗号化およびメッセージの暗号化と復号を許可するよう AWS KMS key ポリシーを設定する必要があります。AWS KMS アクセス許可の詳細については、『AWS Key Management Service デベロッパーガイド』の「AWS KMS API アクセス許可: アクションとリソースのリファレンス」を参照してください。サーバー側の暗号化を使用して Amazon SNS トピックを設定する方法の詳細については、「サーバー側の暗号化を使用して Amazon SNS トピックをセットアップする」を参照してください。

注記

IAM ポリシーを使用して対称暗号化 KMS キーのアクセス許可を管理することもできます。詳細については、「AWS KMS での IAM ポリシーの使用」を参照してください。

Amazon SNS との間の送受信のグローバルなアクセス許可を設定できますが、AWS KMS では IAM ポリシーの Resource セクションにおいて、特定リージョンで KMS の完全 ARN を明示的に指定することが求められます。

AWS KMS key のキーポリシーで必要な許可を付与していることも確認する必要があります。そのためには、Amazon SNS で暗号化されたメッセージを作成するプリンシパルと消費するプリンシパルをユーザーとして KMS キーポリシーで指定します。

または、Amazon SNS で暗号化されたメッセージを受け取るために発行およびサブスクライブするプリンシパルに割り当てられた IAM ポリシーで、必要な AWS KMS アクションと KMS ARN を指定できます。詳細については、AWS Key Management Service デベロッパーガイドの「AWS KMS へのアクセス管理」を参照してください。

Amazon SNS トピックのカスタマー管理キーを選択し、エイリアスを使用して IAM ポリシーまたは KMS キーポリシーと条件キー kms:ResourceAliases により KMS キーへのアクセスを制御している場合は、選択したカスタマー管理キーにもエイリアスが関連付けられていることを確認してください。エイリアスを使用して KMS キーへのアクセスを制御する方法の詳細については、「AWS Key Management Service デベロッパーガイド」の「エイリアスを使用して KMS キーへのアクセスを制御する」を参照してください。

SSE を使用したトピックへのメッセージの送信をユーザーに許可する

パブリッシャーには、AWS KMS key に対する kms:GenerateDataKey* および kms:Decrypt アクセス許可が必要です。

{ "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, { "Effect": "Allow", "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:*:123456789012:MyTopic" }] }

AWS サービスと暗号化されたトピックのイベントソース間の互換性を有効化する

イベントは、複数の AWS サービスから Amazon SNS トピックに発行されます。これらのイベントソースで暗号化されたトピックを操作できるようにするには、以下のステップを実行します。

  1. カスタマーマネージドキーを使用します。詳細については、AWS Key Management Service デベロッパーガイドキーの作成を参照してください。

  2. AWS のサービスにアクセス許可として kms:GenerateDataKey*kms:Decrypt の許可を付与するには、次のステートメントを KMS ポリシーに追加します。

    { "Statement": [{ "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }] }
    [イベントソース] サービスプリンシパル
    Amazon CloudWatch cloudwatch.amazonaws.com
    Amazon CloudWatch Events events.amazonaws.com
    AWS CodeCommit codecommit.amazonaws.com
    AWS CodeStar codestar-notifications.amazonaws.com
    AWS Database Migration Service dms.amazonaws.com
    AWS Directory Service ds.amazonaws.com
    Amazon DynamoDB dynamodb.amazonaws.com
    Amazon Inspector inspector.amazonaws.com
    Amazon Redshift redshift.amazonaws.com
    Amazon RDS events.rds.amazonaws.com
    Amazon S3 Glacier glacier.amazonaws.com
    Amazon Simple Email Service ses.amazonaws.com
    Amazon Simple Storage Service s3.amazonaws.com
    AWS Snowball importexport.amazonaws.com
    AWS Systems Manager Incident Manager

    AWS Systems Manager Incident Manager は、次の 2 つのサービス原則で構成されています。

    ssm-incidents.amazonaws.com; ssm-contacts.amazonaws.com
    注記

    一部の Amazon SNS イベントソースでは、AWS KMS key ポリシーで IAM ロール (サービスプリンシパルではありません) を指定する必要があります。

  3. KMS リソースポリシーに aws:SourceAccount キーと aws:SourceArn 条件キーを追加して、混乱した代理攻撃から KMS キーをさらに保護します。それぞれの場合の正確な詳細については、サービス固有のドキュメントリスト (上記) を参照してください。

    重要

    AWS KMS ポリシーへの aws:SourceAccount および aws:SourceArn の追加は、EventBridge-to-encrypted トピックではサポートされていません。

    { "Effect": "Allow", "Principal": { "Service": "service.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": "customer-account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:service:region:customer-account-id:resource-type:customer-resource-id" } } }
  4. KMS を使用して、トピックの SSE を有効化します。

  5. 暗号化されたトピックの ARN をイベントソースに追加します。

AWS KMS エラー

Amazon SNS および AWS KMS を使用する際、エラーが発生することがあります。次のリストは、エラーおよび考えられるトラブルシューティング策を示しています。

KMSAccessDeniedException

暗号化テキストは、存在しないキーまたはアクセス権限のないキーを参照しています。

HTTP ステータスコード: 400

KMSDisabledException

指定された KMS が有効ではないため、リクエストが拒否されました。

HTTP ステータスコード: 400

KMSInvalidStateException

指定されたリソースの状態がこのリクエストに対して有効ではないため、リクエストが拒否されました。詳細については、「AWS Key Management Service 開発者ガイド」の「AWS KMS keys のキーステータス」を参照してください。

HTTP ステータスコード: 400

KMSNotFoundException

指定されたエンティティまたはリソースが見つからないため、リクエストが拒否されました。

HTTP ステータスコード: 400

KMSOptInRequired

サービスを利用するためには、AWS アクセスキー ID を取得する必要があります。

HTTP ステータスコード: 403

KMSThrottlingException

リクエストは、制限が必要なために実行が拒否されました。スロットリングの詳細については、「AWS Key Management Service デベロッパーガイド」の「クォータ」を参照してください。

HTTP ステータスコード: 400