[UPDATE] OU等のグループ単位でアクセス制御できる新しいCondition keyが発表されました! #reinvent

AWS Organizationsで利用できるaws:PrincipalOrgPathsというCondition keyが発表されました。これによりOU単位でのアクセス制御が可能になります。
2019.12.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

みなさん、アクセス制御していますか?

今回はre:Invent2019で発表されたAWS Organizationsを利用した新しいアクセス制御のConditionについて紹介します。

新しいCondition「aws:PrincipalOrgPaths」

IAMやリソースポリシーなどで利用できるaws:PrincipalOrgPathsというConditionが追加されました。機能の紹介や使い方は下記ブログにあります。

Use IAM to share your AWS resources with groups of AWS accounts in AWS Organizations | AWS Security Blog

今回は簡単にどんな機能か、どんな風に使えるか説明します。

どんな機能なのか

ポリシードキュメント内で利用するConditionにはアクセスのための条件を指定する機能があります。例えば、IAM Roleの信頼関係で利用されるConditionではMFAの利用を必須にしたり("Bool": {"aws:MultiFactorAuthPresent": "true"})、S3のバケットポリシーで送信元IPアドレスを制限したり("IpAddress": {"aws:SourceIp": "54.240.143.0/24"})できます。

今回追加されたaws:PrincipalOrgPathsはAWS Organizationsの組織(Organization)、Root、OU(Organization Unit)を条件に入れることができるConditionです。

利用できる値は["o-1122334455/r-abcd/ou-abcd-zzyyxxww/"]のようになっていて、手前から組織、ルート、OUの順に並んでいます。各セクションでワイルドカード(*)が利用できます。利用イメージは次のようになります。

"Condition":{
	"ForAnyValue:StringLike":{
		"aws:PrincipalOrgPaths":[
		  "o-1122334455/r-abcd/ou-1/",
		  "o-1122334455/r-abcd/ou-2/"
		]
	}
}

これを利用するときはForAnyValue:StringLikeといっしょに利用します。一番最後の/の後ろにワイルドカードを利用することもでき、その場合は指定したOUだけではなく子OUも対象にします。

利用用途

下記2つの用途が紹介されています。

  • 組織内のOU内のすべてのプリンシパルにS3バケットアクセスを許可
  • IAMロールへのアクセスを組織のOUのアカウントのみに制限する

前者は各アカウントのユーザやアプリケーションからアクセスできるS3バケットポリシーを設定しています。これは、これまでAWSのアカウントIDをベースに管理する必要があり、新しいアカウントが追加されるごとに手動でリストにIDを追加していたところを、OUのIDに置き換えることにより都度メンテナンスする必要が無くなりました。

後者はIAM Roleのスイッチの際に特定のOUのみを許可するように指定しています。これまではPrincipalにて単純なAWSアカウントIDの羅列で記述されていたため、誤って設定すると必要以上のアクセスを許可することになりましたが、OUで絞ることにより多重に防御できるようになりました。

まとめ

OU単位でアクセス制御が設定できるためAWSアカウントIDを細かく管理しなくて良くなりました。多数のアカウントを管理している環境では嬉しいアップデートだと思います。

AWS Organizations環境であれば使ってみてはいかがでしょうか?