【IAMポリシー】タグで制御できるリソース & アクションとは

記事タイトルとURLをコピーする

こんにちは。ポインコと暮らしている高橋です。 兄がインスタをやっているのですが、今年中にフォロワー300が目標だそうです。 ということで、今回はIAMポリシーのタグ制御についての小ネタです。

リソースタグを使用したAWSリソースへのアクセス制御

↑このAWSドキュメントにもありますが、リソースタグを使用してAWSリソースへのアクセス制御が可能です。以前、当社ブログでもご紹介しました。 http://blog.serverworks.co.jp/tech/2018/05/07/post-64216/

リソースっていうのは具体的に? と言うと、これは以下のドキュメントに記載されていました。 IAM と連携する AWS のサービス

「ポリシーの条件でリソースタグを使用して、サービス内のリソースへのアクセスを制御できます。これを行うには、aws:ResourceTag グローバル条件キー、または ec2:ResourceTag などのサービス固有のタグを使用します」 とのこと。サービス一覧もありましたので、以下にざっとまとめてみました。2020/02/21時点の内容です。

◇リソースタグでアクセス制御可能なサービス一覧 ・Amazon Elastic Compute Cloud (Amazon EC2) ・Amazon EC2 Auto Scaling ・Amazon EC2 Image Builder ・AWS Elastic Beanstalk ・Amazon Elastic Container Registry (Amazon ECR) ・Amazon Elastic Container Service (Amazon ECS) ・Amazon Elastic Kubernetes Service (Amazon EKS) ・Elastic Load Balancing ・Amazon Lightsail ・AWS Outposts ・AWS Backup ・Amazon Elastic Block Store (Amazon EBS) ・Amazon Elastic File System (Amazon EFS) ・Amazon FSx ・Amazon S3 Glacier ・Amazon Simple Storage Service (Amazon S3) ・AWS Storage Gateway ・Amazon Quantum Ledger Database (Amazon QLDB) ・Amazon Relational Database Service (Amazon RDS) ・AWS Cloud9 ・CodeBuild ・CodeCommit ・CodePipeline ・AWS CodeStar ・AWS CodeStar Notifications ・AWS Certificate Manager Private Certificate Authority (ACM) ・AWS Certificate Manager (ACM) ・AWS CloudHSM ・Amazon Cognito ・AWS Directory Service ・AWS Firewall Manager ・AWS Identity and Access Management (IAM) ・IAM Access Analyzer ・AWS Resource Access Manager (AWS RAM) ・AWS Secrets Manager ・AWS セキュリティハブ ・AWS Security Token Service (AWS STS) ・AWS WAFV2 ・Amazon CodeGuru Reviewer ・Amazon Comprehend ・Amazon Machine Learning ・Amazon SageMaker ・AWS CloudFormation ・Amazon CloudWatch ・Amazon CloudWatch Events ・Amazon CloudWatch Logs ・AWS Config ・Amazon Data Lifecycle Manager ・AWS OpsWorks ・AWS OpsWorks for Chef Automate ・AWS リソースグループ ・AWS Service Catalog ・AWS Systems Manager ・AWS Database Migration Service ・AWS Amplify ・AWS Device Farm ・Amazon API Gateway ・AWS App Mesh ・Amazon CloudFront ・AWS Direct Connect ・Network Manager ・Amazon Route 53 リゾルバー ・AWS Elemental MediaConvert ・AWS Elemental MediaLive ・AWS Elemental MediaPackage ・AWS Elemental MediaTailor ・Kinesis ビデオストリーム ・Amazon Athena ・AWS Data Exchange ・AWS Data Pipeline ・Amazon EMR ・AWS Glue ・Amazon Kinesis Data Analytics ・Amazon Kinesis Data Firehose ・Amazon Managed Streaming for Apache Kafka (MSK) ・Amazon EventBridge ・Amazon EventBridge スキーマ ・Amazon MQ ・AWS Step Functions ・Amazon Simple Workflow Service (Amazon SWF) ・AWS Ground Station ・AWS IoT ・AWS IoT Analytics ・AWS IoT イベント ・AWS IoT Greengrass ・RoboMaker ・Amazon Pinpoint ・Amazon Simple Email Service (Amazon SES) ・Amazon AppStream 2.0 ・Amazon WorkSpaces

サービスによっては制御できるリソースが限られているなど、条件があるようなので、詳細はドキュメントで確認してください。

制御できるアクションとは

リソースごとに制限するのではなく、アクションごとに制限したい場合もありますよね。 その際注意したいのは、「全てのアクションが制限できるわけではない」ということです。 よく制御するであろう、EC2とRDSに着目してみます。

EC2の場合

リソースタグで制限できるのは条件キーに「ec2:ResourceTag」が定義されているアクションのみです。 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/list_amazonec2.html

◇「ec2:ResourceTag」でアクセス制御できるアクション一覧 ・AcceptTransitGatewayVpcAttachment ・AcceptVpcPeeringConnection ・ApplySecurityGroupsToClientVpnTargetNetwork ・AssociateClientVpnTargetNetwork ・AssociateTransitGatewayRouteTable ・AuthorizeClientVpnIngress ・AuthorizeSecurityGroupEgress ・AuthorizeSecurityGroupIngress ・CancelCapacityReservation ・CopySnapshot ・CreateClientVpnEndpoint ・CreateClientVpnRoute ・CreateLaunchTemplateVersion ・CreateRoute ・CreateTrafficMirrorFilter ・CreateTrafficMirrorFilterRule ・CreateTrafficMirrorSession ・CreateTransitGatewayRoute ・CreateTransitGatewayRouteTable ・CreateTransitGatewayVpcAttachment ・CreateVolume ・CreateVpcPeeringConnection ・CreateVpnConnection ・DeleteClientVpnEndpoint ・DeleteClientVpnRoute ・DeleteCustomerGateway ・DeleteDhcpOptions ・DeleteInternetGateway ・DeleteLaunchTemplate ・DeleteLaunchTemplateVersions ・DeleteNetworkAcl ・DeleteNetworkAclEntry ・DeleteRoute ・DeleteRouteTable ・DeleteSecurityGroup ・DeleteTrafficMirrorFilter ・DeleteTrafficMirrorFilterRule ・DeleteTrafficMirrorSession ・DeleteTrafficMirrorTarget ・DeleteTransitGateway ・DeleteTransitGatewayRoute ・DeleteTransitGatewayRouteTable ・DeleteTransitGatewayVpcAttachment ・DisableTransitGatewayRouteTablePropagation ・DisableVpcClassicLink ・DisassociateClientVpnTargetNetwork ・DisassociateTransitGatewayRouteTable ・EnableTransitGatewayRouteTablePropagation ・EnableVpcClassicLink ・ImportClientVpnClientCertificateRevocationList ・ModifyCapacityReservation ・ModifyClientVpnEndpoint ・ModifyInstanceEventStartTime ・ModifyLaunchTemplate ・ModifyTrafficMirrorFilterNetworkServices ・ModifyTrafficMirrorFilterRule ・ModifyTrafficMirrorSession ・ModifyTransitGatewayVpcAttachment ・ModifyVpnConnection ・ModifyVpnTunnelOptions ・RejectTransitGatewayVpcAttachment ・ReplaceRoute ・ReplaceTransitGatewayRoute ・RevokeClientVpnIngress ・RevokeSecurityGroupEgress ・RevokeSecurityGroupIngress ・TerminateClientVpnConnections ・UpdateSecurityGroupRuleDescriptionsEgress ・UpdateSecurityGroupRuleDescriptionsIngress

RDSの場合

RDSの場合は、例えばDBインスタンスであればリソースタイプが「db」なので、条件キー「rds:db-tag」という「DB インスタンスにアタッチされているタグ」を指定してアクションを制限することができます。(条件キーには「aws:ResourceTag」とも書いてあるのですが、これはRDS全体にタグを包括して指定できるということなのでしょうか... 今回は未検証です)

今回は条件キー(rds:)ごとのアクションをまとめてみました。 https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/list_amazonrds.html

◇「rds:cluster-tag」でアクセス制御できるアクション一覧 ・AddRoleToDBCluster ・BacktrackDBCluster ・CreateDBCluster ・CreateDBClusterEndpoint ・CreateDBClusterSnapshot ・CreateGlobalCluster ・DeleteDBCluster ・DeregisterDBProxyTargets ・DescribeDBClusterBacktracks ・DescribeDBClusters ・DescribeDBProxyTargets ・FailoverDBCluster ・ModifyCurrentDBClusterCapacity ・ModifyDBCluster ・PromoteReadReplicaDBCluster ・RemoveFromGlobalCluster ・RemoveRoleFromDBCluster ・RestoreDBClusterFromS3 ・RestoreDBClusterFromSnapshot ・RestoreDBClusterToPointInTime ・StartActivityStream ・StartDBCluster ・StopActivityStream ・StopDBCluster

◇「rds:cluster-pg-tag」でアクセス制御できるアクション一覧 ・CopyDBClusterParameterGroup ・CreateDBCluster ・CreateDBClusterParameterGroup ・DeleteDBClusterParameterGroup ・DescribeDBClusterParameterGroups ・DescribeDBClusterParameters ・ModifyDBCluster ・ModifyDBClusterParameterGroup ・ResetDBClusterParameterGroup

◇「rds:cluster-snapshot-tag」でアクセス制御できるアクション一覧 ・CopyDBClusterSnapshot ・CreateDBClusterSnapshot ・DeleteDBCluster ・DeleteDBClusterSnapshot ・DescribeDBClusterSnapshotAttributes ・ModifyDBClusterSnapshotAttribute ・RestoreDBClusterFromSnapshot

◇「rds:db-tag」でアクセス制御できるアクション一覧 ・AddRoleToDBInstance ・AddTagsToResource ・ApplyPendingMaintenanceAction ・CreateDBInstance ・CreateDBInstanceReadReplica ・CreateDBSnapshot ・DeleteDBInstance ・DeregisterDBProxyTargets ・DescribeDBLogFiles ・DescribeDBProxyTargets ・DescribeDBSnapshots ・DescribePendingMaintenanceActions ・DescribeValidDBInstanceModifications ・DownloadDBLogFilePortion ・ListTagsForResource ・ModifyDBInstance ・PromoteReadReplica ・RebootDBInstance ・RemoveRoleFromDBInstance ・RemoveTagsFromResource ・RestoreDBInstanceFromDBSnapshot ・RestoreDBInstanceFromS3 ・RestoreDBInstanceToPointInTime ・StartDBInstance ・StopDBInstance

◇「rds:es-tag」でアクセス制御できるアクション一覧 ・AddSourceIdentifierToSubscription ・AddTagsToResource ・CreateEventSubscription ・DeleteEventSubscription ・DescribeEventSubscriptions ・DescribeEvents ・ListTagsForResource ・ModifyEventSubscription ・RemoveSourceIdentifierFromSubscription ・RemoveTagsFromResource

◇「rds:og-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・CopyOptionGroup ・CreateDBCluster ・CreateDBInstance ・CreateDBInstanceReadReplica ・CreateOptionGroup ・DeleteOptionGroup ・DescribeOptionGroupOptions ・DescribeOptionGroups ・ListTagsForResource ・ModifyDBCluster ・ModifyDBInstance ・ModifyOptionGroup ・RemoveTagsFromResource ・RestoreDBClusterFromSnapshot ・RestoreDBClusterToPointInTime ・RestoreDBInstanceFromDBSnapshot ・RestoreDBInstanceToPointInTime

◇「rds:pg-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・CopyDBParameterGroup ・CreateDBInstance ・CreateDBParameterGroup ・DeleteDBParameterGroup ・DescribeDBEngineVersions ・DescribeDBParameterGroups ・DescribeDBParameters ・ListTagsForResource ・ModifyDBInstance ・ModifyDBParameterGroup ・RemoveTagsFromResource ・ResetDBParameterGroup

◇「rds:ri-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・DescribeReservedDBInstances ・ListTagsForResource ・PurchaseReservedDBInstancesOffering ・RemoveTagsFromResource

◇「rds:secgrp-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・AuthorizeDBSecurityGroupIngress ・CreateDBInstance ・CreateDBSecurityGroup ・DeleteDBSecurityGroup ・DescribeDBSecurityGroups ・ListTagsForResource ・ModifyDBInstance ・RemoveTagsFromResource ・RevokeDBSecurityGroupIngress

◇「rds:snapshot-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・CopyDBSnapshot ・CreateDBSnapshot ・DeleteDBSnapshot ・DescribeDBSnapshotAttributes ・DescribeDBSnapshots ・ListTagsForResource ・ModifyDBSnapshot ・ModifyDBSnapshotAttribute ・RemoveTagsFromResource ・RestoreDBInstanceFromDBSnapshot ・RestoreDBInstanceToPointInTime

◇「rds:subgrp-tag」でアクセス制御できるアクション一覧 ・AddTagsToResource ・CreateDBCluster ・CreateDBInstance ・CreateDBInstanceReadReplica ・CreateDBSubnetGroup ・DeleteDBSubnetGroup ・DescribeDBSubnetGroups ・ListTagsForResource ・ModifyDBSubnetGroup ・RemoveTagsFromResource ・RestoreDBClusterToPointInTime ・RestoreDBInstanceFromDBSnapshot ・RestoreDBInstanceToPointInTime

あとがき

タグで何でもかんでも制御できると思ったら大間違いや!と兄が言っていました。 タグで制御できるリソース、アクションは今後も変更、追加があると思われますが、いずれにせよ「制御できないケースがある」ことを覚えておくことが大切ですね。

それではまた、ごきげんよう。

高橋悠佑 (ポインコ兄) (執筆記事一覧)

健康志向です