第2章 AMI イメージの準備と AWS へのアップロード
RHEL Image Builder を使用すると、AWS クラウド上でカスタムイメージを作成し、手動または自動で更新できます。
2.1. AWS AMI イメージを手動でアップロードする準備 リンクのコピーリンクがクリップボードにコピーされました!
Amazon Web Services (AWS) に Amazon Machine Image (AMI) をアップロードする前に、イメージをアップロードするためのシステムを設定する必要があります。
前提条件
- 書き込み可能な S3 バケット が準備済みである。
AWS の認証が以下のいずれかの方法で設定されている。
- 静的認証情報: AWS IAM アカウントマネージャーで設定するアクセスキー ID とシークレットアクセスキー。AWS IAM アカウントマネージャー でアクセスキー ID が設定されている必要があります。
- 動的認証情報: AWS IAM Identity Center (SSO) を使用して管理する有効期限の短い認証情報。
手順
Python 3 と
pipツールをインストールします。# dnf install python3 python3-pippipを使用して AWS コマンドラインツール をインストールします。$ pip3 install awscliAWS CLI 認証プロファイルを設定します。
静的認証情報 (AWS アクセスキー) の設定: コマンドラインで、認証情報、リージョン、および出力形式を入力するように求められます。
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: Default output format [None]:動的認証情報の設定 (AWS SSO / IAM Identity Center): 組織で有効期限の短い動的認証情報を使用している場合は、別のプロファイルにログインします。リモートの SSH セッションで CLI を実行する場合は、
--remoteフラグを含めます。$ aws login --region eu-central-1 --profile auth --remoteブラウザーで認証を行うには、プロンプトに表示されるリンクにアクセスします。これにより、
~/.aws/configファイルにエントリーが作成されます。[profile auth] region = eu-central-1 login_session = arn:aws:sts::12345678910:assumed-role/12345678910-admin/<username>重要image-builderは AWS SDK for Go v2 を使用していますが、これは動的認証情報をネイティブにサポートしていません。上記のプロファイルのみを使用してアップロードしようとすると、認証情報が通知なく無視され、"Getting: operation error S3: CreateMultipartUpload, get identity: get credentials: failed to refresh cached credentials, no EC2 IMDS role found…" というエラーが発生します。この制限を回避するには、[default]または別の専用プロファイルを設定してcredential_processを使用してください。これにより、動的なセッショントークンが、image-builderが読み取ることのできる静的スタイルの認証情報にマッピングされます。~/.aws/configファイルに以下を追加してください。[default] region = eu-central-1 credential_process = aws configure export-credentials --profile auth --format process
バケットの名前を定義し、バケットを作成します。
$ BUCKET=<bucketname>$ aws s3 mb s3://$BUCKET<bucketname>は、実際のバケット名に置き換えます。この名前は、グローバルで一意となるように指定する必要があります。Simple Storage Service (S3) へのアクセス権限を付与するには、AWS Identity and Access Management (IAM) で
vmimportロールを作成します (まだ作成していない場合)。信頼ポリシー設定を含む
trust-policy.jsonファイルを JSON 形式で作成します。以下に例を示します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "vmie.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:Externalid": "vmimport" } } }] }ロールポリシーの設定を含む
role-policy.jsonファイルを JSON 形式で作成します。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket"], "Resource": ["arn:aws:s3:::%s", "arn:aws:s3:::%s/"] }, { "Effect": "Allow", "Action": ["ec2:ModifySnapshotAttribute", "ec2:CopySnapshot", "ec2:RegisterImage", "ec2:Describe"], "Resource": "*" }] }$BUCKET $BUCKETtrust-policy.jsonファイルを使用して、Amazon Web Services アカウントのロールを作成します。$ aws iam create-role --role-name vmimport --assume-role-policy-document \file://trust-policy.jsonrole-policy.jsonファイルを使用して、インラインポリシードキュメントを埋め込みます。$ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document \file://role-policy.json
検証
バケットが作成されたことを確認します。
$ aws s3 ls | grep $BUCKETvmimportロールが作成されたことを確認します。$ aws iam get-role --role-name vmimport