AWS Tools for PowerShellで別アカウントの処理を実行する(Cross Account)

EC2からAWS Tools for PowerShellを利用する際に、クロスアカウントアクセスロールを利用して別のAWSアカウントの操作をする方法を書いていきます。

具体的には、
アカウントAAWSの情報を、
アカウントBのEC2上で実行するPowerShellから、
AWS Tools for PowerShellにて操作する、
方法を例を使いながら書いていきます。

アカウントA作業

まずはアカウントAの作業です。アカウントAのManagement Consoleにログオンします。

クロスアカウントロール作成

MyCrossAccountRoleというロールを作成します。

 
クロスアカウントアクセスのロールを選択していきます。

 
アカウントIDにはアカウントBのアカウントID(12桁)を入れます。

 
適当なポリシーを選択しロールにアタッチします。

内容を確認してロールの作成をします。

内容を確認してロールを作成します。ロールのARNを覚えておきましょう。

arn:aws:iam::999999999999:role/MyCrossAccountRole




これでアカウントA側の作業は完了です。アカウントBのEC2上のPowerShellからアクセスした際には、ここで作ったロールの権限でアクセスされます。

アカウントB作業

アカウントBのEC2インスタンスからPowerShellを使ってアカウントAを操作してみます。

EC2ロールにポリシー追加

アカウントBのManagement Consoleにログオンして、以下のポリシーを追加しておきます。このポリシーを付与したロールをPowerShellを実行するEC2に割り当ててください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sts:AssumeRole"],
      "Resource": ["*"]
    }
  ]
}

 
 

PowerShellスクリプトアカウントAを操作

EC2から以下のスクリプトを実行します。

#適当なリージョンを設定してください
$region = "ap-northeast-1"

#アカウントAで作成したロールのARN
$roleARN = "arn:aws:iam::999999999999:role/MyCrossAccountRole"
#ログなどセッションを特定するために使われる名前です。任意の文字列でOK。
$sessoinName = "MySession" 

$sts = Use-STSRole -Region $region -RoleArn $roleARN -RoleSessionName $sessoinName
Get-IAMUsers -Credential $sts.Credentials

アカウントB上のEC2インスタンスからアカウントAのIAMユーザの一覧が取得できたと思います。なお、Credentialの引数にNull値を渡した場合はアカウントBのIAMユーザが取得されます。