概要
AWS MCP Server が一般提供(GA)を開始、AI コーディングエージェントから AWS への安全なアクセスが可能になりました | DevelopersIO
上記の通り、AWS MCP ServerがGAとなり、Claude Codeなどから、IAM経由でのAWS環境への安全なアクセスが可能になりました
今回は、AWS MCP Serverからのアクセスを制御するためのポリシーを作成した際のメモです
作成したポリシーの aws_iam_policy_documentです。本題は「3」のStatementになります
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| data "aws_iam_policy_document" "deny_sensitive_access_via_mcp" {
# 1. SecretsManager, SSMへはデフォルトで全てのアクセスをDenyする statement { sid = "DenySecretViaMCP" effect = "Deny" actions = [ "secretsmanager:*", "ssm:*", ] resources = ["*"] condition { test = "Bool" variable = "aws:ViaAWSMCPService" values = ["true"] } }
# 2. IAMの更新系操作もDenyする statement { sid = "DenyIamMutationViaMCP" effect = "Deny" actions = [ "iam:Create*", "iam:Delete*", "iam:Update*", "iam:Put*", "iam:Attach*", "iam:Detach*", "iam:Add*", "iam:Remove*", "iam:Set*", "iam:Tag*", "iam:Untag*", "iam:PassRole", "iam:Upload*", "iam:ChangePassword", "iam:Enable*", "iam:Deactivate*", "iam:Resync*", "iam:Reset*", ] resources = ["*"] condition { test = "Bool" variable = "aws:ViaAWSMCPService" values = ["true"] } }
# 3. タグ「MCPAccess: Deny」というタグを持つリソースにはアクセスをDenyする statement { sid = "DenyMCPTaggedResourceViaMCP" effect = "Deny" actions = ["*"] resources = ["*"] condition { test = "Bool" variable = "aws:ViaAWSMCPService" values = ["true"] } condition { test = "StringEqualsIgnoreCase" variable = "aws:ResourceTag/MCPAccess" values = ["Deny"] } } }
|
詳細
1.SecretsManager, SSMへはデフォルトで全てのアクセスをDenyする
文字通り、機密情報を保管する、SessionManagerやParameterStoreには、あらかじめ全てのアクセスをDenyしておきます
2.IAMの更新系操作もDenyする
こちらも、MCPによるIAMの改ざんはあらかじめDenyしておきます
3.タグ「MCPAccess: Deny」というタグを持つリソースにはアクセスをDenyする
こちらが標題のABACタグベースポリシー制御で、リソース側に「MCPAccess: Deny」というタグを付けたリソースに関しては、MCP経由によるアクセスをDenyします
このポリシーをMCPが利用するIAMロールに適用し、MCPによる機密情報へのアクセスや、アクセスされたくないリソースに対するアクセス制御が可能になりました
使用したIAMコンテキストキー
Document: AWS グローバル条件コンテキストキー - AWS Identity and Access Management
aws:ViaAWSMCPService というコンテキストキーを使用する事で、MCP Serverを経由したアクセスである事を判別しています
他にも、aws:CalledViaAWSMCP といったコンテキストキーもあり、特定のMCPサーバを指定したアクセス制御も可能です
参考: S3オブジェクトのABACタグベースアクセス制御
Document: タグ付けとアクセスコントロールポリシー - Amazon Simple Storage Service
S3オブジェクトのABACタグベースアクセス制御は、s3:ExistingObjectTagを利用します
※aws:ResourceTagでは制御出来ないため注意
1 2 3 4 5
| condition { test = "StringEqualsIgnoreCase" variable = "s3:ExistingObjectTag/MCPAccess" values = ["Deny"] }
|