1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS アクセスキーについてとTerraformでのアクセスキーに関して

Posted at

##アクセスキーとは

AWSのアクセスキーとは__認証情報__のことで、__IAMユーザ__または__AWSアカウント__の__長期的認証情報__を指す。AWSのアクセスキー認証により、外部からAWSのサービスへプログラムアクセスが可能。

AWSのアクセスキーは、__アクセスキーIDとシークレットアクセスキー__から構成されている。また、ユーザ名とパスワードによる認証と同様の処理をプログラムアクセス時にアクセスキーIDとシークレットアクセスキーを用いて行う。
この為、ユーザ名とパスワード更新の影響を受けずにプログラムアクセスが可能。

プログラムアクセスがユーザ名とパスワードなしに実行できるために、重大なセキュリティリスクが生じる__為、アクセスキー__管理の徹底が必須!!!

####AWSのアクセスキー管理が不十分な場合のセキュリティリスク

アクセスキーの漏洩
 アクセスキーはアクセスキーIDとシークレットアクセスキーから構成される文字列のため、外部サイトに流出したり公開リポジトリ―に誤ってプッシュ登録したりすることで生じます。
AWSサービス内の情報漏洩
 アクセスキーを利用して、サービス内に蓄積された業務データが持ち出しされるリスクがあります。
サービスの不正利用
 1度外部にアクセスキー情報が漏洩してしまうと、AWSサービスを不正利用されたり、それによって高額なAWSサービス利用費の請求が発生したりすることが懸念されます。
セキュリティ攻撃に悪用
AWSのサービスを経由した成りすましや、仲介者攻撃として第3者へのセキュリティ攻撃に悪用されるリスクがあります。

####セキュリティ対策

・極力使用しない
 AWSのアクセスキーは、外部からのプログラムアクセスを用います。外部からのプログラムアクセスをしない場合はアクセスキーを使用せず、可能であれば不要なアクセスキーを削除します。
・共有しない
 不特定の方への情報共有を避け、必要最低限のメンバーのみ共有とするか、全く共有しない運用をします。
・権限を絞る
 アクセスキーを開示する場合は、専用の権限を絞ったアクセスキーを作成し提示します。
・MFAを設定する
 多要素認証(MFA)により、第3者の利用をブロックします。
・IAM ユーザーのアクセスキー定期更新
 IAM ユーザーは定期的にアクセスキーを更新し、意図しない流出影響を抑えます。
・IAM ロールの使用
 アクセスキーを用いず、処理するためにIAMロールをインスタンスに設定します。
参考:AWS ドキュメント リファレンスガイド AWS アクセスキーを管理するためのベストプラクティス
参考:AWS Identity and Access Management ユーザーガイド IAM でのセキュリティのベストプラクティス

####IAM ロールの使用 (アクセスキーを用いないプログラムアクセス)

AWSのアクセスキーは情報漏洩のリスクがありますので、慎重な管理が求められます。そのため、AWSの__アクセスキーを極力使用せず__に運用することが望まれます。AWSでは、IAMを用いて__ロール__を作成することができるので、AWS アクセスキーを用いずにプログラムアクセスを実行することが可能です。これにより、慎重な管理を要するアクセスキーの__セキュリティリスクを低減することが可能__です。

####IAM ロールの設定方法

AWSのコンピューティングサービスであるAmazon Elastic Compute Cloud(EC2)を用いたロールの設定について説明します。Amazon __EC2のロール__は、__立ち上げ時に指定__します。

##アクセスキーに付与するポリシーについて

アクセスキーを取得するIAMユーザーに付与するポリシーは最低限に留めることがセキュリティ上、重要。

###Terraform用AWSアクセスキーのポリシーをスイッチロールだけに限定し、セキュリティをあげる方法

個人開発の場合、Full権限を与えたアクセスキーを用いてしまいがちだが、アクセスキーが流出してAWSを不正利用される怖さがある。
その対応策としてTerraformのコマンド実行をスイッチロールを用いた形に差し替え、不正利用できにくいようにする方法をメモしておく。 

####目指す体制

  • アクセスキー自体にはスイッチロール(Assume Role)するためだけの最低限の権限のみ。(アクセスキー単体ではAssume Role以外は何もできない)
  • Terraformのインフラ実装自体はスイッチロール後のIAMロールが持つ権限で行う
  • スイッチロール自体の実行条件を絞り込む

###手順

  1. スイッチ用ロールの作成
  2. スイッチ用ロールの「信頼関係」の設定
  3. IAMユーザーの権限設定
  4. Terraform側の設定

具体的な方法は上記参考サイトに画像付きで説明してある。
ただし、Terraform側の設定に関しては、今回は下記__Terraform側の設定コード__で記した。

####IAMロールの参考サイト

「AssumeRoleはRoleArnを入力するとCredentialsを返すAPIだ」
・・・(中略)

RoleArnというのは、IAM Roleの一意な名前で、arn:aws:iam::123456789012:role/role-nameといった文字列 *4です。返されるCredentialsは一時キー *5で、有効期限は1時間でした。
・・・(中略)

ロールに設定された権限を持った一時キーを入手することを「役割(role)の引き受け(assume)」と言います。

####Terraform側の設定コード

IAM User に sts:AssumeRole の権限を与えることで IAM Role の権限を引き受けることができます。・・・(中略)・・・
Terraform でも AssumeRole した権限で実行できるので、その方法を紹介します。・・・(中略)・・・
providers.tf 等のファイル名で provider を定義します。

providers.tf
# Definition of Variables 
variable "aws_access_key_id" {}
variable "aws_secret_access_key" {}

# Definition of AWS provider
provider "aws" {
  region  = "ap-northeast-1"
  access_key = var.aws_access_key_id
  secret_key = var.aws_secret_access_key
  assume_role {
    role_arn = "arn:aws:iam::<自分のAWSアカウントID>:role/<スイッチロール先のIAMロール名>"
}

ポイント:__assume_role__ブロックを追加する

providers.tf
# assume_roleブロック
assume_role {
    role_arn = "arn:aws:iam::<自分のAWSアカウントID>:role/<スイッチロール先のIAMロール名>"

AWSアカウントIDは外部に漏れると危険なので、git等を使う場合は変数を用いて.tfvarsファイルで管理し、__gitの管理外におく__こと。

terraform.tfvars
role_arn = "xxxxxxxxxxxxxxxxxxx"
main.tf
provider "aws" {
    access_key = "${var.access_key}"
    secret_key = "${var.secret_key}"
    region = "ap-northeast-1"
    # assume_roleブロック
    assume_role {
    role_arn = "${var.role_arn}"  #<自分のAWSアカウントID>:role/<スイッチロール先のIAMロール名>
    }
}

###AWSアクセスキーの取得方法

アクセスキーとシークレットアクセスキーはAWSにグループを作成しユーザを作成したタイミングに発行される。
シークレットアクセスキーはユーザを新規作成したタイミングでのみ確認可能(新規作成後にシークレットアクセスキーが分からなくなってしまった場合は再度キーを作成する必要がある)。

####手順

  1. グループの作成
  2. ユーザの作成
  3. 各キーの確認

詳細は上記サイトを参照。下記サイトは公式。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?