[アップデート]Kiro WebのIAM Role設定で信頼ポリシーが更新されていたので動作確認してみた

[アップデート]Kiro WebのIAM Role設定で信頼ポリシーが更新されていたので動作確認してみた

Kiro WebとIAM Roleの連携が新しい信頼ポリシーに対応しました。旧方式との違いや実際の設定方法、CloudTrailログでの動作確認を試してみました
2026.08.07

こんにちは、臼田です。

みなさん、Kiro使ってますか?(挨拶

今回はKiro WebとIAM Roleの連携で信頼ポリシーが更新されていたので、これを試すとともに、実際Kiro WebからAWSの操作を行った際のログも見ていきます。

概要

先日Kiro WebからIAM Roleを呼び出すことができるようになりました。

https://dev.classmethod.jp/articles/kiro-web-sandbox-service-role/

従来Kiro Webは、AWS環境へアクセスしたい場合にはIAM Userのアクセスキーを環境変数に持たせておくなど、AWSと直接連携する機能がなくたいへんでした。

この機能はまさにKiro WebからAWSを操作するためのベストな手法となりました。

私もこの設定を行おうとしたところ、設定画面上で信頼ポリシーが更新されていることを確認したので、その動作確認を行いました。

001_update_kiro_web_iam

やってみた

まず最初に、旧来のIAM Roleの信頼ポリシーで動作を見てみたいと思いました。

IAM Role作成

というわけでその状態のIAM Roleを作成していきます。

まずはIAMのマネジメントコンソールにアクセスし、IAM Roleの作成を開始します。

002_update_kiro_web_iam

「カスタム信頼ポリシー」で以下のような内容を入力します。※ sts:ExternalIdは環境に合わせ置き換えます

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "q.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "d-xxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
                }
            }
        }
    ]
}

003_update_kiro_web_iam

続いて権限をアタッチします。今回はReadOnlyAccessを選択します。

004_update_kiro_web_iam

適当なRole名を付けて作成します。

005_update_kiro_web_iam

作成が完了したら詳細画面を開きます。

006_update_kiro_web_iam

IAM RoleのARNを控えます。

007_update_kiro_web_iam

これで準備は完了です

旧方式の設定

Kiro WebのSettings画面から設定を行います。

IAM RoleのARNを入力し保存します。

008_update_kiro_web_iam

しかし残念ながら下記エラーとなり設定できませんでした。

Error
IAM role cannot be assumed by Kiro. Verify your trust policy.

というわけで、新規にKiro WebにIAM Roleを設定する場合には、新しい信頼ポリシーでないと行けないようです。

009_update_kiro_web_iam

新しい信頼ポリシーでの設定

さて、新しい信頼ポリシーはどのようになっているのでしょうか?フォーマットは以下のようになっています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "q.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:SetSourceIdentity"
      ],
      "Condition": {
        "StringEquals": {
          "sts:SourceIdentity": "<your-kiro-userId>"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "q.amazonaws.com"
      },
      "Action": "sts:TagSession",
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "GroupIds",
            "KiroSessionId"
          ]
        }
      }
    }
  ]
}

主に以下の違いがあります。

  • AssumeRole時のConditionがsts:ExternalIdからsts:SourceIdentityに変わった
  • sts:SetSourceIdentityも許可をする必要がある
  • sts:TagSessionのAction許可も必要
  • GroupIds/ KiroSessionIdタグのみ許可されている

sts:SourceIdentityを使うことで、ソースIDを参照して制御し、CloudTrailにソースIDが記録されたり、ロールをさらに引き継いだ際にもソースIDを継承するなどより厳密な管理と監査が可能になっています。また、タグの情報も増えてよりCloudTrailから辿れる情報が増えています。

引き受けたロールで実行されるアクションのモニタリングと制御 - AWS Identity and Access Management

ではこちらのフォーマットで設定しましょう。Kiro Webの設定画面から直接設定をコピーし、IAM Roleの信頼ポリシーを変更します。

010_update_kiro_web_iam

改めて登録することで、今度は設定が反映されました。

011_update_kiro_web_iam

CloudTrailのログ

Kiro Webから実行された操作のCloudTrailログがどのようになっているか確認しました。

下記はS3のListBucketsを実行した際のログです。sourceIdentityが含まれていることや、invokedByなどでq.amazonaws.comから呼ばれていることがわかります。

{
    "eventVersion": "1.11",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAXXXXXXXXXXXXXXXXX:d-xxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "arn": "arn:aws:sts::123456789012:assumed-role/KiroWebReadOnlyRole/d-xxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
        "accountId": "123456789012",
        "accessKeyId": "ASIAXXXXXXXXXXXXXXXX",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAXXXXXXXXXXXXXXXXX",
                "arn": "arn:aws:iam::123456789012:role/KiroWebReadOnlyRole",
                "accountId": "123456789012",
                "userName": "KiroWebReadOnlyRole"
            },
            "attributes": {
                "creationDate": "2026-08-07T08:14:27Z",
                "mfaAuthenticated": "false"
            },
            "sourceIdentity": "d-xxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
        },
        "invokedBy": "q.amazonaws.com"
    },
    "eventTime": "2026-08-07T08:14:36Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "ListBuckets",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "q.amazonaws.com",
    "userAgent": "q.amazonaws.com",
    "requestParameters": {
        "Host": "s3.us-east-1.amazonaws.com"
    },
    "responseElements": null,
    "additionalEventData": {
        "SignatureVersion": "SigV4",
        "CipherSuite": "TLS_AES_128_GCM_SHA256",
        "bytesTransferredIn": 0,
        "AuthenticationMethod": "AuthHeader",
        "httpStatusCode": 200,
        "bytesTransferredOut": 2035
    },
    "requestID": "XXXXXXXXXXXXXXXX",
    "eventID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "readOnly": true,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}

ちなみに、マネジメントコンソール上でフィルターをかけて調べる場合には、ユーザー名にd-xxxxxxxxxx.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx部分を入れると探しやすいです。

まとめ

Kiro Webと連携するIAM Roleの設定を、新しい信頼ポリシーで設定してみました。

リリース当初より、管理や監査がやりやすくなっていて良いですね。

既存で設定した環境の更新が必要かは確認できなかったですが、少なくとも新しく設定する場合には古い信頼ポリシーは使えないので気をつけましょう。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事