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

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

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

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 の詳細については、「1.x KCL コンシューマーの開発」を参照してください。

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

IAM と Amazon DynamoDB の詳細については、「Amazon DynamoDB デベロッパーガイド」の「 IAMを使用して Amazon DynamoDB リソースへのアクセスを制御する」を参照してください。 DynamoDB

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

ポリシー構文

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

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

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

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

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

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

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

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

Kinesis Data Streams のアクション

IAM ポリシーステートメントでは、 をサポートする任意のサービスから任意のAPIアクションを指定できますIAM。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 KinesisAPIリファレンス」を参照してください。

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

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

Kinesis データストリームには、次の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 プロデューサーライブラリは現在、データストリームに書き込む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 のアクション:

Action アクセスのレベル
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 にはデータストリームポリシーを管理するAPISための 3 つの機能があります。

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

ポリシー制限

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

  • ワイルドカード (*) は、データストリームまたは登録されたコンシューマーに直接アタッチされたリソースポリシーを介して広範なアクセスが付与されないようにするためにサポートされていません。さらに、次のポリシーを注意深く調べて、広範なアクセスが許可されていないことを確かめてください。

    • 関連付けられた AWS プリンシパル (IAMロールなど) にアタッチされたアイデンティティベースのポリシー

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

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

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

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

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

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

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

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

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