2021/05/17

【AWS】プロファイルを利用して複数アカウントを一元管理しよう!

 
  

プロファイルとは?


プロファイルとは、AWS CLIコマンドや、AWS SDKなどで利用できる、設定や認証情報の集まりのことです。

AWS CLIコマンドや、AWS SDKを実行する際に、プロファイルを指定することで、その指定したプロファイルの設定や認証情報を利用して、コマンドなどを実行することができます。

プロファイルを利用することで、複数のIAMユーザーや、IAMロール、AWSアカウントを所有している場合でも、簡単に実行環境を切り替えて、コマンドなどを実行することが可能になります。

プロファイルの設定方法は?


プロファイルは、AWS CLIの「aws configure」コマンドを実行することで設定することが可能です。

コマンドを実行してプロファイルを設定すると、ホームディレクトリの「.aws」というフォルダ内に設定オプションや認証情報が保存されます。

例えば、下記のようなAWS CLI コマンドを実行すると、「tokyo」という名前のプロファイルのリージョンを「ap-northeast-1」で設定します。

$ aws configure set region ap-northeast-1 --profile tokyo

プロファイルの設定ファイルと認証情報ファイル


プロファイルを設定すると、ホームディレクトリの「.aws」フォルダの配下に、「credentials」と「config」というファイルが作成されます。

これらの2つのファイルについて、それぞれ説明していきます。

~/.aws/credentials

「credentials」ファイルには、機密性の高い認証情報が保存されています。

機密性の高い認証情報には、「AWSアクセスキーID」と「AWSシークレットアクセスキー」が含まれています。

例えば、プロファイル未指定時のデフォルトプロファイルと、「hoge」プロファイルの認証情報が保存された「credentials」ファイルは下記のようになります。

[default]
aws_access_key_id=XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[hoge]
aws_access_key_id=YYYYYYYYYYYYYYYYYYYY
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

~/.aws/config

「config」ファイルには、機密性の低い設定オプションが保存されています。

機密性の低い設定オプションには、「リージョン」と「処理結果の出力方法」が含まれています。

例えば、プロファイル未指定時のデフォルトプロファイルと、「hoge」プロファイルの設定オプションが保存された「config」ファイルは下記のようになります。

[default]
region=us-west-2
output=json

[profile hoge]
region=ap-northeast-1
output=json

プロファイルの確認方法は?


AWS CLI の「aws configure list」コマンドを実行することで、現在設定しているプロファイルを確認することができます。

このコマンドは、現在設定しているすべてのプロファイルを一覧で表示します。

例えば、下記のコマンドを実行することで、「hoge」プロファイルを確認できます。
ただし、「AWSアクセスキーID」「AWSシークレットアクセスキー」は機密情報であるため、マスクされて表示されます。

$ aws configure list --profile hoge
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                     hoge           manual    --profile
access_key      ****************YYYY shared-credentials-file    
secret_key      ****************YYYY shared-credentials-file    
    region           ap-northeast-1      config-file    ~/.aws/config

プロファイルを指定して使ってみよう!


設定したプロファイルを指定することで、AWS CLIコマンドやAWS SDKを実行した際の、実行する環境を切り替えることができます。

プロファイルの指定箇所を環境変数などで外出しすることで、コードはそのままで、IAMユーザーやIAMロール、AWSアカウントを切り替えて実行することが可能になります。

それでは、AWS CLIや、AWS SDKでのプロファイルの指定方法をそれぞれ紹介していきます。

AWS CLI

AWS CLIコマンドを実行する際に、プロファイルを指定する方法を紹介します。

AWS CLIコマンドでは、オプション「–profile」を指定することで、プロファイルを指定できます。

以下の例では、「hoge」プロファイルを指定して、S3のバケットの一覧を表示できます。

$ aws s3api list-buckets --profile hoge

AWS SDK for Python(Boto3)

AWS SDK for Python(Boto3)を実行する際に、プロファイルを指定する方法を紹介します。

AWS SDK for Python(Boto3)では、「Session」オブジェクトに「profile_name」オプションを指定することで、プロファイルを指定できます。

以下の例では、「hoge」プロファイルを指定して、S3のバケットの一覧を表示できます。

import boto3
from boto3.session import Session

profile = 'hoge'
session = Session(profile_name=profile)

client = session.client('s3')
response = client.list_buckets()

print(response['Buckets'])

AWS SDK for JavaScript

AWS SDK for JavaScriptを実行する際に、プロファイルを指定する方法を紹介します。

AWS SDK for JavaScript では、「AWS.SharedIniFileCredentials」オブジェクトに「profile」オプションを指定することで、プロファイルを指定できます。

以下の例では、「hoge」プロファイルを指定して、S3のバケットの一覧を表示できます。

const AWS = require('aws-sdk');
const profile = “hoge”;
const credentials = new AWS.SharedIniFileCredentials({profile: profile});
AWS.config.credentials = credentials;

var s3 = new AWS.S3();

var params = {};
s3.listBuckets(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else     console.log(data.Buckets);
});

AWS SDK for Java

AWS SDK for Javaを実行する際に、プロファイルを指定する方法を紹介します。

AWS SDK for Java では、「ProfileCredentialsProvider」オブジェクトに「profileName」オプションを指定することで、プロファイルを指定できます。

以下の例では、「hoge」プロファイルを指定して、S3のバケットの一覧を表示できます。

import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;

public class Sample {
    public static void main(String args[]){
        String profile = “hoge”;
        AWSCredentialsProvider provider = new ProfileCredentialsProvider(profile);

        AmazonS3 s3 = new AmazonS3Client(provider);
        List buckets = s3.listBuckets();
        for (Bucket b : buckets) {
            System.out.println(b.getName());
        }
    }
}

AWS SDK for Go

AWS SDK for Goを実行する際に、プロファイルを指定する方法を紹介します。

AWS SDK for Goでは、「session.NewSessionWithOptions」オブジェクトに「Profile」オプションを指定することで、プロファイルを指定できます。

以下の例では、「hoge」プロファイルを指定して、S3のバケットの一覧を表示できます。

package main

import (
    “fmt”

    “github.com/aws/aws-sdk-go/aws/session”
    “github.com/aws/aws-sdk-go/service/s3”
)

func main() {
    profile_name := “hoge”
    sess, _ := session.NewSessionWithOptions(session.Options{
        Profile: hoge,
    })
    svc := s3.New(sess.New())
    input := &s3.ListBucketsInput{}

    result, err := svc.ListBuckets(input)
    if err != nil {
        panic(err)
    }
    fmt.Println(result)
}

プロファイルを利用して複数のAWSアカウントを使い分けよう!


プロファイルを利用することの利点は、複数のAWSアカウントやIAMロール・ユーザーを簡単に使い分けられることです。

適切にプロファイルを設定しておくことで、AWS CLIのコマンドや、AWS SDKを利用しているソースコードなどはそのままに、指定するプロファイル名を変更するだけで、実行したいAWSアカウントやIAMロール・ユーザーを切り替えて実行することが可能になります。

複数のAWSアカウントを管理する必要のある方は、優先してプロファイルの設定をしておきましょう。

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】