使用 IAM 控制對 Kinesis Video Streams 資源的存取 - Amazon Kinesis Video Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 IAM 控制對 Kinesis Video Streams 資源的存取

您可以將 AWS Identity and Access Management (IAM) 與 Amazon Kinesis Video Streams 搭配使用,控制組織中的使用者是否可以使用特定的 Kinesis 影片串流 API 操作執行任務,以及他們是否可以使用特定 AWS 資源。

如需 IAM 的詳細資訊,請參閱下列各項:

政策語法

IAM 政策為包含一或多個陳述式的 JSON 文件。每個陳述式的結構如下所示:

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

陳述式由各種元素組成:

  • 效果效果可以是AllowDeny。根據預設, 使用者沒有使用資源和 API 動作的許可,因此所有請求均會遭到拒絕。明確允許覆寫預設值。明確拒絕覆寫任何允許。

  • 動作動作是您授與或拒絕權限的特定 API 動作。

  • 資源 — 受動作影響的資源。若要在陳述式中指定資源,您必須使用它的 Amazon Resource Name (ARN)。

  • 條件 — 條件是選擇性的。您可以使用它們來控制何時政策開始生效。

建立和管理 IAM 政策時,建議您使用 IAM 政策產生器IAM 政策模擬器

室壁運動影片串流的動作

在 IAM 政策陳述式中,您可以從任何支援 IAM 的服務指定任何 API 動作。對於 Kinesis Video Streams,請使用下列前置詞以及 API 動作的名稱:kinesisvideo:例如:kinesisvideo:CreateStreamkinesisvideo:ListStreamskinesisvideo:DescribeStream

若要在單一陳述式中指定多個動作,請用逗號分隔,如下所示:

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

您也可以使用萬用字元指定多個動作。例如,您可以指定名稱開頭有「Get」文字的所有動作,如下所示:

"Action": "kinesisvideo:Get*"

若要指定所有 Kinesis Video Streams 作業,請使用星號 (*) 萬用字元,如下所示:

"Action": "kinesisvideo:*"

如需 Kinesis Video Streams API 動作的完整清單,請參閱 Kinesis Video Streams API 參考資料。

Kinesis Video Streams 的 Amazon 資源名稱 (ARN)

每個 IAM 政策陳述式都會套用到您使用其 ARN 指定的資源。

針對 Kinesis Video Streams 使用下列 ARN 資源格式:

arn:aws:kinesisvideo:region:account-id:stream/stream-name/code

例如:

"Resource": arn:aws:kinesisvideo:*:111122223333:stream/my-stream/0123456789012

您可以使DescribeStream用獲取流的 ARN。

授與其他 IAM 帳戶存取 Kinesis 影片串流的存取權

您可能需要授與其他 IAM 帳戶的權限,才能對 Kinesis 影片串流中的串流執行作業。以下概述說明將視訊串流存取權跨帳戶授與的一般步驟:

  1. 取得您要授與權限的帳戶的 12 位數帳號 ID,以便對您帳戶中建立的串流資源執行作業。

    範例:在下列步驟中,我們會使用 11111111111111 做為您要授與權限之帳戶的帳戶識別碼,而 999999999999 做為 Kinesis Video Streams 的識別碼

  2. 在擁有串流 (999999999999) 的帳戶中建立 IAM 受管政策,以允許您要授予的存取層級。

    樣本政策:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:GetDataEndpoint", "kinesisvideo:DescribeStream", "kinesisvideo:PutMedia" ], "Resource": "arn:aws:kinesisvideo:us-west-2:999999999999:stream/custom-stream-name/1613732218179" } ] }

    如需 Kinesis Video Streams 資源的其他範例政策,請參閱範例政策下一節。

  3. 在擁有串流的帳戶中建立角色 (999999999999),然後指定您要授與權限的帳戶 (111111111111)。這會將受信任的實體新增至角色。

    信任原則範例:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111111111111:root" }, "Action": "sts:AssumeRole" } ] }

    將您在上一個步驟中建立的策略附加到此角色。

    您現在已經在帳戶 999999999999 中建立了一個角色DescribeStreamGetDataEndpoint該角色具有受管理策略中的流資源 ARN 等操作的權限。PutMedia這個新角色也會信任其他帳戶 111111111111,以擔任此角色。

    重要

    記下角色 ARN,您將在下一步中需要它。

  4. 在另一個帳戶中建立受管理的策略 1111111111,允許對您在上一個步驟中的帳號 999999999999 中建立的角色執行處理AssumeRole行動。您需要提及上一步中的角色 ARN。

    樣本政策:

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::999999999999:role/CustomRoleName" } }
  5. 將上一步中建立的政策附加到 IAM 實體,例如帳戶 111111111111 中的角色或使用者。此使用者現在有權在 999999999999 帳戶CustomRoleName中擔任角色。

    此使用者的登入資料會呼叫 AWS STS AssumeRole API 來取得工作階段認證,這些認證隨後會用來呼叫在 999999999999 帳戶中建立的串流上的 Kinesis 視訊串流 API。

    aws sts assume-role --role-arn "arn:aws:iam::999999999999:role/CustomRoleName" --role-session-name "kvs-cross-account-assume-role" { "Credentials": { "AccessKeyId": "", "SecretAccessKey": "", "SessionToken": "", "Expiration": "" }, "AssumedRoleUser": { "AssumedRoleId": "", "Arn": "" } }
  6. 根據環境中的先前設定,設定存取金鑰、私密金鑰和工作階段認證。

    set AWS_ACCESS_KEY_ID= set AWS_SECRET_ACCESS_KEY= set AWS_SESSION_TOKEN=
  7. 執行 Kinesis Video Streams API,以描述並取得該串流的資料端點,帳戶為 999999999999。

    aws kinesisvideo describe-stream --stream-arn "arn:aws:kinesisvideo:us-west-2:999999999999:stream/custom-stream-name/1613732218179" { "StreamInfo": { "StreamName": "custom-stream-name", "StreamARN": "arn:aws:kinesisvideo:us-west-2:999999999999:stream/custom-stream-name/1613732218179", "KmsKeyId": "arn:aws:kms:us-west-2:999999999999:alias/aws/kinesisvideo", "Version": "abcd", "Status": "ACTIVE", "CreationTime": "2018-02-19T10:56:58.179000+00:00", "DataRetentionInHours": 24 } } aws kinesisvideo get-data-endpoint --stream-arn "arn:aws:kinesisvideo:us-west-2:999999999999:stream/custom-stream-name/1613732218179" --api-name "PUT_MEDIA" { "DataEndpoint": "https://s-b12345.kinesisvideo.us-west-2.amazonaws.com" }

如需授予跨帳戶存取權的一般 step-by-step 指示,請參閱跨 AWS 帳戶 使用 IAM 角色委派存取權。

Kinesis Video Streams 的範例政策

下列範例政策示範如何控制使用者對 Kinesis Video Streams 的存取權

範例 1: 允許使用者從任何 Kinesis 視訊串流取得資料

此原則可讓使用者或群組對任何 Kinesis 視訊串流執行GetMediaListStreams、、和ListTagsForStream作業。DescribeStream GetDataEndpoint此政策適用於可以取得任何視訊串流資料的使用者。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:Describe*", "kinesisvideo:Get*", "kinesisvideo:List*" ], "Resource": "*" } ] }
範例 2: 允許使用者建立 Kinesis 視訊串流並向其寫入資料

此政策可讓使用者或群組執行 CreateStreamPutMedia 操作。此政策適用於可以建立視訊串流並傳入資料的安全攝影機。

{ "Statement": [ { "Effect": "Allow", "Action": [ "kinesisvideo:CreateStream", "kinesisvideo:PutMedia" ], "Resource": "*" } ] }
範例 3: 允許使用者完整存取所有 Kinesis Video Streams 資源

此原則可讓使用者或群組在任何資源上執行任何 Kinesis Video Streams 作業。此政策適用於管理員。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:*", "Resource": "*" } ] }
範例 4:允許使用者將資料寫入特定 Kinesis 視訊串流

此政策可讓使用者或群組將資料寫入特定的視訊串流。此政策適用於可將資料傳送到單一串流的裝置。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesisvideo:PutMedia", "Resource": "arn:aws:kinesisvideo:us-west-2:123456789012:stream/your_stream/0123456789012" } ] }