IAM を使用した Amazon Kinesis Data Streams リソースへのアクセスの制御 - Amazon Kinesis Data Streams

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

IAM を使用した Amazon Kinesis Data Streams リソースへのアクセスの制御

AWS Identity and Access Management (IAM) では、次のことを実行できます。

  • AWS アカウントでユーザーとグループを作成する

  • AWS アカウント内の各ユーザーに一意のセキュリティ認証情報を割り当てる

  • AWS リソースを使用してタスクを実行するための各ユーザーのアクセス許可を制御する

  • 別の AWS アカウントのユーザーに AWS リソースの共有を許可する

  • AWS アカウントのロールを作成し、それを引き受けることができるユーザーまたはサービスを定義する

  • 企業の既存の ID を使用して、 AWS リソースを使用してタスクを実行するためのアクセス許可を付与する

Kinesis Data Streams と組み合わせて IAM を使用すると、組織のユーザーが特定の Kinesis Data Streams API アクションを使用してタスクを実行できるかどうか、また、特定の AWS リソースを使用できるかどうかを制御できます。

Kinesis Client Library (KCL) を使用してアプリケーションを開発する場合、ポリシーには Amazon DynamoDB および Amazon のアクセス許可が含まれている必要があります CloudWatch。KCL は DynamoDB を使用してアプリケーションの状態情報を追跡し、ユーザーに代わって CloudWatch に KCL メトリクス CloudWatchを送信します。KCL の詳細については、KCL 1.x コンシューマーの開発を参照してください。

IAM の詳細については、以下を参照してください。

IAM と Amazon DynamoDB の詳細については、Amazon DynamoDB デベロッパーガイドIAM を使用した Amazon DynamoDB リソースへのアクセスのコントロールを参照してください。

IAM および Amazon の詳細については CloudWatch、「Amazon ユーザーガイド」の「 AWS アカウントへのユーザーアクセスの制御」を参照してください。 CloudWatch

ポリシー構文

IAM ポリシーは、1 つ、または複数のステートメントで構成される JSON ドキュメントです。各ステートメントは次のように構成されます。

{ "Statement":[{ "Effect":"effect", "Action":"action", "Resource":"arn", "Condition":{ "condition":{ "key":"value" } } } ] }

ステートメントはさまざまなエレメントで構成されています。

  • [Effect]: effect は、Allow または Deny にすることができます。デフォルトでは、IAM ユーザーはリソースおよび API アクションを使用するアクセス許可がないため、リクエストはすべて拒否されます。明示的な許可はデフォルトに優先します。明示的な拒否はすべての許可に優先します。

  • [アクション]: アクション は、アクセス許可を付与または拒否する対象とする、特定の API アクションです。

  • [リソース]: アクションによって影響を及ぼされるリソースです。ステートメント内でリソースを指定するには、Amazonリソースネーム(ARN)を使用する必要があります。

  • Condition: condition はオプションです。これらは、ポリシーがいつ有効になるかを制御するために使用できます。

IAM のポリシーを作成および管理するときは、IAM Policy GeneratorIAM Policy Simulator を使用することもできます。

Kinesis Data Streams のアクション

IAM ポリシーステートメントで、IAM をサポートするすべてのサービスからの任意の API アクションを指定できます。Kinesis Data Streams の場合、API アクションの名前とともに次のプレフィックスを使用します: kinesis:。例えば、kinesis:CreateStreamkinesis:ListStreams、および kinesis:DescribeStreamSummary のようになります。

単一のステートメントで複数のアクションを指定するには、次のようにカンマで区切ります。

"Action": ["kinesis:action1", "kinesis:action2"]

ワイルドカードを使用して複数のアクションを指定することもできます。たとえば、Getという単語で始まる名前のすべてのアクションは、以下のように指定できます。

"Action": "kinesis:Get*"

すべてのKinesis Data Streams オペレーションを指定するには、次のように * ワイルドカードを使用します。

"Action": "kinesis:*"

Kinesis Data Streams API アクションの一覧については、Amazon Kinesis API リファレンス を参照してください。

Kinesis Data Streams の Amazon リソースネーム (ARN)

各 IAM ポリシーステートメントは、ARN を使用して指定されたリソースに適用されます。

Kinesis data streams には、以下の ARN リソースフォーマットを使用します。

arn:aws:kinesis:region:account-id:stream/stream-name

例:

"Resource": arn:aws:kinesis:*:111122223333:stream/my-stream

Kinesis Data Streams のポリシーの例

次のポリシー例は、Kinesis Data Streams へのユーザーアクセスの制御方法について説明しています。

Example 1: Allow users to get data from a stream

このポリシーは、ユーザーまたはグループが、指定されたストリームで DescribeStreamSummaryGetShardIterator、または GetRecords 操作を実行し、任意のストリームで ListStreams を実行できるようにします。このポリシーは、特定のストリームからデータを取得できるユーザーに適用できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:Get*", "kinesis:DescribeStreamSummary" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] }, { "Effect": "Allow", "Action": [ "kinesis:ListStreams" ], "Resource": [ "*" ] } ] }
Example 2: Allow users to add data to any stream in the account

このポリシーは、ユーザーまたはグループが、アカウント内の任意のストリームで PutRecord 操作を使用できるようにします。このポリシーは、アカウント内のすべてのストリームにデータレコードを追加できるユーザーに適用できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecord" ], "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/*" ] } ] }
Example 3: Allow any Kinesis Data Streams action on a specific stream

このポリシーでは、ユーザーまたはグループが、指定したストリームに対して任意の Kinesis Data Streams オペレーションを実行できます。このポリシーは、特定のストリームに対して管理的な制御を行えるユーザーに適用できます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ] } ] }
Example 4: Allow any Kinesis Data Streams action on any stream

このポリシーでは、ユーザーまたはグループが、アカウントの任意のストリームに対して任意の Kinesis Data Streams オペレーションを実行できます。このポリシーはすべてのストリームへの完全なアクセス権を付与するため、管理者のみに制限する必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:*", "Resource": [ "arn:aws:kinesis:*:111122223333:stream/*" ] } ] }

別のアカウントとのデータストリームの共有

リソースベースのポリシーをデータストリームにアタッチして、別のアカウント、IAM ユーザー、または IAM ロールへのアクセス権を付与します。リソースベースのポリシーは、データストリームなどのリソースにアタッチする JSON ポリシードキュメントです。これらのポリシーでは、そのリソースに対して特定のアクションを実行する指定されたプリンシパルアクセス許可を付与し、このアクセス許可が適用される条件を定義します。ポリシーには複数のステートメントを含めることができます。リソースベースのポリシーで、プリンシパルを指定する必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、または AWS サービスを含めることができます。ポリシーは、Kinesis Data Streams コンソール、API、SDK で設定できます。

拡張ファンアウトなどの登録済みコンシューマーへのアクセスを共有するには、データストリーム ARN とコンシューマー ARN の両方でポリシーが必要であることに注意してください。

クロスアカウントアクセスの有効化

クロスアカウントアクセスを有効にするには、アカウント全体、または別のアカウントの IAM エンティティをリソースベースのポリシーのプリンシパルとして指定します。リソースベースのポリシーにクロスアカウントのプリンシパルを追加しても、信頼関係は半分しか確立されない点に注意してください。プリンシパルとリソースが別の AWS アカウントにある場合は、アイデンティティベースのポリシーも使用して、プリンシパルにリソースへのアクセス権を付与する必要があります。ただし、リソースベースのポリシーで、同じアカウントのプリンシパルへのアクセス権が付与されている場合は、ID ベースのポリシーをさらに付与する必要はありません。

クロスアカウントアクセスでリソースベースのポリシーを使用する方法の詳細については、「IAM でのクロスアカウントのリソースへのアクセス」を参照してください。

データストリーム管理者は、 AWS Identity and Access Management ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どのプリンシパルがどんなリソースにどんな条件アクションを実行できるかということです。JSON ポリシーのAction要素には、ポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。ポリシーアクションの名前は通常、関連する AWS API オペレーションと同じです。

共有可能な Kinesis Data Streams のアクション:

アクション アクセスのレベル
DescribeStreamConsumer コンシューマー
DescribeStreamSummary データストリーム
GetRecords データストリーム
GetShardIterator データストリーム
ListShards データストリーム
PutRecord データストリーム
PutRecords データストリーム
SubscribeToShard コンシューマー

リソースベースのポリシーを使用して、データストリームまたは登録済みコンシューマーにクロスアカウントアクセスを許可する例を以下に示します。

クロスアカウントのアクションを実行するには、データストリームにアクセスするためのストリーム ARN と登録済みコンシューマーにアクセスするためのコンシューマー ARN を指定する必要があります。

Kinesis Data Streams のリソースベースのポリシーの例

登録済みコンシューマーの共有には、必要なアクションを実行するために、データストリームポリシーとコンシューマーポリシーの両方が必要になります。

注記

次に示すのは、Principal の有効な値の例です。

  • {"AWS": "123456789012"}

  • IAM ユーザー – {"AWS": "arn:aws:iam::123456789012:user/user-name"}

  • IAM ロール – {"AWS":["arn:aws:iam::123456789012:role/role-name"]}

  • 複数のプリンシパル (アカウント、ユーザー、ロールの組み合わせが可能) — {"AWS":["123456789012", "123456789013", "arn:aws:iam::123456789012:user/user-name"]}

Example 1: Write access to the data stream
{ "Version": "2012-10-17", "Id": "__default_write_policy_ID", "Statement": [ { "Sid": "writestatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 2: Read access to the data stream
{ "Version": "2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "sharedthroughputreadstatement", "Effect": "Allow", "Principal": { "AWS": "Account12345" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:GetRecords", "kinesis:GetShardIterator" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }
Example 3: Share enhanced fan-out read access to a registered consumer

データストリームポリシーステートメント:

{ "Version": "2012-10-17", "Id": "__default_sharedthroughput_read_policy_ID", "Statement": [ { "Sid": "consumerreadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account12345:role/role-name" }, "Action": [ "kinesis:DescribeStreamSummary", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC" } ] }

コンシューマーポリシーステートメント:

{ "Version": "2012-10-17", "Id": "__default_efo_read_policy_ID", "Statement": [ { "Sid": "eforeadstatement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::Account12345:role/role-name" }, "Action": [ "kinesis:DescribeStreamConsumer", "kinesis:SubscribeToShard" ], "Resource": "arn:aws:kinesis:us-east-2:123456789012:stream/datastreamABC/consumer/consumerDEF:1674696300" } ] }

最小特権の原則を維持するため、アクションやプリンシパルフィールドではワイルドカード (*) はサポートされていません。

データストリームのポリシーのプログラムによる管理

の外部では AWS Management Console、Kinesis Data Streams にデータストリームポリシーを管理するための 3 つの API があります。

PutResourePolicy を使用して、データストリームまたはコンシューマーのポリシーをアタッチまたは上書きします。GetResourcePolicy を使用して、指定したデータストリームまたはコンシューマーのポリシーを確認し、表示します。DeleteResourcePolicy を使用して、指定したデータストリームまたはコンシューマーのポリシーを削除します。

ポリシー制限

Kinesis Data Streams リソースポリシーには次の制限があります。

  • 最小特権の原則を維持するため、アクションやプリンシパルのセクションではワイルドカード (*) はサポートされていません。

  • AWS サービスプリンシパルは、混乱した代理の可能性を防ぐため、プリンシパルではサポートされていません。

  • フェデレーションプリンシパルはサポートされていません。

  • 正規ユーザー ID はサポートされていません。

  • ポリシーのサイズは 20 KB までです。

暗号化されたデータへのアクセスの共有

AWS マネージド KMS キーを使用してデータストリームのサーバー側の暗号化を有効にしていて、リソースポリシーを介してアクセスを共有する場合は、カスタマーマネージドキー (CMK) の使用に切り替える必要があります。詳細については、「Kinesis Data Streams 用のサーバー側の暗号化とは?」を参照してください。さらに、KMS のクロスアカウント共有機能を使用して、共有プリンシパルエンティティが CMK にアクセスできるようにする必要があります。共有プリンシパルエンティティの IAM ポリシーも必ず変更してください。詳細については、「その他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。

別のアカウントの Kinesis Data Streams から読み取るように AWS Lambda 関数を設定する

別のアカウントの Kinesis Data Streams から読み取るように Lambda 関数を設定する方法の例については、「クロスアカウント AWS Lambda 関数を使用したアクセスの共有」を参照してください。