タグ付けされた AMI のみから Amazon EC2 インスタンスを開始できるようにアクセスを制限する方法を教えてください。

最終更新日: 2019 年 9 月 3 日

タグ付けされた Amazon Machine Image (AMI) のみから Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動できるようにアクセスを制限したいです。AMI タグを使用して EC2 インスタンスを起動するためのアクセスを制限する方法を教えてください。

解決方法

タグ付けされた AMI を使用して EC2 インスタンスを起動するユーザーのアクセスを制限するには、既存のインスタンスから AMI を作成するか、既存の AMI を使用して、その AMI にタグを追加します。そして、タグ付けされた AMI を使用するインスタンスのみを起動するようにユーザーのアクセス許可を制限する、タグ条件付きのカスタム IAM ポリシーを作成します。

この IAM ポリシーの例では、3 つのステートメント ID (Sid) があります。

  • Sid ReadOnlyAccess では、ユーザーは Describe* を使用して、アカウント内のいずれの EC2 リソースも表示することができます。これには Describe で始まるすべての EC2 アクションが含まれます。Sid ReadOnlyAccess により、EC2 インスタンスのコンソール出力とスクリーンショットを取得することもできます。詳細については、GetConsoleOutput および GetConsoleScreenshot を参照してください。DescribeAlarms および GetMetricStatistics の CloudWatch アクセス許可では、EC2 インスタンスの基本的なヘルス情報を Amazon EC2 コンソールに表示することが許可されます。ListInstanceProfiles の IAM アクセス許可は、EC2 インスタンスを開始しているときに、既存のインスタンスプロファイルが、[インスタンスの詳細の設定] ページにある IAM ロールのリストに表示されることを許可します。ただし、ListInstanceProfiles API では、ユーザーは IAM ロールを EC2 インスタンスにアタッチすることはできません。
  • Sid ActionsRequiredtoRunInstancesInVPC では、リソースごとに ARN を指定することにより、リソースレベルの権限を用いて us-east-1 リージョンのインスタンス、キーペア、セキュリティグループ、ボリューム、ネットワークインターフェイス、またはサブネットを使用して、RunInstances API を実行する権限をユーザーに付与します。
  • Sid LaunchingEC2withAMIsAndTags では、AMI の環境タグの値が Prod に設定され、AMI が us-east-1 リージョンにある場合に、ユーザーは AMI を使用して EC2 インスタンスを起動できます。リソースレベルの権限は、us-east-1 リージョンにある AMI の ARN に設定されており、条件は EC2:ResourceTag/Environment タグキーとキー値 Prod の値と一致します。

次の IAM ポリシーでは、RunInstances API アクションに必要なリソースに対し、リソースレベルのアクセス許可を使用しています。RunInstances に必要なリソースの詳細については、RunInstances に関するリソースレベルのアクセス許可を参照してください。

注意: このポリシーでは、ユーザーは EC2 インスタンスを起動するときにロールを一覧表示することはできますが、iam:PassRole 権限を持っていない限り、ロールがアタッチされたインスタンスを起動することはできません。

注意: このポリシーでは、ユーザーが新しいセキュリティグループを作成することはできません。ユーザーは、EC2 CreateSecurityGroup 権限を持っていない限り、既存のセキュリティグループを選択して EC2 インスタンスを起動する必要があります。EC2:CreateSecurityGroup API アクションはセキュリティグループのみを作成できるアクセスを許可します。このアクションはいずれのルールも追加または変更しません。インバウンドルールを追加するには、ユーザーにインバウンドの EC2 AuthorizeSecurityGroupIngress API アクションを使用する権限とアウトバウンドの EC2 AuthorizeSecurityGroupEgress API アクションを使用する権限が必要です。 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadOnlyAccess",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:GetConsole*",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:GetMetricStatistics",
        "iam:ListInstanceProfiles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ActionsRequiredtoRunInstancesInVPC",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:AccountId:instance/*",
        "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
        "arn:aws:ec2:us-east-1:AccountId:security-group/*",
        "arn:aws:ec2:us-east-1:AccountId:volume/*",
        "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
        "arn:aws:ec2:us-east-1:AccountId:subnet/*"
      ]
    },
    {
      "Sid": "LaunchingEC2withAMIsAndTags",
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
      "Condition": {
        "StringEquals": {
          "ec2:ResourceTag/Environment": "Prod"
        }
      }
    }
  ]
}

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

改善できることはありますか?


さらにサポートが必要な場合