継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Bedrock Knowledge Base のベクトルストアに S3 Vectors を指定する時の IAMとKMS 設定メモ✍

タダです.

以下の記事を以前書きました.ベクトルストアを S3 Vectors を指定する時にBedrock Knowledge Base(以降 Knowledge Baseとする)が使う IAM ロールを既存のものを指定したり暗号化する場合 KMS のポリシーを設定する必要があって試行錯誤したため設定メモを残します. sadayoshi-tada.hatenablog.com

IAM ポリシーの設定について

まず,信頼関係ポリシーは以下の設定を行います.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringLike": {
                    "aws:SourceAccount": "AWSアカウント番号"
                },
                "ArnLike": {
                    "AWS:SourceArn": "arn:aws:bedrock:リージョン名:AWSアカウント番号:knowledge-base/*"
                }
            }
        }
    ]
}

また IAM ポリシーとして以下の定義を行いました.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "bedrock:InvokeModel",
            "Effect": "Allow",
            "Resource": "Knowledge Base で使用する基盤モデル ARN"
        },
        {
            "Action": "s3:ListBucket",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "AWSアカウント番号"
                }
            },
            "Effect": "Allow",
            "Resource": "データソースの S3 バケット ARN"
        },
        {
            "Action": "s3:GetObject",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "AWSアカウント番号"
                }
            },
            "Effect": "Allow",
            "Resource": "データソースの S3 バケット ARN/*"
        },
        {
            "Action": [
                "s3vectors:QueryVectors",
                "s3vectors:PutVectors",
                "s3vectors:GetVectors",
                "s3vectors:GetIndex",
                "s3vectors:DeleteVectors"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "AWSアカウント番号"
                }
            },
            "Effect": "Allow",
            "Resource": "arn:aws:s3vectors:リージョン名:AWSアカウント番号:bucket/S3 Vectors名/index/*"
        }
    ]
}

KMS ポリシーの設定について

Knowlege Base や S3 Vectors を暗号化する際に CMK を使用した場合以下の設定を KMS ポリシーに追加することで動作しました.なお,Knowlege Base や S3 Vectors を暗号化する際に必要な権限として追加したものを抜粋したポリシーとなります.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
        ]
      },
      "Action": [
        "kms:List*",
        "kms:Get*",
        "kms:GenerateDataKey",
        "kms:Describe*",
        "kms:Decrypt"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
        ]
      },
      "Action": [
        "kms:List*",
        "kms:Get*",
        "kms:Describe*",
        "kms:Decrypt"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "S3 のリージョンエンドポイント"
        }
      }
    }
  ]
}

関連情報

docs.aws.amazon.com

まとめ

Knowledge Base のベクトルストアを S3 Vectors を指定する時の IAM/KMS 設定についてまとめました.