翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SNS アクセスコントロールのケース例
このセクションでは、アクセスコントロールの一般的なユースケース例をいくつか紹介します。
トピック
- トピックへの AWS アカウント アクセスの付与
- HTTPS へのサブスクリプションの制限
- Amazon SQS キューに発行する。
- Amazon S3 イベント通知がトピックに発行することを許可する
- Amazon SES が別のアカウントが所有するトピックへの発行を許可する
- aws:SourceAccount と aws:SourceOwner
- AWS Organizations の組織のアカウントが別のアカウントのトピックに発行することを許可する
- CloudWatch アラームが別のアカウントのトピックに発行することを許可する
- Amazon SNS トピックの発行を特定の VPC エンドポイントのみからに制限する
トピックへの 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:SourceAccount
と aws:SourceOwner
重要
aws:SourceOwner
は廃止されました。新しいサービスを Amazon SNS と統合できるのは、aws:SourceArn
と aws:SourceAccount
を使用した場合のみです。Amazon SNS は、現在 aws:SourceOwner
をサポートしている既存のサービスとの下位互換性を引き続き維持しています。
aws:SourceAccount
条件キーと aws:SourceOwner
条件キーは、一部の AWS のサービスが Amazon SNS トピックに発行するときに、それぞれ設定されます。サポートされている場合、値は 12 桁の AWS アカウント ID で、サービスがアカウントに代わってデータを発行します。サービスによってサポートするものは変わります。
-
Amazon S3 通知がどのように
aws:SourceAccount
を使用するか、およびその条件をサポートする AWS サービスのリストに関しては「Amazon S3 イベント通知がトピックに発行することを許可する」を参照してください。 -
Amazon SES 通知がどのように
aws:SourceOwner
を使用するか、およびその条件をサポートする AWS サービスのリストに関しては「Amazon SES が別のアカウントが所有するトピックへの発行を許可する」を参照してください。
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" } } }] }