AWS Organizations を使って、組織内で効率的にS3バケットのアクセス管理を行う方法について
組織内の全ユーザーにS3バケットの読み取りアクセスを許可し、外部のアクセスを制限するための設定の備忘です。
背景
AWS Organizationsを利用すると、複数のAWSアカウントを一元管理でき、ポリシーを組織全体で適用できます。
「組織内の全ユーザーにS3バケットの読み取り権限を与え、外部からのアクセスを禁止する」設定を行いたい。
ポリシー設計のポイント
組織内のユーザーのみがアクセスできるようにするには、次の2つのポイントを押さえる必要があります。
- 組織内の全アカウントのユーザーにアクセスを許可
- 組織外のユーザーやアカウントにアクセスを許可しない
これを実現するために重要なのが、aws:PrincipalOrgID
という条件を使うことです。
この条件を使うと、AWS Organizationsに所属するユーザーにのみアクセスを許可できます。
バケットポリシーの設定例
以下は、S3バケットに対するポリシーの例です。このポリシーは、組織内のユーザーには読み取りアクセスを許可し、それ以外のユーザーからのアクセスを制限します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YourBucketName/*",
"Condition": {
"StringEquals": {
"aws:PrincipalOrgID": "o-xxxxxxxxxx" // あなたのOrganization ID
}
}
}
]
}
解説
-
Principal: "*"
すべてのエンティティ(ユーザーやロール)を対象にしています。ただし、次のConditionによりアクセスは制限されます。 -
Condition: aws:PrincipalOrgID
ここで、指定されたAWS Organizationsの組織IDに基づいてアクセスが制限されます。組織内のユーザーはこのバケットにアクセスできますが、組織外のユーザーやアカウントはアクセスできません。
OrganizationsとPrincipalの利点
-
一元管理が可能
Principal に「*
」を指定し、条件でアクセスを制御することで、組織全体のポリシーを1つの設定で簡潔に管理できます。 -
複数アカウント対応
個別にアカウントやユーザーを指定する必要がなく、PrincipalOrgID を使うことで組織全体に適用できるため、管理が非常にシンプルになります。
まとめ
- **
aws:PrincipalOrgID
**を使うことで、組織内のすべてのユーザーに効率的にアクセス権を付与し、組織外からのアクセスを防ぐことができます。
これで、AWS Organizationsを利用したマルチアカウント環境でのS3バケットのアクセス管理がより効率的に行えるはず