翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS キー管理
Amazon は とSQS統合します。 AWS Key Management Service (KMS) サーバー側の暗号化 () のKMSキーを管理しますSSE。SSE 情報とキー管理の定義については、Amazon での保管時の暗号化 SQS「」を参照してください。Amazon SQS はKMS、キーを使用して、メッセージを暗号化および復号するデータキーを検証および保護します。以下のセクションでは、Amazon SQSサービスのKMSキーとデータキーの操作について説明します。
設定 AWS KMS 権限
すべてのKMSキーにはキーポリシーが必要です。のキーポリシーは変更できないことに注意してください。 AWS Amazon の マネージドKMSキーSQS。このKMSキーのポリシーには、アカウント内のすべてのプリンシパル (Amazon の使用が許可されているプリンシパルSQS) が暗号化されたキューを使用するためのアクセス許可が含まれています。
カスタマーマネージドKMSキーの場合、キュープロデューサーとコンシューマーごとにアクセス許可を追加するようにキーポリシーを設定する必要があります。これを行うには、KMSキーポリシーでプロデューサーとコンシューマーをユーザーとして指定します。の詳細については、「」を参照してください。 AWS KMS アクセス許可、「」を参照してください。 AWS KMS リソースとオペレーション、または AWS KMS API の アクセス許可リファレンス AWS Key Management Service デベロッパーガイド
または、暗号化されたメッセージを生成および使用するプリンシパルに割り当てられた IAMポリシーで必要なアクセス許可を指定することもできます。詳細については、「 でのIAMポリシーの使用」を参照してください。 AWS KMS ()AWS Key Management Service デベロッパーガイド
注記
Amazon との間で送受信するグローバルアクセス許可を設定できますがSQS、 AWS KMS では、 IAMポリシーARNの Resource
セクションで、特定のリージョンのKMSキーの完全な名前を明示的に指定する必要があります。
のKMSアクセス許可を設定する AWS サービス
複数 AWS サービスは、Amazon SQSキューにイベントを送信できるイベントソースとして機能します。これらのイベントソースが暗号化されたキューと連携できるようにするには、カスタマーマネージドKMSキーを作成し、必要な を使用するためのアクセス許可をサービス用のキーポリシーに追加する必要があります。 AWS KMS API メソッド。アクセス許可を設定するには、次の手順を実行します。
警告
Amazon SQSメッセージを暗号化するためのKMSキーを変更する場合、古いキーで暗号化された既存のメッセージはそのKMSキーで暗号化されたままになることに注意してください。これらのメッセージを復号するには、古いKMSキーを保持し、そのキーポリシーが のアクセス許可SQSを Amazon に付与していることを確認する必要がありますkms:GenerateDataKey
。新しいメッセージを暗号化するための新しいKMSキーに更新した後、古いKMSキーで暗号化された既存のメッセージがすべて処理され、キューから削除されたことを確認してから、古いKMSキーを削除または無効にします。
-
カスタマーマネージドKMSキーを作成します。詳細については、「」の「キーの作成」を参照してください。 AWS Key Management Service デベロッパーガイド
-
を許可するには AWS
kms:GenerateDataKey
API メソッドを使用する サービスイベントソースは、KMSキーポリシーに次のステートメントを追加します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "
service
.amazonaws.com" }, "Action": [ "kms:GenerateDataKey" ], "Resource": "*" }] }上記の例の「Service」をイベント出典のサービス名に置き換えます。イベントソースには、次のサービスが含まれます。
[イベントソース] サービス名 Amazon CloudWatch イベント events.amazonaws.com
Amazon S3イベント通知について s3.amazonaws.com
Amazon SNSトピックサブスクリプション sns.amazonaws.com
-
KMS キーARNの を使用して既存のSSEキューを設定します。
-
暗号化されたキューARNの をイベントソースに提供します。
構成する AWS KMS プロデューサーの アクセス許可
データキーの再利用期間が終了すると、プロデューサーが次に を呼び出すSendMessage
か、 への呼び出しSendMessageBatch
もトリガーしますkms:GenerateDataKey
。プロデューサーには、 KMSキーのkms:GenerateDataKey
アクセス許可が必要です。
プロデューサーのIAMポリシーに次のステートメントを追加します。キーリソースとキューリソースには、必ず正しいARN値を使用してください。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource":
"arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}, { "Effect": "Allow", "Action": [ "sqs:SendMessage" ], "Resource":"arn:aws:sqs:*:123456789012:MyQueue"
}] }
構成する AWS KMS コンシューマーの アクセス許可
データキー再利用期間が終了した場合、コンシューマーが次回に ReceiveMessage
を呼び出すと、それを使用する前に新しいデータキーの整合性を検証するために、kms:Decrypt
の呼び出しもトリガーされます。したがって、コンシューマーは、指定されたキュー内のメッセージを暗号化するために使用されるすべてのKMSキーに対する アクセスkms:Decrypt
許可を持っている必要があります。キューがデッドレターキュー として機能する場合、コンシューマーはソースキュー内のメッセージの暗号化に使用されるすべてのKMSキーに対する アクセスkms:Decrypt
許可も持っている必要があります。コンシューマーのIAMポリシーに次のステートメントを追加します。キーリソースとキューリソースには、必ず正しいARN値を使用してください。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource":
"arn:aws:kms:us-east-2:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}, { "Effect": "Allow", "Action": [ "sqs:ReceiveMessage" ], "Resource":"arn:aws:sqs:*:123456789012:MyQueue"
}] }
構成する AWS KMS 混乱した代理保護による アクセス許可
キーポリシーステートメントのプリンシパルが の場合 AWS サービスプリンシパル では、 aws:SourceArn
または aws:SourceAccount
グローバル条件キーを使用して、混乱した代理シナリオ から保護できます。これらの条件キーを使用するには、値を暗号化されているリソースの Amazon リソースネーム (ARN) に設定します。リソースARNの がわからない場合は、aws:SourceAccount
代わりに を使用してください。
このKMSキーポリシーでは、アカウントが所有するサービスからの特定のリソースが、Amazon SSEの使用中に発生する Decrypt
および GenerateDataKey
アクションKMSを呼び出す111122223333
ことができますSQS。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service":
"<replaceable>service</replaceable>.amazonaws.com"
}, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": ["arn:aws:service::111122223333:resource"
] } } }] }
SSE 有効な Amazon SQSキューを使用する場合、以下のサービスが をサポートしますaws:SourceArn
。
-
Amazon SNS
-
Amazon S3
-
CloudWatch イベント
-
AWS Lambda
-
CodeBuild
-
Amazon Connect Customer Profiles
-
AWS Auto Scaling
-
Amazon Chime
データキー再利用期間について
データキーの再利用期間は、Amazon が同じデータキーを再利用SQSする最大期間を定義します。データキーの再利用期間が終了すると、Amazon は新しいデータキーSQSを生成します。再利用期間については、次のガイドラインに注意してください。
-
再利用期間が短いほどセキュリティは向上しますが、 への呼び出しが増えます。 AWS KMS。 無料利用枠を超える料金が発生する場合があります。
-
データキーは暗号化用と復号化用に別々にキャッシュされますが、再利用期間はデータキーの両方のコピーに適用されます。
-
現在、
SQS:SendMessage
およびSQS:SendMessageBatch
オペレーションでは アクセスKMS:GenerateDataKey
許可のみが使用されます。アクセスkms:Decrypt
許可は、SQS:ReceiveMessage
オペレーション中のみ使用されます。 -
プリンシパル (AWS アカウント または ユーザー) はデータキーを共有しません (一意のプリンシパルによって送信されるメッセージは常に一意のデータキーを取得します)。したがって、 への呼び出しの量 AWS KMS は、データキーの再利用期間中に使用されている一意のプリンシパルの数の倍数です。
見積り AWS KMS コスト
コストを予測し、 をよりよく理解するには AWS 請求書、Amazon がKMSキーSQSを使用する頻度を知りたい場合があります。
注記
次の式は、予想されるコストを非常によく理解できますが、Amazon の分散性により、実際のコストが高くなる可能性がありますSQS。
キュー あたりのAPIリクエスト数 (R
) を計算するには、次の式を使用します。
R = (B / D) * (2 * P + C)
B
は請求期間(秒)です。
D
は、データキー再利用期間(秒)です。
P
は、 が Amazon SQSキューに送信する生成プリンシパルの数です。
C
は、Amazon SQSキューから を受信する消費プリンシパルの数です。
重要
一般的に、プロデューサー側プリンシパルで発生するコストはコンシューマー側プリンシパルの倍程度になります。詳細については、「データキー再利用期間について」を参照してください。
プロデューサーとコンシューマーの ユーザーが異なる場合、コストは増加します。
以下は計算の例です。正確な料金情報については、「」を参照してください。 AWS Key Management Service 料金
例 1: の数の計算 AWS KMS API は 2 つのプリンシパルと 1 つのキューを呼び出します
この例では、以下を想定しています。
-
請求期間は1月1日から31日(2,678,400秒)です。
-
データキー再利用期間は5分(300秒)に設定されています。
-
キューの数は 1 つです。
-
プロデューサー側プリンシパルが1つ、コンシューマー側プリンシパルが1つあります。
(2,678,400 / 300) * (2 * 1 + 1) = 26,784
例 2: の数の計算 AWS KMS API 複数のプロデューサーとコンシューマー、2 つのキューを呼び出す
この例では、以下を想定しています。
-
請求期間は2月1日から28日(2,419,200秒) です。
-
データキー再利用期間は24時間(86,400秒)に設定されています。
-
キューの数は2つです。
-
1つ目のキューのプロデューサー側プリンシパルは3つ、コンシューマー側プリンシパルは1つです。
-
2つ目のキューのプロデューサー側プリンシパルは5つ、コンシューマー側プリンシパルは2つです。
(2,419,200 / 86,400 * (2 * 3 + 1)) + (2,419,200 / 86,400 * (2 * 5 + 2)) = 532
AWS KMS エラー
Amazon SQSおよび を使用する場合 AWS KMS、エラーが発生する可能性があります。次のリファレンスでは、エラーおよび考えられるトラブルシューティング方法について説明します。