なんか混乱してくるので整理しました。
アクセス元アカウント ID で制限
別のアカウントから IAM role を使用したアクセスを許可する場合は、Principal
にアカウント ID を指定します。
Parameters:
TestBucket:
Type: AWS::S3::Bucket
TestBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref TestBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: TestBucketPermissions
Effect: Allow
Action: s3:*
Resource:
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}"
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}/*"
Principal:
AWS:
- (アカウント ID)
アクセス元を Organizations に制限
Organizations のすべてのアカウントからのアクセスを許可する場合は、Condition
に aws:PrincipalOrgID
を指定します。
Parameters:
TestBucket:
Type: AWS::S3::Bucket
TestBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref TestBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: TestBucketPermissions
Effect: Allow
Action: s3:*
Resource:
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}"
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}/*"
Principal:
AWS: "*"
Condition:
StringEquals:
aws:PrincipalOrgID: (Organization ID)
サービスプリンシパルによるアクセス元アカウントで制限
Service-linked role を使用したサービスからのアクセスを許可する場合は、Principal
にサービスプリンシパルを指定し、アクセス元アカウントは Condition
の aws:SourceAccount
で指定します。aws:PrincipalOrgID
で Organization を指定することは使用できません。
Parameters:
TestBucket:
Type: AWS::S3::Bucket
TestBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref TestBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: TestBucketPermissions
Effect: Allow
Action: s3:*
Resource:
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}"
- !Sub "arn:${AWS::Partition}:s3:::${TestBucket}/*"
Principal:
Service:
- config.amazonaws.com
Condition:
StringEquals:
aws:SourceAccount:
- (アカウント ID)