AWS EC2 で AMI 作成に失敗する原因
以下のようなコマンドをメンテナンスウインドの cron で各 EC2 に実行して定期バックアップを作成しようと思っているのですが、一部のEC2でcreaeImageの権限がないと言われて失敗します
AMIDATE=`date "+%Y%m%d"`
EC2ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
NAME=`curl -s http://169.254.169.254/latest/meta-data/security-groups`
REGION=ap-northeast-1
aws ec2 create-image \
--region $REGION \
--instance-id $EC2ID \
--name "$NAME-AMI-$AMIDATE-$EC2ID" \
--description "$NAME-AMI-$AMIDATE-$EC2ID" \
--no-reboot
エラーメッセージ
An error occurred (UnauthorizedOperation) when calling the CreateImage operation: You are not authorized to perform this operation.
failed to run commands: exit status 255
心当たりがあるとすれば
その失敗する EC2 は別オーガニゼーションのAMIからたてたものなのですが
EC2自体は現環境で動いていて、現環境にイメージを作成するのに、
ソースのAMIの出どころで失敗する理由はない気がします
成功するEC2もあるので実行するタスクの権限は問題ないはずなのですが
それともなにか別の原因があるのでしょうか
原因に心当たりがある方いらっしゃったら助けていただきたいです
追記
EC2のAWSコンソール画面のパラメータは
上の方のネットワーク関連 ID 予約 起動時刻 インスタンスタイプ
以外イメージにかかわってきそうな箇所はすべて同じです
インスタンスタイプは成功したのが t2.medium, c5.large
失敗したのが t3.medium です
あと作成される側の EC2Role が関係してるかはわかりませんが
失敗したEC2には以下の Ahena 用の policy が1つ追加で存在していて
それ以外は成功した Role と同じ policy でした
Deny を付与してるわけではないのでこのポリシーでイメージの可否に影響があるのでしょうか
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Action": [
"athena:*"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"glue:CreateDatabase",
"glue:DeleteDatabase",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:UpdateDatabase",
"glue:CreateTable",
"glue:DeleteTable",
"glue:BatchDeleteTable",
"glue:UpdateTable",
"glue:GetTable",
"glue:GetTables",
"glue:BatchCreatePartition",
"glue:CreatePartition",
"glue:DeletePartition",
"glue:BatchDeletePartition",
"glue:UpdatePartition",
"glue:GetPartition",
"glue:GetPartitions",
"glue:BatchGetPartition"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:GetObject",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload",
"s3:CreateBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::aws-athena-query-results-*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::athena-examples*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"sns:ListTopics",
"sns:GetTopicAttributes"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"cloudwatch:PutMetricAlarm",
"cloudwatch:DescribeAlarms",
"cloudwatch:DeleteAlarms"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": [
"lakeformation:GetDataAccess"
],
"Resource": [
"*"
]
},
{
"Sid": "",
"Effect": "Allow",
"Action": "athena:*",
"Resource": "*"
}
]
}