この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちはミンです。
最近現場では本番のAWSアカウントにて作成したEC2からSTのAWSアカウントにて作成したS3バケットにファイルをアップロードし、STのEC2からそのS3バケットからファイルがダウンロードできるようにするという要件があります。
こちらの要件はワンセンテンスしかありませんが、設計する時、考慮または注意しなければならないのは下記の3点あると思います。
1、本番から持ち出しの制限
2、別アカウントでのS3バケット操作の制限
3、S3バケットからファイルがダウンロード可能にはファイル所有者の注意
こちらの3点を踏まえて今週末3連休に設計し、ハンズオン構築したいと思います。
まず、アーキテクチャ図を描いてみました。
こちらのアーキテクチャ図を実現するには下記の構築作業が必要です。
AWS Account A
A-1、ポリシー作成
A-2、IAM ロールA作成
A-3、AWS EC2 インスタンスを作成し、2にて作成したIAM ロールAをEC2 インスタンスにアタッチする
AWS Account B
B-1、S3 バケット作成
B-2、バケットポリシー作成
次、ハンズオン構築してみましょう。
必要な情報の前後関係で構築順は下記の通りです。
B-1
↓
A-1
↓
A-2
↓
B-2
さっそく構築してみましょう。
B-1:クロスアカウントハンズオンバケット作成
Account Bにてログイン
バケット名は任意ですが、グローバル範囲でユニークである必要があります。
AWSリージョンは一番近いリージョンをおすすめます。
パブリックに公開しないので、パブリックアクセスをすべてブロックのチェックボックスにチェックを入れます。
ほかの設定は需要に応じて設定しましょう。
A-1:クロスアカウントハンズオンバケットにアクセスポリシー作成
Account Aにてログイン
今回はjson形式で作成します。
バケットリストとアップロードアクションしか許していません。
リソースには先ほどB-1にて作成したバケットです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::cpi-crossaccounthandson-min",
"arn:aws:s3:::cpi-crossaccounthandson-min/*"
]
}
]
}
任意なタグを入力します。
最後、名称を入力し、「ポリシー作成」ボタンを押下します。
A-2:EC2 インスタンスにアタッチ用IAM ロールA作成
A-1にて作成したポリシーのチェックボックスにチェックを入れましょう。
次、ロール名を入力し、「ロールを作成」ボタンを押下します。
最後、ロール一覧に戻り、先ほど作成したロールをクリックし、ARN情報をメモします。
B-2:IAM ロールAを許可するバケットポリシー作成
「編集」ボタンをクリックします。
PrincipalのvalueにはA-2にて作成した別アカウントのIAM ロールAを入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::9xxx6:role/S3CrossAccountHandsOnRoleA"
},
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::cpi-crossaccounthandson-min",
"arn:aws:s3:::cpi-crossaccounthandson-min/*"
]
}
]
}
ひとまず、ここでは別アカウントでS3バケットにアップロードの構築を完了しました。
もし、ここまでにご覧になっていただけましたら、ぜひ「いいね!」をお願い致します。
次回は検証と改善についてです。お楽しみに!