ある AWS リージョンまたは AWS アカウントから、別のリージョンまたはアカウントに Amazon マシンイメージ (AMI) をコピーしようとすると、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでエラーが発生します。
解決策
リージョン間で AMI をコピーするには、スナップショットや AWS Key Management Service (AWS KMS) 暗号化キーなどの AMI とそのコンポーネント用のアクセス許可を設定します。
アクセス許可エラーのトラブルシューティング
IAM アクセス許可が欠けている
AWS Identity and Access Management (IAM) ユーザーまたはロールに、AMI コピーのために必要なアクセス許可がない場合、次のエラーメッセージが表示されることがあります。
"You are not authorized to perform this operation"
この問題をトラブルシューティングするには、IAM エンティティに必要なアクセス許可があることを確認してください。
AMI ストレージにアクセスするためのアクセス許可が欠けている
共有 AMI をコピーする際、宛先アカウントが関連するスナップショットにアクセスできない場合、次のエラーメッセージが発生することがあります。
"You do not have permission to access the storage of this AMI"
AWS Marketplace 以外の AMI でこの問題を解決するには、次の手順を実行します。
- ソース AMI を共有するには、[AMI 許可を編集] を選択します。
- [アカウントのアクセス許可を作成するときに、関連するスナップショットに「ボリュームの作成」のアクセス許可を追加する] を選択します。
- ソース AMI を宛先アカウントに共有します。
注: AMI が共有済みの場合は、ソースアカウントから AMI を削除してから、[ボリュームの作成] のアクセス許可を選択した状態で宛先に再共有します。
AWS Marketplace AMI のこの問題を解決するには、AMI を使用してインスタンスを起動する必要があります。その後、インスタンスから新しい AMI を作成します。アカウント間で AWS Marketplace AMI を直接コピーすることはできません。
暗号化された AMI と AWS KMS のキーに関する問題のトラブルシューティング
暗号化された AMI では、宛先アカウントはコピープロセス中に復号化を行うために、ソース AWS KMS キーにアクセスする必要があります。宛先アカウントも同じキーを使用するか、宛先リージョン内に一致するキーを配置する必要があります。
暗号化された AMI に対するアクセス許可を設定するには、宛先アカウントに AWS KMS キーへのアクセス許可を付与し、キーアクセス用の IAM ポリシーを作成します。
宛先アカウントにキーへのアクセス許可を付与する
暗号化された AMI を管理するには、ソースアカウントで次の手順を実行します。
- AWS KMS コンソールを開きます。
- ナビゲーションペインで [カスタマーマネージドキー] を選択します。
- AMI の暗号化に使用した AWS KMS キーを選択します。
- [キーポリシー] の [デフォルトビュー] で [別の AWS アカウントを追加] を選択します。
- 宛先アカウントの ID を入力します。
- [変更を保存] を選択します。
- [ポリシービュー] で [編集] を選択します。
- 次のアクセスポリシーを入力します。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {"AWS": [
"arn:aws:iam::[SOURCE_ACCOUNT_ID]:user/KeyUser",
"arn:aws:iam::[TARGET_ACCOUNT_ID]:root"
]},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {"AWS": [
"arn:aws:iam::SOURCE_ACCOUNT_ID:user/KeyUser",
"arn:aws:iam::DESTINATION_ACCOUNT_ID:root"
]},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {"Bool": {"kms:GrantIsForAWSResource": true}}
}
注: SOURCE_ACCOUNT_ID をソースアカウント ID に、DESTINATION_ACCOUNT_ID を宛先アカウント ID に置き換えます。
IAM ポリシーを作成し、宛先アカウントがキーにアクセスできるようにする
宛先アカウントに IAM ポリシーを作成します。
ポリシーの例:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Action": ["kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey"],
"Resource": ["KEY_ARN"]
}, {
"Sid": "AllowAttachmentOfPersistentResources",
"Effect": "Allow",
"Action": ["kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant"],
"Resource": ["KEY_ARN"],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}]
}
注: KEY_ARN を AWS KMS キーの Amazon リソースネーム (ARN) に置き換えます。
次に、暗号化 AMI を操作する必要がある IAM ユーザーまたはロールにポリシーをアタッチします。
関連情報
Share the AWS KMS key used to encrypt a shared Amazon EBS snapshot (共有 Amazon EBS スナップショットの暗号化に使用する KMS キーを共有する)
コピーした AMI から EC2 インスタンスを起動できない理由は何ですか?