Memo/AmazonWebServices/IAM

http://dexlab.net/pukiwiki/index.php?Memo%2FAmazonWebServices%2FIAM
 

IAM(Identity and Access Management)


複数AWSアカウントの管理

  • ログイン用AWSアカウント
    • IAM user作成
      • ログイン、MFA設定、パスワード変更等しか出来ないようにする
      • MFA有効化
      • AccessKey?作成
  • 管理対象の複数AWSアカウント
    • IAM userは作成しない
    • IAM roleを作成
      • ログイン用AWSアカウントからAssumeRole?でswitchできるように設定
      • admin, PowerUser?, Readonly等のroleを作成
  • aws cliでのテストは policy変更後、localのcacheを削除したほうが良い。
    1. rm -r ~/.aws/cli/cache

ハードウェアMFA

  • バッテリー切れ/壊れた場合、AWSサポートに連絡してMFAを無効にしてもらう必要あり

チュートリアル

  • IAM のチュートリアル - AWS Identity and Access Management
  • チュートリアル: 請求コンソールへのアクセス権の委任
  • チュートリアル: AWS アカウント間の IAM ロールを使用したアクセスの委任
  • チュートリアル: はじめてのカスタマー管理ポリシーの作成とアタッチ
  • チュートリアル: ユーザーが自分の認証情報および MFA を設定できるようにする
    • aws cliでの利用時に、MFAが未入力でもswitch roleできるようにする場合、 「sts:AssumeRole?」を追加する。このセクションはDenyなので、許可したいAPIを列挙する。
      1. ...             "Sid": "BlockMostAccessUnlessSignedInWithMFA",             "Effect": "Deny",             "NotAction": [               "sts:AssumeRole", ...

IAM policy内で変数を使う


STS(Security Token Service): 一時的セキュリティ認証情報

  • aws cliで一時的な認証情報を得る。profileを指定するのは元アカウント。
    1. aws sts assume-role \
    2.   --role-arn "arn:aws:iam::<account2 account id>:role/role-admin" \
    3.   --role-session-name "account2-admin-session1" \
    4.   --duration-seconds 3600 \
    5.   --profile account1 > account2-admin-session1.json

AssumeRole?: 複数のAWSアカウント間で権限を委譲する

一つのAWSアカウントにIAM userを作り、他のAWSアカウントではIAM roleにswitchできる。

  • メリット
    • 各AWSアカウント毎にIAM userを作る手間と、セキュリティリスク削減

アカウント名の取得

  • aws sts get-caller-identityで自分のaccount idは取得できる。account nameを取得する方法が不明
  • aws organizations にはaccount nameがある
  1. AWS_SRC_ACCOUNT=<src account>
  2. AWS_ORG_ACCOUNT=<organization account>
  3. aws organizations describe-account \
  4.  --query 'Account.Name' \
  5.  --account-id $(aws sts get-caller-identity --profile $AWS_SRC_ACCOUNT --query 'Account' --output text) \
  6.  --output text \
  7.  --profile $AWS_ORG_ACCOUNT
  • account-aliasesを設定して「aws iam list-account-aliases」で取得する

AWSアカウントIDの代わりにaliasを使う

IAMユーザのサインイン画面のURLはデフォルトアカウントIDだが、aliasが複数設定できる。
aliasを設定しても、accountIDのリンクは使える。


一時的なAccess Keyの発行


IAM Roleを設定できるユーザの作成

LambdaはIAMを触る強い権限が必要になる。そうするとAdminになってしまうが、それが嫌な場合。


ポリシーのテスト

APIによって、リソースが指定できる場合と、指定できない場合がある。

  • 例:Tag「Name: web」が付いたEC2インスタンスの操作を拒否したい。制限されるAPIとされないAPIがある。
    1. {
    2.     "Version": "2012-10-17",
    3.     "Statement": [
    4.         {
    5.             "Effect": "Deny",
    6.             "Action": [
    7.                 "ec2:*"
    8.             ],
    9.             "Condition": {
    10.                 "StringEquals": {
    11.                     "ec2:ResourceTag/Name": "web"
    12.                 }
    13.             },
    14.             "Resource": [
    15.                 "arn:aws:ec2:ap-northeast-1:<account id>:instance/*"
    16.             ]
    17.         }
    18.     ]
    19. }
  • aws cliの「--dry-run」付きで試すのが分かりやすい
    1. AWS_PROFILE=default
    2. AWS_REGION=ap-northeast-1
    3. EC2_ID=i-xxxx
    4.  
    5. aws ec2 create-tags --dry-run --resources $EC2_ID --tags "Key=test-key,Value=test-val" --profile $AWS_PROFILE --region $AWS_REGION
    6.  
    7. # 拒否された場合のメッセージ
    8. An error occurred (UnauthorizedOperation) when calling the CreateTags operation: You are not authorized to perform this operation.
    9.  
    10. # 許可された場合のメッセージ
    11. An error occurred (DryRunOperation) when calling the CreateTags operation: Request would have succeeded, but DryRun flag is set.

ポリシーの例


switch role:複数AWSアカウントを切り替える


サポート用

  • AdministratorAccess?権限でも、サポートの利用はできない。別途AWSSupportAccess?権限が必要

IAMユーザが請求情報にアクセスできるように


請求情報だけにアクセスできるユーザを作成

  1. セキュリティの質問を設定
  2. AWS ウェブサイトへのアクセスのアクティベート は忘れがちなので注意
  3. IAM Groupを作成。例:AccountingGroup?
    • role
      1. {
      2.   "Version": "2012-10-17",
      3.   "Statement": [
      4.     {
      5.       "Effect": "Allow",
      6.       "Action": [
      7.         "aws-portal:ViewBilling"
      8.       ],
      9.       "Resource": "*"
      10.     },
      11.     {
      12.       "Effect": "Allow",
      13.       "Action": [
      14.         "aws-portal:ViewUsage"
      15.       ],
      16.       "Resource": "*"
      17.     }
      18.   ]
      19. }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-04-20 (金) 12:20:59 (4d)