Amazon SNS アクセスコントロールのケース例 - Amazon Simple Notification Service

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

Amazon SNS アクセスコントロールのケース例

このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。

トピックへの AWS アカウント アクセスの付与

Amazon SNS システムにトピックがあるとします。最も簡単なケースとして、特定のトピックアクション (発行など) へのアクセスを 1 つ以上の AWS アカウント に許可するとします。

これは、Amazon SNS API アクション AddPermission を使用して実行できます。これには、トピック、AWS アカウント ID リスト、アクションリスト、ラベルが必要ですが、トピックのアクセスコントロールポリシー内に新規ステートメントが自動的に作成されます。この場合、 Amazon SNS により新規ポリシーステートメントが自動的に作成されます。手動でポリシーを記述する必要はありません。ラベルと共に RemovePermission を呼び出すことによって、後日ポリシーステートメントを削除することができます。

例えば、トピック arn:aws:sns:us-east-2:444455556666:MyTopic、AWS アカウントID 1111-2222-3333、 Publishアクション、ラベル AddPermissionで を呼び出した場合grant-1234-publish、Amazon SNS は次のアクセスコントロールポリシーステートメントを生成して挿入します。

{ "Statement": [{ "Sid": "grant-1234-publish", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Publish"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic" }] }

一度このステートメントが追加されてしまえば、AWS アカウント 1111-2222-3333 のユーザーはトピックへメッセージを発行することができます。

HTTPS へのサブスクリプションの制限

以下の例では、通知配信プロトコルを HTTPS に制限します。

Amazon SNS AddPermission アクションでは、トピックへのアクセスを許可できるだけです。プロトコル制限を指定するには、独自のポリシーを記述する必要があります。つまり、独自のポリシーを記述し、Policy アクションを使用してトピックの SetTopicAttributes 属性をその新しいポリシーに設定します。

以下の例では、全ポリシーが、AWS アカウント ID 1111-2222-3333 にトピックからの通知サブスクリプション能力を付与しています。

{ "Statement": [{ "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": ["sns:Subscribe"], "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "sns:Protocol": "https" } } }] }

Amazon SQS キューに発行する。

このユースケースでは、トピックから Amazon SQS キューへのメッセージを発行するものとします。Amazon SNS のように、Amazon SQS も Amazon のアクセスコントロールポリシー言語を使用します。Amazon SNS からのメッセージ送信を許可するには、キューにおいてポリシーを設定するために Amazon SQS アクション SetQueueAttributes を使用することが必要となります。

Amazon SQS AddPermission アクションでは、条件付きポリシーステートメントを作成できません。これを作成するには、独自のポリシーを記述する必要があります。

注記

以下の例は、Amazon SQS ポリシー (キューへのアクセスコントロール) を示すもので、Amazon SNS ポリシー (トピックへのアクセスコントロール) を示すものではありません。アクションとは Amazon SQS アクションのことで、リソースとはキューの Amazon リソースネーム (ARN) のことです。GetQueueAttributes アクションと共にキューの QueueArn 属性を取得することにより、キューの ARN を決定する事ができます。

{ "Statement": [{ "Sid": "Allow-SNS-SendMessage", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": ["sqs:SendMessage"], "Resource": "arn:aws:sqs:us-east-2:444455556666:MyQueue", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:sns:us-east-2:444455556666:MyTopic" } } }] }

このポリシーには、キューへ送信されるメッセージのソースに基づいたキューへのアクセス制限のための aws:SourceArn 条件が使用されます。お客様ご自身のトピックの 1 つから送信されたメッセージであった場合、 Amazon SNS に対し、キューからのメッセージ送信を許可するために、このタイプのポリシーを使用することができます。この場合、ARN が arn:aws:sns:us-east-2:444455556666: である特定のトピックを指定しますMyTopic。

前述のポリシーを例として、Amazon SQS ポリシーを記述したり、特定のキューに追加することができます。Amazon SNS およびその 他 AWS のサービスへのアクセスを許可します。Amazon SNS は、新しく作成されたすべてのトピックにデフォルトポリシーを付与します。デフォルトのポリシーでは、他のすべての AWS サービスに対するトピックへのアクセスを付与します。このデフォルトポリシーは aws:SourceArn 条件を使用して、お客様が所有する AWS リソースに代わる場合にのみ AWS サービスがお客様のトピックにアクセスすることを確実にします。

Amazon S3 イベント通知がトピックに発行することを許可する

この場合、別の AWS アカウント の Amazon S3 バケットがお客様のトピックへの発行ができるよう、トピックのポリシーを設定します。Amazon S3 からの通知の発行の詳細については、「バケットイベントの通知の設定」を参照してください。

この例では、お客様が自身でポリシーの記述をするものと仮定され、お客様の新規ポリシーへのトピックの Policy 属性を設定するための SetTopicAttributes アクションとして使用されます。

以下のステートメント例では、SourceAccount 条件を使用して、Amazon S3 所有者アカウントのみがトピックにアクセスできるようにしています。この例では、トピック所有者は 111122223333、また Amazon S3 所有者は 444455556666 となっています。この例では、444455556666 が所有するすべての Amazon S3 バケットが への発行を許可されていることが示されています MyTopic。

{ "Statement": [{ "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-east-2:111122223333:MyTopic", "Condition": { "StringEquals": { "AWS:SourceAccount": "444455556666" } } }] }

Amazon SNS にイベントを発行する場合、以下のサービスで aws:SourceAccount を使用できます。

  • Amazon API Gateway

  • Amazon CloudWatch

  • Amazon DevOpsGuru

  • Amazon ElastiCache

  • Amazon GameLift

  • Amazon Pinpoint SMS および音声 API

  • Amazon RDS

  • Amazon Redshift

  • Amazon S3 Glacier

  • Amazon SES

  • Amazon Simple Storage Service

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

Amazon SES が別のアカウントが所有するトピックへの発行を許可する

AWS のサービスに別の AWS アカウント によって所有されているトピックに発行する許可を付与することができます。111122223333 アカウントにサインインし、Amazon SES を開き、E メールを作成したとします。この E メールに関する通知を、444455556666 アカウントが所有する Amazon SNS トピックに発行するには、以下のようなポリシーを作成します。そのためには、プリンシパル (他のサービス) と各リソースの所有権に関する情報を提供する必要があります。Resource ステートメントは、トピック所有者のアカウント ID 444455556666 を含むトピック ARN を提供します。"aws:SourceOwner": "111122223333" ステートメントは、アカウントがその E メールを所有することを指定します。

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "Service": "ses.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:SourceOwner": "111122223333" } } } ] }

Amazon SNS にイベントを発行する場合、以下のサービスで aws:SourceOwner を使用できます。

  • Amazon API Gateway

  • Amazon CloudWatch

  • Amazon DevOpsGuru

  • Amazon ElastiCache

  • Amazon GameLift

  • Amazon Pinpoint SMS および音声 API

  • Amazon RDS

  • Amazon Redshift

  • Amazon SES

  • AWS CodeCommit

  • AWS Directory Service

  • AWS Lambda

  • AWS Systems Manager Incident Manager

aws:SourceAccountaws:SourceOwner

重要

aws:SourceOwner は廃止されました。新しいサービスを Amazon SNS と統合できるのは、aws:SourceArnaws:SourceAccount を使用した場合のみです。Amazon SNS は、現在 aws:SourceOwner をサポートしている既存のサービスとの下位互換性を引き続き維持しています。

aws:SourceAccount 条件キーと aws:SourceOwner 条件キーは、一部の AWS のサービスが Amazon SNS トピックに発行するときに、それぞれ設定されます。サポートされている場合、値は 12 桁の AWS アカウント ID で、サービスがアカウントに代わってデータを発行します。サービスによってサポートするものは変わります。

AWS Organizations の組織のアカウントが別のアカウントのトピックに発行することを許可する

AWS Organizations サービスは、請求の一元管理、アクセスとセキュリティの制御、AWS アカウント 間でのリソースの共有に役立ちます。

組織 ID は Organizations コンソールで確認できます。詳細については、「管理アカウントからの組織の詳細の表示」を参照してください。

この例では、組織 myOrgId の任意の AWS アカウント が、アカウント 444455556666 の Amazon SNS トピック MyTopic に発行できます。ポリシーでは、aws:PrincipalOrgID グローバル条件キーを使用して組織 ID 値を確認します。

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "myOrgId" } } } ] }

CloudWatch アラームが別のアカウントのトピックに発行することを許可する

この場合、アカウント の CloudWatch アラーム111122223333は、アカウント の Amazon SNS トピックに発行できます444455556666

{ "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudwatch:us-east-2:111122223333:alarm:*" } } } ] }

Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する

この場合、アカウント 444455556666 内のトピックは、ID vpce-1ab2c34d の VPC エンドポイントのみからの発行を許可されます。

{ "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "SNS:Publish", "Resource": "arn:aws:sns:us-east-2:444455556666:MyTopic", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1ab2c34d" } } }] }