IAM ユーザー、グループまたはロールに明示的に許可を与え、タグを使用して特定の VPC 内に EC2 インスタンスを作成し、管理するための IAM ポリシーを作成するにはどうしたらいいですか?

最終更新日: 2020 年 8 月 21 日

特定の VPC で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの作成および管理を行うため、IAM ユーザー、グループ、またはロールの許可を明示的に与える AWS Identity and Access Management (IAM) を作成するにはどうすれば良いですか? IAM エンティティが指定タグを使用して EC2 インスタンスを作成し、これらのタグを使用して VPC でこれらの EC2 インスタンスを管理できるように、許可を制限しなければなりません。

簡単な説明

Amazon EC2 では、サポートされているリソースレベルの許可を制限していますが、検討すべきアクション、リソース、条件が複数あります。EC2 インスタンスの起動などの特定の Amazon EC2 API 操作は、インスタンスを制御するタグを使用して、VPC ARN を通して制御することができます。

解決方法

タグを使用して特定の VPC で EC2 インスタンスを作成するため、カスタム IAM ポリシーを適用して IAM ユーザー、グループ、またはロールの許可を制限します。「ec2:ResourceTags」ポリシー条件を使用して、インスタンス制御を制限します。このポリシーは、一意のタグを使用して指定の VPC で EC2 インスタンスを起動するアクセス権限を付与します。制限されたタグを使用して、これらの EC2 インスタンスを管理できます。

インスタンスを起動する IAM エンティティを適用するマネージド型ポリシーを作成する

1.    IAM コンソールを開き、[ポリシー] を選択してから、[ポリシーの作成] を選択します。

2.    JSON タブを選択してから、このカスタムポリシーを入力します。  

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "GrantIAMPassRoleOnlyForEC2",
            "Action": [
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME",
                "arn:aws:iam::ACCOUNTNUMBER:role/ROLENAME"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "ec2.amazonaws.com"
                }
            }
        },
        {
            "Sid": "ReadOnlyEC2WithNonResource",
            "Action": [
                "ec2:Describe*",
                "iam:ListInstanceProfiles"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "ModifyingEC2WithNonResource",
            "Action": [
                "ec2:CreateKeyPair",
                "ec2:CreateSecurityGroup"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "RunInstancesWithTagRestrictions",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/TAG-KEY": "TAG-VALUE"
                }
            }
        },
        {
            "Sid": "RemainingRunInstancePermissionsNonResource",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:REGION::image/*",
                "arn:aws:ec2:REGION::snapshot/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:network-interface/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:key-pair/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER*:security-group/*"
            ]
        },
        {
            "Sid": "EC2RunInstancesVpcSubnet",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:REGION:ACCOUNTNUMBER:subnet/*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
                }
            }
        },
        {
            "Sid": "EC2VpcNonResourceSpecificActions",
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteNetworkAcl",
                "ec2:DeleteNetworkAclEntry",
                "ec2:DeleteRoute",
                "ec2:DeleteRouteTable",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:DeleteSecurityGroup",
                "ec2:CreateNetworkInterfacePermission",
                "ec2:CreateRoute",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:REGION:ACCOUNTNUMBER:vpc/VPC-ID"
                }
            }
        },
        {
            "Sid": "AllowInstanceActionsTagBased",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StopInstances",
                "ec2:TerminateInstances",
                "ec2:StartInstances",
                "ec2:AttachVolume",
                "ec2:DetachVolume",
                "ec2:AssociateIamInstanceProfile",
                "ec2:DisassociateIamInstanceProfile",
                "ec2:GetConsoleScreenshot",
                "ec2:ReplaceIamInstanceProfileAssociation"
            ],
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/TAG-KEY": "TAG-VALUE"
                }
            }
        },
        {
            "Sid": "AllowCreateTagsOnlyLaunching",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": [
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:instance/*",
                "arn:aws:ec2:REGION:ACCOUNTNUMBER:volume/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

3.    ACCOUNTNUMBERREGIONTAG-KEYTAG-VALUEVPC ID、および ROLENAME パラメータを環境からの値に置き換えます。

4.    (オプション) このポリシーを唯一の IAM ユーザーまたはグループへ割り当てようとしている場合は、TAG-KEY または TAG-VALUE パラメータを IAM ポリシー変数 ${aws:username}に置き換えます。このポリシー変数により、IAM サービスが IAM ユーザーの呼び出しの フレンドリ名 にこれらのパラメータを自動入力できるようにします。このステップでは、IAM ユーザーが指定された VPC でのみインスタンスを起動できるようにし、自分のインスタンスを制御できるようにします。

5.    レビューポリシーを選択してから、名前に名前を入力します。たとえば、「VPC_Lockdown_VPC-ID」と入力します。ここで、「VPC-ID」は、このポリシーを適用しようとしている VPC の ID です。

6.    ポリシーの作成 を選択します。

注: 一部のアイテムをお使いの環境の特定リソースに置き換える必要があります。詳細については、「Amazon リソースネーム (ARN)」を参照してください。

ポリシーをユーザー、グループ、またはロールにアタッチする

1.    IAM コンソール ナビゲーションペインで、ユーザーグループ、または ロールを選択します。

2.    ポリシーをアタッチするユーザー、グループ、またはロールを選択します。

3.    ポリシーをアタッチを選択します。

4.    検索ボックスに作成したポリシーの名前を入力してから、ポリシーを選択します。たとえば、「VPC_Lockdown_VPC-ID」と入力します。

5.    ポリシーをアタッチを選択します。

このカスタムポリシーがアタッチされている IAM エンティティは、AWS コンソールにサインインし、Amazon EC2 ダッシュボードを開き、サブネット、VPC、タグを指定した後、EC2 インスタンスを起動することができます。

このポリシーにより、ポリシー条件「ec2:ResourceTags」を使用して、以下のアクションを制限します。

  • インスタンスの開始
  • インスタンスの停止
  • インスタンスの再起動
  • インスタンスの終了
  • ボリュームをインスタンスにアタッチする
  • ボリュームをインスタンスからデタッチする
  • インスタンスから IAM インスタンスプロファイルの関連付けを解除する
  • インスタンス向け IAM インスタンスプロファイルの関連付けを置き換える
  • インスタンスのコンソールスクリーンショットの取得

このポリシーは、指定された VPC に対して以下のアクションを制限します。

  • セキュリティグループの削除
  • ルートの作成と削除
  • ルートテーブルの削除
  • ネットワーク ACL の削除
  • ACL エントリの削除
  • セキュリティグループの Ingress ルールと Egress ルールの認可
  • ネットワークインターフェイス許可の作成
  • Ingress ルールと Egress ルールのセキュリティグループ説明を更新する

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?