Amazon SNS暗号化キーとコストの管理 - Amazon Simple Notification Service

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

Amazon SNS暗号化キーとコストの管理

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

注記

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

AWS KMS コストの見積もり

コストを予測し、 AWS 請求書をよりよく理解するために、Amazon が SNSを使用する頻度を知りたい場合があります AWS KMS key。

注記

次の式は、予想されるコストを非常によく理解できますが、Amazon の分散性により、実際のコストが高くなる可能性がありますSNS。

トピック あたりのAPIリクエスト数 (R) を計算するには、次の式を使用します。

R = B / D * (2 * P)

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

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

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

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

例 1: 1 つのパブリッシャーと 1 つのトピックの呼び出し数 AWS KMS APIの計算

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

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

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

  • 1 トピックあります。

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

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

例 2: 複数のパブリッシャーと 2 つのトピックの AWS KMS API呼び出し数の計算

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

  • 請求期間は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キーのアクセス許可を管理することもできます。詳細については、「 でのIAMポリシーの使用 AWS KMS」を参照してください。

Amazon との間で送受信するグローバルアクセス許可を設定できますがSNS、 AWS KMS では、IAMポリシーの Resourceセクションの特定のリージョンARNKMSsで のフルネームを明示的に指定する必要があります。

また、 のキーポリシーで必要なアクセス許可 AWS KMS key が許可されていることを確認する必要があります。これを行うには、Amazon で暗号化されたメッセージを生成および消費するプリンシパルをKMS、キーポリシーのユーザーSNSとして指定します。

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

Amazon SNSトピックのカスタマーマネージドキーを選択し、エイリアスを使用して 条件KMSキー でIAMポリシーまたはKMSキーポリシーを使用してキーへのアクセスを制御する場合はkms:ResourceAliases、選択したカスタマーマネージドキーにもエイリアスが関連付けられていることを確認してください。エイリアスを使用して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.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. aws:SourceAccount および aws:SourceArn条件キーをKMSリソースポリシーに追加して、混乱した代理攻撃からKMSキーをさらに保護します。それぞれの場合の正確な詳細については、サービス固有のドキュメントリスト (上記) を参照してください。

    重要

    AWS KMS ポリシーaws:SourceArnへの aws:SourceAccountと の追加は、トピックでは 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. を使用してトピックSSEで を有効にしますKMS。

  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