Switch Role(スイッチロール)とは
Switch Role(スイッチロール)とは、AWSマネジメントコンソールを使って操作するときやそのコマンドライン版であるAWS CLIのコマンドを実行するときに使われるIAMユーザーの権限を、別のIAMロールが持つ権限に一時的に置き換えられる機能です。
Switch Roleを使うことで、大事な顧客データが入ったデータベースやストレージに対して、普段はリードオンリーの権限を持たせておき、必要なときに一時的にフルアクセスの権限を持たせるといった運用ができます。
また、別のAWSアカウントにあるIAMロールにSwitch Roleすることもでき、この場合、別のAWSアカウントにあるAWSリソースを操作できます。
たとえば、普段は開発用のAWSアカウントを使い、デプロイするときに一時的に本番用のAWS アカウントにアクセスできるようにするといった運用ができます。さらに、同じAWSアカウントにあるIAMロールに対してSwitch Roleをすることもできます。
Switch Roleしたときの権限を設定する
Switch Roleをしたときにどのような権限を与えるのかを設定する方法を示します。この設定を行うと、AWS CLIコマンドを使うシェルでSwitch Roleができるようになるだけでなく、AWSマネジメントコンソールでもSwitch Roleができるようになります。これはクラウドのシステム管理者が行う作業なので、読み飛ばしてもらって構いません。
まずは、「ユーザーが所属するAWSアカウントID」と「操作対象となるリソースやIAMロールがあるAWSアカウントID」をメモしておきます。また、Switch Roleをしたときの権限を持つロールの名前も決めておきます
項目名 |
設定例 |
ユーザーが所属するAWSアカウントID |
111156789012 |
操作対象となるリソースやIAMロールがあるAWSアカウントID |
222256789012 |
ロール名 |
S3ReadOnly |
Switch Roleしたときの権限を持つIAMロールを作る
IAMロールを作るAWSアカウントにサインインします。操作対象となるAWSリソースが所属するAWSアカウントと、同じAWSアカウントにIAMロールを作ります。AWSマネジメントコンソールでの手順は以下のようになります。
スイッチロールしたときの権限を作ります。
[ https://console.aws.amazon.com/iam/ >> ポリシー >> ポリシーの作成 ]
ロールを作ります。
[ https://console.aws.amazon.com/iam/ >> ロール >> ロールの作成 ]
設定値は以下のようにします。
項目名 |
設定例 |
説明 |
信頼されたエンティティの種類を選択 |
別のAWSアカウント |
別のアカウントがなくてもこちらを選択します。 |
アカウントID |
111156789012 |
自分のアカウントを指定することもできます。自分のアカウントとは、作成しようとしている IAM ロールがある AWS アカウント ID のことです。 |
オプション |
(すべてチェックなし) |
|
項目名 |
設定例 |
説明 |
ポリシー名 |
AmazonS3ReadOnlyAccess |
チェックを入れます |
項目名 |
設定例 |
説明 |
ロール名 |
S3ReadOnly |
|
ロールの説明 |
(空欄) |
|
ユーザーにSwitch Roleできる権限を与える
ユーザーが所属するAWSアカウント(例:111156789012)にサインインします。
Switch Roleするポリシーを作ります。
[ https://console.aws.amazon.com/iam/ >> ポリシー >> ポリシーの作成 ]
JSONタブに下記を入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": [
"arn:aws:iam::222256789012:role/S3ReadOnly"
]
}
]
}
項目名 |
設定例 |
説明 |
名前 |
222256789012_S3ReadOnly |
たとえば、操作対象となる AWS アカウント ID とロール名にします |
説明 |
(空欄) |
|
グループにポリシーをアタッチする場合[ https://console.aws.amazon.com/iam/ >> グループ >> (対象のグループ)>> ポリシーのアタッチ ]
項目名 |
設定例 |
説明 |
ポリシー名 |
222256789012_S3ReadOnly |
チェックを入れます |
ユーザーにポリシーをアタッチする場合
[ https://console.aws.amazon.com/iam/ >> ユーザー >> (対象のユーザー)>>
アクセス権限の追加 >> 既存のポリシーを直接アタッチ(右上)]
項目名 |
設定例 |
説明 |
ポリシー名 |
222256789012_S3ReadOnly |
チェックを入れます |
AWS CLIの設定をする
実行するときのロールのARN(リソース名)を設定ファイルに書く必要があるので、書き方について説明します。
~/.aws/config ファイルの設定
~/.aws/config ファイルに下記を追加します。
[profile 222256789012-S3ReadOnly]
role_arn = arn:aws:iam::222256789012:role/S3ReadOnly
credential_source = Ec2InstanceMetadata
設定例 |
説明 |
222256789012-S3ReadOnly |
プロファイル名。たとえば、操作対象となる AWS アカウント ID とロール名にします |
222256789012 |
操作対象となる AWS アカウント ID |
S3ReadOnly |
ロール名 |
EC2外のAWS CLIの場合
もし、EC2外のAWS CLIの場合は、上記の内容を一部変更します。
変更前: credential_source = Ec2InstanceMetadata
変更後: source_profile = default
以上の設定を変更することで、今まで開いていたシェルに対しても設定が有効になります。
AWS CLIでSwitch Roleする
Switch Roleする対象となるAWSアカウントIDとロール名をクラウドのシステム管理者に聞いてから操作してください。
Switch Roleする
AWS CLIのコマンドを使うシェルでSwitch Roleするには、環境変数AWS_PROFILEを設定します。値は~/.aws/configファイルに書いた [profile ____] の ____ の部分です。
bashの場合:
export AWS_PROFILE=222256789012-S3ReadOnly
環境変数が設定されているシェルで実行したAWS CLIのコマンドは、Switch Roleした権限やAWSアカウントで実行されます。たとえば、S3のバケットを一覧することで別のAWSアカウントが操作対象になっていることを確認できます。
aws s3 ls # AWS CLI コマンドの例
Switch Roleした状態から戻す
AWS CLIのコマンドを使うシェルで環境変数AWS_PROFILEを削除すると、Switch Roleした状態からSwitch Roleしていない状態、つまり、IAMユーザーに戻ります。
bashの場合:
export AWS_PROFILE=
または
unset AWS_PROFILE
一時的にSwitch Roleしてコマンドを実行する
環境変数を設定しないで、AWS CLIのコマンドに–profileオプションを付ければ、そのコマンドはSwitch Roleした状態で実行されます。
aws s3 ls --profile 222256789012-S3ReadOnly # AWS CLI コマンドの例
Switch Roleを使いこなして安心して作業しよう
以上、Switch Roleするときの権限の設定方法と、AWS CLIのコマンドを使うシェルでSwitch Roleする方法の説明でした。大事なデータを誤って消す可能性が低くなることで、安心して作業できるようになるでしょう。]]>