Help us understand the problem. What is going on with this article?

複数AWSアカウントでiamのロール運用するときのまとめ

More than 3 years have passed since last update.

AWSで複数アカウントを運用するときのベスト・プラクティスとかでSwtich Roleすればいいんだよ、みたいなのはよく見かけるけど、じゃあ実際どんな手順で設定するのかとか具体的な内容が書いてあるのが見つからなかったので、まとめてみた。

1. ユーザ管理する中央アカウントを一つ決める

2. 中央アカウントでCloudTrailの設定をする

3. 中央アカウントでユーザグループを作ってポリシーを設定する

ユーザがログインするのは中央アカウントだが、ここではAWSへの操作は基本的にさせたくないので、最低限の権限だけを付与する

UserAccessPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole",
                "iam:ChangePassword",
                "iam:GetAccountPasswordPolicy"
            ],
            "Resource": "*"
        }
    ]
}
  • sts:AssumeRole
    ロールが使えるようになる

  • iam:ChangePassword

  • iam:GetAccountPasswordPolicy
    初回ログイン時にパスワード変更できるようにする

これでこのユーザは中央アカウントでは

  • 初回ログイン時にパスワード変更できる
  • 他のアカウントのロールにスイッチできる

以外なにもできない

4. 中央アカウントでユーザを作り、ユーザグループに入れる

5. CloudTrailのログが保存されるS3のバケットのポリシーを設定する

他のアカウントでも個別にログの保存先を指定できるが、S3にバケットの中身を直接いじられるとログの削除・改変が可能になってしまうので、アクセス権がない中央アカウントのS3に保存する。

参照:複数アカウントにバケットポリシーを設定する方法

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSCloudTrailAclCheck20131101",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::903692715234:root",
          "arn:aws:iam::859597730677:root",
          "arn:aws:iam::814480443879:root",
          "arn:aws:iam::216624486486:root",
          "arn:aws:iam::086441151436:root",
          "arn:aws:iam::388731089494:root",
          "arn:aws:iam::284668455005:root",
          "arn:aws:iam::113285607260:root",
          "arn:aws:iam::035351147821:root"
        ]
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::myBucketName"
    },
    {
      "Sid": "AWSCloudTrailWrite20131101",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::903692715234:root",
          "arn:aws:iam::859597730677:root",
          "arn:aws:iam::814480443879:root",
          "arn:aws:iam::216624486486:root",
          "arn:aws:iam::086441151436:root",
          "arn:aws:iam::388731089494:root",
          "arn:aws:iam::284668455005:root",
          "arn:aws:iam::113285607260:root",
          "arn:aws:iam::035351147821:root"
        ]
      },
      "Action": "s3:PutObject",
      "Resource": [
        "arn:aws:s3:::myBucketName/[optional] myLogFilePrefix/AWSLogs/111111111111/*",
        "arn:aws:s3:::myBucketName/[optional] myLogFilePrefix/AWSLogs/222222222222/*"
      ],
      "Condition": { 
        "StringEquals": { 
          "s3:x-amz-acl": "bucket-owner-full-control" 
        }
      }
    }
  ]
}   

6. スイッチ先アカウントでCloudTrailを設定する

新しいS3バケットは作成せず、中央アカウントのS3バケットを指定する

7. スイッチ先アカウントにroleを作成する

ロールの作成

  1. ロール名の設定
  2. ロールタイプの選択
    └[クロスアカウントアクセス]
      └[所有しているAWSアカウントアカウント間のアクセスを提供します]

  3. 信頼性の確立
     └[アカウントID]:ユーザ毎にロールを付与したいとしても一旦アカウントIDを入れる

  4. ポリシーのアタッチ

  5. 確認

7.1. 信頼関係の編集

ユーザ毎にロールを付与したい場合

最初に作成するときは、ユーザ毎の信頼関係は設定できないので、一旦ロールを作成してから、ロールを修正する

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::000000000000:user/USER_NAME01",
          "arn:aws:iam::000000000000:user/USER_NAME02"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

7.2. ポリシーのアタッチ

Ex.PowerUserの場合

AWSで用意されているPowerUserAccessのポリシーは以下の通り

PowerUserAccess
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "NotAction": "iam:*",
      "Resource": "*"
    }
  ]
}

これだけだとiam関連のActionが全てNotActionになるので、サービスで必要な権限は個別に付与する

PowerUserExtendPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1427160925000",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole",
                "iam:ListRolePolicies",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfiles",
                "iam:ListServerCertificates",
                "iam:UploadServerCertificate"
            ],
            "Resource": [
                "arn:aws:iam::111111111111:server-certificate/*"
            ]
        }
    ]
}
  • iam:PassRole
  • iam:ListRolePolicies
  • iam:GetRole
  • iam:GetRolePolicy
  • iam:ListInstanceProfiles

  • iam:ListServerCetificates
    これがないとELBにSSLキーを設定できない

  • iam:UploadServerCertificate
    これがないとELBのSSLキーの登録・更新ができない

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした