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 Amazon CloudWatch ユーザーガイド」のAWS 「 アカウントへのユーザーアクセスの制御」を参照してください。

ポリシー構文

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/*" ] } ] }

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

注記

Kinesis Producer Library は現在、データストリームへの書き込み時にストリーム ARN の指定をサポートしていません。クロスアカウントデータストリームに書き込む場合は、 AWS SDK を使用します。

リソースベースのポリシーをデータストリームにアタッチして、別のアカウント、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 プリンシパルにアタッチされたアイデンティティベースのポリシー (IAM ロールなど)

    • 関連付けられたリソース ( AWS Key Management Service KMS キーなど) にアタッチされた AWS リソースベースのポリシー

  • 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 関数とアクセスを共有する」を参照してください。