「EC2 から DynamoDB に書き込むのに、セキュリティグループで通信を許可するだけでは足りないのはなぜですか」
「アクセスキーを設定ファイルに書くのが、いちばん確実だと思っていました」
AWS Certified Cloud Practitioner(試験コード CLF-C02。以下 CLF)では、EC2 のアプリケーションに、アクセスキーを置かずに権限を与える方法を選ぶ問題が出ます。通信の許可と操作の権限の違い、ルートユーザーや IAM ユーザーのアクセスキーがなぜ避けられるかが、選択肢の誤りの論点になります。
この記事は、CLF の練習問題を1問ずつ解説する連載の第29問です。問題は筆者が試験の範囲に合わせて作ったもので、実際の試験の問題ではありません。まず自分で答えを選んでから、解説を読んでください。
▶ この回の内容は、YouTube の動画(約5分)でも見られます(記事の最後にも埋め込んであります)。
問題
ある企業は、Amazon EC2 インスタンスで動くアプリケーションから、Amazon DynamoDB のテーブルにデータを書き込みます。長期間使えるアクセスキーをインスタンスに置かずに、必要な権限だけを与えたいと考えています。最も適切な方法はどれですか。
- A. セキュリティグループのアウトバウンドルールで、DynamoDB への通信を許可する
- B. AWS アカウントのルートユーザーのアクセスキーを、インスタンスの環境変数に設定する
- C. DynamoDB のテーブルへの書き込みだけを許可した IAM ロールを作り、インスタンスにアタッチする
- D. IAM ユーザーを作ってアクセスキーを発行し、アプリケーションの設定ファイルに書く
答えを決めたら、下を開いてください。
正解を見る(クリックで開きます)
正解:C
書き込みだけを許可した IAM ロールをインスタンスにアタッチすると、アプリケーションは一時的な認証情報を自動で受け取れます。アクセスキーを置かずに、必要な権限だけを与えられます。
正解は C
正解は C です。
書き込みだけを許可した IAM ロールを、インスタンスにアタッチします。アプリケーションは、一時的な認証情報を自動で受け取るので、アクセスキーを置かずに済みます。ここから、選択肢を1つずつ見ていきます。
選択肢ごとの解説
A:通信の許可は権限ではない(誤り)

セキュリティグループは、通信を通すかどうかを決める、ネットワークの門です。DynamoDB にデータを書き込むには、通信が通ることに加えて、IAM の権限が要ります。
図のように、アウトバウンドルールで通信を許可しても、IAM の権限が無ければ、書き込みは拒否されます。通信の許可と、操作の権限は、別のものです。
B:ルートユーザーのキーは使わない(誤り)

ルートユーザーは、AWS アカウントのすべてを操作できる、特別なユーザーです。図のように、そのアクセスキーを使うと、アプリケーションはテーブルの削除や、アカウントの閉鎖まで、何でもできてしまいます。必要な権限だけ、という要件に反します。
ルートユーザーのアクセスキーは、作らないのが原則です。長期間使えるキーなので、漏れるとアカウントのすべてが危険になります。
C:IAM ロールをアタッチする(正解)

書き込みだけを許可した IAM ロールを、インスタンスにアタッチします。インスタンスプロファイルという仕組みです。
アプリケーションは、インスタンスメタデータから、一時的な認証情報を受け取ります。AWS SDK や CLI は、これを自動で使います。一時的な認証情報は、AWS が自動でローテーションします。ロールのポリシーを変えると、新しい権限の認証情報が自動で渡されます。
アクセスキーを置かずに済み、必要な権限だけにもなります。
D:長期のアクセスキーは置かない(誤り)

IAM ユーザーのアクセスキーは、長期間使える認証情報です。削除や無効化をするまで使い続けられます。
設定ファイルに書くと、図のように、コードの公開やバックアップから漏れたとき、第三者に悪用されるおそれがあります。そもそも、長期間使えるアクセスキーを置かない、という要件に反します。EC2 のアプリケーションには、IAM ロールを使います。
長期の認証情報と一時的な認証情報
長期の認証情報と一時的な認証情報の違いを、表で整理します。大きな違いは、置く必要があるかどうかと、ローテーションをだれが行うかです。
| 項目 | 長期の認証情報 | 一時的な認証情報 |
|---|---|---|
| 例 | IAM ユーザー・ルートユーザーのアクセスキー | IAM ロール(EC2 のインスタンスプロファイル) |
| 置き場所 | 設定ファイル・環境変数などに自分で置く | 置かない。インスタンスメタデータから受け取る |
| 使える期間 | 削除・無効化するまで | 期限がある |
| ローテーション | 自分で行う | AWS が自動で行う |
ポイント
- EC2 のアプリケーションに権限を与える = IAM ロール をアタッチ
- 一時的な認証情報が 自動で渡され、自動でローテーション
- アクセスキーを 設定ファイル・環境変数に置かない
- セキュリティグループは 通信の許可。操作の権限は IAM
IAM ロールの仕組みと、ルートユーザーのアクセスキーを作らない理由は、講座の記事で詳しく解説しています。
- 講座の第10回⑤「IAM と最小権限」の「IAM ロール」の節(連載の入口のページから)
- 講座の第10回④「AWS アカウントとルートユーザー」の「ルートユーザーの守り方」の節(連載の入口のページから)
講座の全14回は、連載の入口のページから順に読めます。
動画で見る
この回の内容を、YouTube の動画(約5分)でも解説しています。
連載の全回は、YouTube の再生リスト「CLF-C02 試験対策問題」にまとめています。
連載「CLF-C02 試験対策問題」
全回の目次と、読む順番・目的別の読み方は、CLF-C02 試験対策問題の入口のページにまとめています。
- 第1問 初期費用をかけずに始めるコストの利点(従量課金・規模の経済)
- 第2問 数分でグローバルに展開(世界同時公開と低い遅延)
- 第3問 高可用性(EC2 の複数 AZ 配置と RDS マルチ AZ)
- 第4問 クラウドの俊敏性(数分で作成・すぐに削除)
- 第5問 責任共有モデル(EC2 へのリホストで AWS に任せられること)
- 第6問 数時間だけのアクセスのピークに備える(EC2 Auto Scaling・オンデマンド)
- 第7問 Well-Architected の6つの柱(信頼性・パフォーマンス効率)
- 第8問 信頼性の柱の設計原則(自動で復旧・水平方向のスケール)
- 第9問 持続可能性の柱の設計原則(使用率の最大化・マネージドサービス)
- 第10問 AWS CAF の変革ジャーニーのフェーズ(構想・連携・ローンチ・スケール)
- 第11問 AWS CAF のパースペクティブ(構成管理・パッチ管理はオペレーション)
- 第12問 移行のビジネスケース(Migration Evaluator)
- 第13問 AWS CAF のパースペクティブ(役割と組織の変化は人材)
- 第14問 サーバーをそのまま EC2 に移す(AWS Transform MGN)
- 第15問 ファイルの移行(AWS DataSync)
- 第16問 移行戦略の7つの R(リパーチェス・SaaS への乗り換え)
- 第17問 適切なサイズ設定(CPU は余り、メモリが不足)
- 第18問 責任共有モデル(Lambda と RDS)
- 第19問 最小権限の原則(IAM のポリシーと SCP)
- 第20問 責任共有モデル(EC2 と S3、AWS の責任)
- 第21問 共有統制の例(責任共有モデルの IT 統制)
- 第22問 コンプライアンスの資料と契約(AWS Artifact)
- 第23問 脅威の検出(Amazon GuardDuty)
- 第24問 脆弱性の継続的なスキャン(Amazon Inspector)
- 第25問 S3 の機密データの検出(Amazon Macie)
- 第26問 S3 の保管時の暗号化とキーの管理
- 第27問 だれが操作したかを調べる(AWS CloudTrail)
- 第28問 IAM ユーザーの認証情報の一覧(認証情報レポート)
- 第29問 EC2 のアプリケーションに権限を与える(IAM ロール)(この記事)
- 第30問 データベースのパスワードの自動ローテーション(AWS Secrets Manager)
- 第31問 社員に一時的な認証情報を発行するサービス(AWS STS)
- 第32問 ルートユーザーでなければできない作業(アカウントの閉鎖・メールアドレスの変更)
- 第33問 アプリの会員のサインインとソーシャルログイン(Amazon Cognito)
- 第34問 同じ IP からの大量のリクエストを止める(AWS WAF のレートベースのルール)
- 第35問 追加料金なしの DDoS 保護(AWS Shield Standard)
- 第36問 他社のソフトウェアを AMI で使う(AWS Marketplace)
- 第37問 インストールなしでブラウザから AWS CLI を使う(AWS CloudShell)
- 第38問 同じ構成の環境をコードで何度でも作る(CloudFormation・CDK)
- 第39問 工場の中で AWS のサービスを動かすには(AWS Outposts)
- 第40問 世界の利用者の近くでキャッシュして配信(Amazon CloudFront)
- 第41問 コードを上げるだけで Web アプリを動かすサービス(AWS Elastic Beanstalk)
- 第42問 サーバーを管理せずにコンテナを動かす(AWS Fargate)
- 第43問 URL のパスで振り分けるロードバランサー(Application Load Balancer)
- 第44問 つながりを何段もたどるグラフデータベース(Amazon Neptune)
- 第45問 RDS の自動フェイルオーバーと読み取りの分離(マルチ AZ・リードレプリカ)
- 第46問 サーバーの管理なしにアクセスの増減に合わせるデータベース(Amazon DynamoDB)
- 第47問 セキュリティグループの特徴(ステートフル・インスタンス単位)
- 第48問 障害のときだけ別のリージョンへ DNS で切り替え(Route 53 のフェイルオーバールーティング)
- 第49問 今あるインターネット回線で、すぐに暗号化してつなぐ(AWS Site-to-Site VPN)
- 第50問 一部の管理者だけは解除できる削除の保護(S3 オブジェクトロックのガバナンスモード)
- 第51問 めったに見ないがミリ秒で開く画像の保管(S3 Glacier Instant Retrieval)
- 第52問 Windows のファイルサーバーを移す(Amazon FSx for Windows File Server)
- 第53問 案内文を翻訳して音声で読み上げる(Amazon Translate と Amazon Polly)
- 第54問 S3 のデータをカタログにして SQL で照会(AWS Glue と Amazon Athena)
- 第55問 依頼をためて、受け付けた順に1回だけ処理(Amazon SQS の FIFO キュー)
- 第56問 設備を買わずに電話とチャットの窓口を作る(Amazon Connect)
- 第57問 EC2 と自社のサーバーに少しずつ配置し、失敗したら戻す(AWS CodeDeploy)
- 第58問 アプリだけをブラウザに配信(WorkSpaces Applications・旧 AppStream 2.0)
- 第59問 コア単位のライセンスを持ち込み、同じ物理サーバーで動かす(EC2 の専有ホスト)
- 第60問 EC2・Fargate・Lambda と夜間のバッチのコスト削減(Compute Savings Plans・スポット)
- 第61問 管理者も外せないリージョンの制限と、請求書の一本化(AWS Organizations の SCP)
- 第62問 1つのアカウントの料金をプロジェクトごとに分ける(コスト配分タグ)
- 第63問 料金のグラフと予算超えの通知(Cost Explorer・Budgets)
- 第64問 アカウントを作る前に料金を見積もる(AWS Pricing Calculator)
- 第65問 ベストプラクティスに合わない所を自動で見つける(AWS Trusted Advisor)
- 第66問 AWS 側の保守の予定を前もって知る(AWS Health Dashboard)
- 第67問 アクセスに合わせて台数を自動で増減する(Amazon EC2 Auto Scaling)
- 第68問 パフォーマンス効率の柱の設計原則(高度なテクノロジー・グローバル展開)
- 第69問 移行戦略の7つの R(リタイア・使われていないアプリを停止)
- 第70問 AWS CAF のパースペクティブ(支出とデータの統制はガバナンス)
- 第71問 ライセンスを持たずに SQL Server を使う(RDS のライセンス込み)
- 第72問 EC2 と自社のサーバーのパッチを自動で当てる(AWS Systems Manager Patch Manager)
- 第73問 障害の教訓を共有し、運用の手順を見直す(運用上の優秀性の設計原則)
- 第74問 設定の履歴を記録し、社内ルールに合わないリソースを「非準拠」にする(AWS Config)
- 第75問 S3 へのアップロードごとに短い処理をサーバーレスで動かす(AWS Lambda)
- 第76問 12のアカウントと SaaS に1回でサインイン(AWS IAM Identity Center)
- 第77問 インターネットを通らずに、帯域とレイテンシーを安定させる(AWS Direct Connect)
- 第78問 途中でファミリーを変え、前払いできない RI の選び方(コンバーティブル・前払いなし)
- 第79問 セキュリティの検出結果を集めて設定もチェック(AWS Security Hub CSPM)
- 第80問 AWS CAF のパースペクティブ(イノベーションとデータの収益化はビジネス)
- 第81問 特定の IP アドレスの範囲を、サブネットの入り口で拒否する(ネットワーク ACL)
- 第82問 組織の外と共有・一般に公開されているリソースを一覧にする(IAM Access Analyzer)
- 第83問 複数の AZ の EC2 から NFS で同じファイルを共有する(Amazon EFS)
- 第84問 ルートユーザーの守り方と日常の作業(MFA・IAM Identity Center)
- 第85問 一括請求の料金の利点(ボリューム料金の階層・リザーブドインスタンスの割引の共有)
- 第86問 数ペタバイトの販売データをまとめて毎日集計する(Amazon Redshift)
- 第87問 OS のパッチを自社で当てなくてよい移行先(Amazon RDS・AWS Lambda)
- 第88問 移行戦略の7つの R(リプラットフォーム・VM をコンテナにして ECS と Fargate へ)
- 第89問 GPU の学習と CPU のバッチ処理に合うインスタンスファミリー(高速コンピューティング・コンピューティング最適化)
- 第90問 アプリのエラーの件数と CPU 使用率をしきい値で見張り、E メールで知らせる(Amazon CloudWatch)
- 第91問 1回の発行で SQS・Lambda・E メールに届ける(Amazon SNS のトピック)
- 第92問 部署の人の権限を追加料金なしでまとめて管理(IAM ユーザーグループ)
- 第93問 最も詳しいコストのデータを S3 へ(AWS Data Exports の CUR 2.0)
- 第94問 視聴履歴とクリックから利用者ごとの動画のおすすめ(Amazon Personalize)
- 第95問 攻撃中の専門チームの支援と DDoS のコスト保護(AWS Shield Advanced)
- 第96問 AWS CAF のトランスフォーメーションの分野(業務のデジタル化はプロセス)
- 第97問 パブリックとプライベートのサブネットに必要な部品(インターネットゲートウェイ・NAT ゲートウェイ)
- 第98問 SSH・コンソール・CLI の認証情報の使い分け(キーペアとアクセスキー)
- 第99問 よくある質問の解決の記事を読む(AWS re:Post のナレッジセンター)
- 第100問 設定値を階層でまとめて追加料金なしで保管(Parameter Store)

コメント