別の AWS アカウントにある Amazon Kinesis ストリームを使用して AWS Lambda 関数を呼び出したいと考えています。
解決策
Amazon Kinesis Data Streams は、リソースベースのポリシーをサポートしています。これにより、あるアカウントのストリームに取り込まれたデータを、別のアカウントの AWS Lambda 関数で処理できます。
以下の手順に従って Lambda 関数を作成し、Kinesis Data Streams にアクセスするように設定します。
Lambda 実行ロールを作成する
- IAM コンソールにアクセスし、[ロール] タブを選択します。
- [ロールを作成] を選択します。
- AWS サービスの場合は、[信頼されたエンティティタイプ] を選択します。[サービス] で [Lambda] を選択します。
- [アクセス許可ポリシー] テーブルで、マネージド IAM ポリシー AWSLambdaKinesisExecutionRole を選択します。
- ロールの名前を指定し、[ロールを作成] を選択します。
注: マネージド IAM ポリシー AWSLambdaKinesisExecutionRole には、必要な Kinesis Data Streams および Lambda 呼び出しの権限があります。また、アクセスできる可能性のあるすべての Kinesis Data Streams リソースへのアクセスも許可されます。
Lambda 関数を作成する
Amazon Kinesis Data Streams でレコードを処理できる AWS Lambda 関数を作成 します。
[実行ロール] で、作成したロールを選択します。
注: このポリシーには、Kinesis Data Streams および Lambda 呼び出しの必要な権限があります。また、アクセスできる可能性のあるすべての Kinesis Data Streams リソースへのアクセスも許可されます。
実行ロールを Kinesis Data Streams リソース所有者に追加して、リソースポリシーを設定します。
Kinesis Data Streams を設定する
- Amazon Kinesis Data Stream コンソールにアクセスし、データストリームを選択します。
- [データストリーム共有] タブを選択します。
- [ポリシーを作成] ボタンをクリックして、ビジュアルポリシーエディターを起動します。
- [拡張ファンアウト] タブでコンシューマーを選択し、登録されたコンシューマーをデータストリーム内で共有します。
- [ポリシーを作成] を選択します。JSON ポリシーを直接記述することもできます。
- [プリンシパル] に、作成したクロスアカウントの Lambda 実行ロールを入力します。必ず kinesis:DescribeStream というアクションを含めてください。
Kinesis Data Streams のリソースポリシーの例について詳しくは、「Kinesis Data Streams のリソースベースのポリシーの例」を参照してください。
- [ポリシーを作成] を選択します。または、PutResourcePolicy を使用してポリシーをリソースにアタッチすることもできます。
AWS マネージドキーでサーバー側の暗号化を使用し、リソースポリシーを介してアクセスを共有する場合は、カスタマーマネージドキー (AWS KMS キー) を使用する必要があります。詳細については、「What is server-side Encryption for Kinesis Data Streams?」を参照してください。また、共有プリンシパルエンティティが KMS クロスアカウントアクセスを通じて KMS キーにアクセスできるようにする必要があります。詳細については、「Allowing users in other accounts to use a KMS key」を参照してください。