Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSマルチアカウント管理術

 AWSマルチアカウント管理術

Yappli Meetup 〜Site Reliability Engineering〜@アカツキ(https://yappli.connpass.com/event/124728/)
で発表した内容です。

Kato Ryo

May 22, 2019
Tweet

More Decks by Kato Ryo

Other Decks in Technology

Transcript

  1. 5 マルチアカウントのメリット・必要性 • 権限の最⼩化 • 本番環境にはCI/CDやGitOpsでしかアクセスさせない → セキュアな環境 • プロジェクトAのメンバーは、Bにアクセス不可

    • コスト分析 • プロジェクト、環境(dev, stg, prd)毎にコストを出せる • タグ付けでもできるけど、ぶっちゃけ⾟い • 負荷テスト • (リソース的に分離したとしても)本番環境に対して⾏っ てアカウント毎停⽌の恐れ
  2. 11 AWS Identity and Access Management • セキュアにAWSを使うための認証・認可の仕組み • 実現できる事

    • ユーザー単位でのアクセス制御 • AさんはEC2をストップ & スタートできる • グループ単位でのアクセス制御 • アプリケーションチームはデプロイできるがネットワーク設定 は変更できない • AWSサービス間のアクセス制御 • CodeBuildからS3やCWLにログ出⼒
  3. 12 IAM必須⽤語 • IAMユーザー • アクセスキーによって認証された⼈・プログラム • IAMグループ • IAMユーザーの集合

    • IAMポリシー • どのAWSリソースに触って良いかという権限 • IAMロール • 存在によって認証されたIAMユーザー・AWSサービス
  4. 15 IAMポリシー { “Effect”: “Allow”, “Action”: [ “s3:ListBickets”, “s3:Get*” ],

    “Resource”: [ “arn:aws:s3:::mybucket” ], “Condition”: { “IpAddress”: { “aws:SourceIP”: [“13.32.52.13”, “13.32.52.22”] } } } • Effect • 許可: Allow, 拒否: Deny • Action • 対象となるAWS操作を指定 • Resource • 対象となるAWSリソースを指定 • Condition • このアクセス制御が有効になる条件の設定
  5. 16 IAMポリシー • AWS管理ポリシー • AWSが管理するポリシー • AWSによって更新も⾏われる (例)新サービス登場時など •

    カスタマー管理ポリシー • ⾃分で作成・管理するポリシー • 特定リソース単位(EC2インスタンスAなど)で制御可能 • インラインポリシー • IAMユーザー・グループ・ロール専⽤に作成するポリ シー
  6. 17 IAMロール • IAMロール • AWSサービスやIAMユーザーの存在に対して操作権限を 付与する仕組み 1丁⽬: ⾃分の家 4丁⽬:

    太郎の家 太郎 4丁⽬の太郎くんな ら私の家に⼊れて 4丁⽬の太郎くん だからOK!!
  7. 18 IAMロール • IAMロール • AWSサービスやIAMユーザーの存在に対して操作権限を 付与する仕組み AWSアカウントA AWSアカウントB iamuser:

    taro Account Bの iamuser:taro を許可 して Account Bの iamuser:taroだから OK ID & PWで認証 存在によって認証
  8. 24 カラーテーマ • Chrome Theme Creator (https://bit.ly/2fFpMXM) • 2択 •

    ⾃分でカラーテーマを作る • 出来合いのテーマを使う • アニメからアイドルまで⾊々
  9. 29 クレデンシャルの保管 • ~/.aws/credentials • アクセスキー & シークレットアクセスキー • 1組だけ登録する

    • ここ以外にクレデンシャルは記載しない!! • 分散すると管理しきれない [classmethod] aws_access_key_id=XXXXXXXXXXX aws_secret_access_key=XXXXXXXX
  10. 30 プロファイルの定義 • ~/.aws/config • role_arn & source_profile & mfa_serial

    • AWSアカウントが増えるたびに追加する [profile project_a_dev] region=ap-northeast-1 output=json role_arn=arn:aws:iam::<<対象のAWSアカウント>>:role/cm-kato.ryo source_profile=classmethod mfa_serial=arn:aws:iam::<<CMのAWSアカウント>>:mfa/cm-kato.ryo デフォルトプロファイルの場合は [default]と書く
  11. 31 AWS CLIで使⽤するには • --profile で プロファイル名を指定 • 指定しないとデフォルトプロファイルで実⾏される •

    OTPの⼊⼒を求められる • ⼀度OTPを⼊⼒すれば有効時間内は再⼊⼒不要 $ aws --profile project_a_dev s3 ls Enter MFA code for arn:aws:iam::<<CM>>:mfa/cm-kato.ryo: <<OTP>>
  12. 34 assume-role(github.com/remind101/assume-role) • 指定したプロファイルの⼀時的な認証情報を⽣成し て環境変数にセットしてくれるツール • evalを使いセットする $ assume-role project_a_dev

    MFA code: <<OTP>> export AWS_ACCESS_KEY_ID=”XXX” export AWS_SECRET_ACCESS_KEY=”XXX" export AWS_SESSION_TOKEN=”XXX” export AWS_SECURITY_TOKEN=”XXX" export ASSUMED_ROLE=”project_a_dev" # Run this to configure your shell: # eval “$(assume-role default)”
  13. 36 direnv & assume-role で実現できること • ディレクトリに移動すると、OTPの⼊⼒要求 • 環境変数に⼀時クレデンシャルがセットされる $

    cd workdir/project_a/dev direnv: loading .envrc MFA code: direnv: export +ASSUMED_ROLE +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY +AWS_SECURITY_TOKEN +AWS_SESSION_TOKEN $ aws s3 ls # profile project_a_dev として実⾏される
  14. 37