はじめに
EC2の起動ができないという事象があったので、必要な権限をまとめていきます。
とりあえず多めに権限つけておけば?というのでも開発環境はいいかもですが、本番環境などで、起動停止権限だけ付与したいよという方は必須です。
普通に必要な権限
以下です。
Describeが必要かは状況によりけりです。
"ec2:DescribeInstances"
"ec2:StartInstances"
"ec2:StopInstances"
この場合でも起動できないという事象が発生します。
それはEBSを暗号化しているケースです。
次に、EBSを暗号化しているケースに必要な権限を紹介します。
EBSを暗号化している場合に追加で必要な権限
以下を追加します。
"kms:Encrypt"
"kms:Decrypt"
"kms:ReEncrypt*"
"kms:GenerateDataKey*"
"kms:DescribeKey"
ところが・・・・
この権限で起動しようとすると、EC2が一瞬起動するものの、すぐに停止状態になるという事象が発生します。
調査したところ、以下の権限も追加で必要とのこと。
"kms:CreateGrant"
CreateGrantとは、KMSキーの仕様を指定したプリンシパルつまり別のサービスに使用を許可するということです。EC2は、KMSで暗号化されたEC2インスタンスを起動する際に、CreateGrantにより、EBSにKMSキーの使用を許可しているので必要ということですね。
参考ポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"ec2:DescribeInstances",
"ec2:StartInstances,
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:XXX",
"Effect": "Allow"
},
{
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:XXX",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": [
"arn:aws:kms:XXX"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
まとめ
CreateGrantが必要なのをよく忘れがちです。
EC2を起動する際にはCreateGrantが必要!覚えておきます。