タグ付きの指定された VPC で EC2 インスタンスを作成および管理するためのアクセス権限を明示的に付与する IAM ポリシーを作成する方法を教えてください。

所要時間2分
0

仮想プライベートクラウド (VPC) 内の Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを管理するためのアクセス権限を IAM アイデンティティに明示的に付与する AWS Identity and Access Management (IAM) ポリシーを作成したいと考えています。

簡単な説明

IAM ポリシーでは、タグが付いている VPC 内のインスタンスを管理するための IAM アイデンティティの権限を制限する必要があります。

Amazon EC2 では resource-level permissions の一部が提供されますが、使用できるサービスレベルのアクション、リソース、条件がいくつかあります。EC2 リソースへのアクセスを制御するには、リソースタグを使用します。

解決策

VPC でインスタンスを起動する権限を付与する一方で、インスタンスを管理するための IAM アイデンティティの権限を制限するポリシーを作成します。インスタンスの管理を制限するには、ec2:ResourceTag ポリシー条件を使用します。

インスタンスを起動する 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"
            }
          }
        }
      ]
    }

    **注:**ACCOUNTNUMBERREGIONTAG-KEYTAG-VALUEVPC-IDROLENAME の各パラメータは、ご自身の値に置き換えます。

  3. (オプション) ポリシーを IAM ユーザーまたはグループにのみ割り当てるには、TAG-KEY パラメーター、または TAG-VALUE パラメーターを ${aws:username} IAM ポリシー変数に置き換えます。このポリシー変数により、IAM は IAM ユーザーのわかりやすい名前をパラメータに事前入力できます。IAM ユーザーは、指定された VPC でのみインスタンスを起動し、自分のインスタンスを制御できます。

  4. [ポリシーの確認] を選択して名前を入力します。例えば、VPC_Lockdown_VPC-ID と入力します。

  5. [ポリシーを作成] を選択します。
    **注:**一部の項目は、環境内の特定のリソースに置き換える必要があります。詳細については、「Amazon リソースネーム (ARN)」を参照してください。

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

次の手順を実行します。

  1. IAM コンソールを開きます。
  2. ナビゲーションペインで [ユーザー]、[グループ]、または [ロール] を選択し、IAM アイデンティティを選択します。
  3. [許可を追加] を選択してから [ポリシーをアタッチ] を選択します。
  4. ポリシーの名前を入力し、ポリシーを選択します。
  5. [ポリシーをアタッチ] を選択します。

カスタムポリシーがアタッチされると、IAM アイデンティティは AWS マネジメントコンソールにサインインし、EC2 ダッシュボードを開いて EC2 インスタンスを起動できるようになります。IAM アイデンティティでは、EC2 インスタンスを起動するためのサブネット、VPC、およびタグを指定する必要があります。

ec2:ResourceTags 条件は、以下のアクションを制限します。

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

ポリシーは、VPC に対する以下のアクションを制限します。

  • セキュリティグループを削除する。
  • ルートを作成、削除する。
  • ルートテーブルを削除する。
  • ネットワークアクセスコントロールリスト (ネットワーク ACL) を削除する。
  • ネットワーク ACL エントリを削除する。
  • セキュリティグループの受信ルールと送信ルールを承認する、または無効にする。
  • ネットワークインターフェースの権限を作成する。
  • 受信ルールと送信ルールのセキュリティグループの説明を更新する。

関連情報

PrincipalTag、ResourceTag、RequestTag、TagKeys の条件キーを使用して、タグベースの制限の IAM ポリシーを作成する方法を教えてください。

コメントはありません

関連するコンテンツ