

# 宛先にイベント通知メッセージを発行するアクセス許可の付与
<a name="grant-destinations-permissions-to-s3"></a>

Amazon S3 プリンシパルに、SNS トピック、SQS キュー、Lambda 関数へメッセージを公開する関連する API を呼び出すため必要なアクセス許可を付与する必要があります。これは、Amazon S3 がイベント通知メッセージを宛先に公開できるようにするためです。

イベント通知メッセージを送信先に公開する場合のトラブルシューティングについては、[「Amazon S3 イベント通知を Amazon Simple Notification Service に公開するためのトラブルシューティング](https://repost.aws/knowledge-center/sns-not-receiving-s3-event-notifications)」トピックを参照してください。

**Topics**
+ [AWS Lambda 関数を呼び出すアクセス許可の付与](#grant-lambda-invoke-permission-to-s3)
+ [SNS トピックまたは SQS キューにメッセージを発行するアクセス許可の付与](#grant-sns-sqs-permission-for-s3)

## AWS Lambda 関数を呼び出すアクセス許可の付与
<a name="grant-lambda-invoke-permission-to-s3"></a>

Amazon S3 は Lambda 関数を呼び出してイベントメッセージを AWS Lambda に発行し、イベントメッセージを引数として指定します。

Amazon S3 コンソールを使用して Lambda 関数の AmazonS3 バケットにイベント通知を設定すると、コンソールは Lambda 関数に必要なアクセス許可を設定します。これは、Amazon S3 がバケットから関数を呼び出す許可があるからです。詳細については、[Amazon S3 コンソールを使用したイベント通知の有効化と設定](enable-event-notifications.md) を参照してください。

AWS Lambda から Amazon S3 の許可を付与して、Lambda 関数を呼び出すこともできます。詳細については、*AWS Lambda デベロッパーガイド*の[チュートリアル: Amazon S3 で AWS Lambda を使用する](https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html)を参照してください。

## SNS トピックまたは SQS キューにメッセージを発行するアクセス許可の付与
<a name="grant-sns-sqs-permission-for-s3"></a>

SNS トピックや SQS キューにメッセージを発行する許可を Amazon S3 に付与するには、AWS Identity and Access Management (IAM) ポリシーを宛先 SNS トピックや SQS キューにアタッチします。

SNS トピックや SQS キューにポリシーをアタッチする方法の例については、[チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する](ways-to-add-notification-config-to-bucket.md) を参照してください。アクセス許可の詳細については、次のトピックを参照してください。
+ 「[Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com/sns/latest/dg/AccessPolicyLanguage_UseCases_Sns.html)」の「*Amazon SNS アクセスコントロールのケース例*」
+ **「Amazon Simple Queue サービスデベロッパーガイド」の「[Amazon SQS での Identity and Access Management](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/UsingIAM.html)」

### 発行先 SNS トピックの IAM ポリシー
<a name="sns-topic-policy"></a>

以下は、発行先 SNS トピックにアタッチする AWS Identity and Access Management (IAM) ポリシーの例です。このポリシーを使用してイベント通知の宛先 Amazon SNS トピックを設定する方法については、[チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する](ways-to-add-notification-config-to-bucket.md) を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "Example SNS topic policy",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SNS:Publish"
            ],
            "Resource": "arn:aws:sns:us-east-1:{{111122223333}}:{{example-sns-topic}}",
            "Condition": {
                "ArnEquals": {
                    "aws:SourceArn": "arn:aws:s3:::{{amzn-s3-demo-bucket}}"
                },
                "StringEquals": {
                    "aws:SourceAccount": "{{bucket-owner-123456789012}}"
                }
            }
        }
    ]
}
```

------

### 発行先 SQS キューの IAM ポリシー
<a name="sqs-queue-policy"></a>

以下は、発行先 SQS キューにアタッチする IAM ポリシーの例です。このポリシーを使用してイベント通知の宛先 Amazon SQS キューを設定する方法については、[チュートリアル: 通知 (SNS トピックまたは SQS キュー) のバケットを設定する](ways-to-add-notification-config-to-bucket.md) を参照してください。

このポリシーを使用するには、Amazon SQS キューの ARN、バケット名、およびバケット所有者の AWS アカウント ID を更新する必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "example-statement-ID",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "SQS:SendMessage"
            ],
            "Resource": "arn:aws:sqs:{{us-east-1}}:{{111122223333}}:{{queue-name}}",
            "Condition": {
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:s3:*:*:{{amzn-s3-demo-bucket}}"
                },
                "StringEquals": {
                    "aws:SourceAccount": "{{bucket-owner-123456789012}}"
                }
            }
        }
    ]
}
```

------

Amazon SNS および Amazon SQS IAM ポリシーの両方について、`StringLike` 条件の代わりにポリシーで `ArnLike` 条件を指定できます。

`ArnLike` を使用する場合、ARN のパーティション、サービス、アカウント ID、リソースタイプ、および部分的なリソース ID 部分が、リクエストコンテキストの ARN と完全に一致する必要があります。部分一致が許可されるのは、リージョンとリソースパスのみです。

 `ArnLike` の代わりに `StringLike` を使用すると、マッチングでは ARN 構造が無視され、ワイルドカード文字で置換される部分に関係なく部分一致が可能になります。詳細については、「*IAM ユーザーガイド*」の「[IAM JSON のポリシー要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)」を参照してください。

```
"Condition": {         
  "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:{{{{amzn-s3-demo-bucket}}}}" }
  }
```

### AWS KMS キーポリシー
<a name="key-policy-sns-sqs"></a>

SQS キューまたは SNS トピックが AWS Key Management Service (AWS KMS) カスタマーマネージドキーで暗号化されている場合は、暗号化されたトピックまたはキューを操作するための許可を Amazon S3 サービスプリンシパルに付与する必要があります。Amazon S3 サービスプリンシパルに許可を付与するには、カスタマーマネージドキーのキーポリシーに次のステートメントを追加します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-ID",
    "Statement": [
        {
            "Sid": "example-statement-ID",
            "Effect": "Allow",
            "Principal": {
                "Service": "s3.amazonaws.com"
            },
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "*"
        }
    ]
}
```

------

AWS KMS キーポリシーの詳細については、*AWS Key Management Service デベロッパーガイド*の [AWS KMS でキーポリシーを使用する](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)を参照してください。

Amazon SQS および Amazon SNS 用の AWS KMS でのサーバー側の暗号化の使用の詳細については、以下を参照してください。
+ 「**Amazon Simple Notification Service デベロッパーガイド」の「[キー管理](https://docs.aws.amazon.com/sns/latest/dg/sns-key-management.html)」。
+ **「Amazon Simple Queue Service デベロッパーガイド」の「[キー管理](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-key-management.html)」。
+ [AWS KMS コンピューティングブログ](https://aws.amazon.com/blogs/compute/encrypting-messages-published-to-amazon-sns-with-aws-kms/) の *Encrypting messages published to Amazon SNS with AWS*。