web-dev-qa-db-ja.com

AWS IAM:コンソールアクセスを1つのインスタンスのみに制限する

1つのインスタンスのみを一覧表示してアクションを実行する権限を持つAWSコンソールのIAMユーザーを作成しようとしています。

したがって、合計6つのインスタンスがあり、以下のポリシーを追加して、IAMポリシーを介してそれらの5つを非表示にしてみました。

内訳
1。最初にすべての権限を取り除きました
2。 1つのインスタンスのみに権限を追加しました

    {
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "condition": {}
            }
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef",
            "Condition": {
                "condition": {}
            }
        }
    ]
}

これは最初の部分でのみ機能します。つまり、すべてのインスタンスに対して拒否されます。
第2部が機能していないようです。

AWS Console with no permission to any instance data

権限はそのように機能しませんか?任意の助けいただければ幸いです。

3
ServerInsights

現在のポリシーはAWS-CLIで機能します。 aws ec2 stop-instanceが機能するはずです。

ただし、実際にweb consoleを使用するには、さらにいくつかのread-only permissionsが必要です。これは、コンソールがすべてのインスタンスをリストして記述し、リストを作成しようとするためです。

基本的な中途半端なリストを取得するには、少なくともec2:DescribeInstancesが必要になる場合があります。

そのIAMユーザーが他のインスタンスを変更できないようにする場合は、ec2:Describe*を使用して読み取り専用アクセスを付与できます。これにより、許可されていないインスタンスを変更できないようにしながらコンソールを使用できるようになります。

インスタンスのリストを彼が操作できるインスタンスのみに制限する方法を私は知りません。彼はおそらくすべてを表示しますが、その単一のインスタンスしか管理できません。

それが役に立てば幸い:)

4
MLu

1つを除くすべてのインスタンスをユーザーから非表示にすることについて

これは、IAMポリシーを使用して行うことはできません。 ec2:Describe*コマンド(ec2:DescribeInstancesを含む)は、リソースレベルの権限をサポートしていません。したがって、すべてに対してec2:Describe**)のみを許可または拒否できます。したがって、ユーザーはすべてのインスタンスを表示することも、まったく表示しないこともできます。

すべてを拒否しようとすることに関して、許可をオーバーライドします

ポリシーステートメントの順序は、ポリシーの結果を変更しません。したがって、「トップダウン」で記述したり解釈したりしないでください。

ポリシーは次のように機能します。

  1. ポリシーは暗黙的にすべてを拒否し始めます(これは暗黙の拒否です)
  2. 「許可」ステートメントは、暗黙の拒否をオーバーライドします(これは明示的な許可です)。
  3. 「拒否」ステートメントはすべての許可をオーバーライドします(これは明示的な拒否です)

したがって、「Deny」ステートメントがあると、それを上書きすることはできません。

あなたがしようとしているように、許可を「ピジョンホール」にできるようにするには、次のいずれかを行う必要があります。

  • 何も否定せず、許可したいものだけを許可する、または
  • すべてを拒否except許可するもの(1つのステートメントで)

あなたが望むものを達成するために

最も近いのは、ユーザーがすべてを「見る」ことができるようにすることですが、1つのEC2インスタンスでのみ操作できます。次の2つのステートメントが必要です。

{
    "Version": "2012-10-17", 
    "Statement": [ 
        {
            "Effect": "Allow",
            "Action": "ec2:Describe*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-12345678"
        }
    ]
}
1
Matt Houser

すべてを拒否する必要がありますが、条件ではArnNotEquals "arn:aws:ec2:us-east-1:123456789012:instance/i-0123456789abcdef"を使用します

これにより、基本的に、許可するインスタンスと同じARNを持たない他のすべてのインスタンスが拒否されます。

詳細については、 https://docs.aws.Amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_ARN を参照してください

MLuとSharuzzaman Ahmat Raslanに感謝します!

あなたのインプットは本当に私がこれを成し遂げるのに役立ちました。以下の場合に備えて、他の人のために私がしたことの要約を追加します。

  1. まず、ユーザーグループに正しいポリシーがアタッチされているを確認する必要があります。私の場合は、正しいポリシーがデタッチされています。ユーザーにはEC2アクセスがありませんでした。
  2. 次に、インラインポリシーを使用してアクセスを追加しました。以下のポリシーを追加しました。これは、MLuによって言及されているように、インスタンスのリストを停止することはできませんが、他のインスタンスの更新は許可されません。

    {
    "Version": "2012-10-17", 
    "Statement": [ 
            {
                "Effect": "Allow",
                "Action": "ec2:Describe*",
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": "*)",
                "Resource": "arn:aws:ec2:us-east-1:1234567890123:instance/i-xxxxxxxxxxxxxxxxx"
            }
       ]
    }
    

これが誰かが時間を節約するために立ち往生するのに役立つことを願っています。

0
ServerInsights