ablog

不器用で落着きのない技術者のメモ

Organization 配下のアカウントの S3 バケットのみにアクセス許可する VPC エンドポイントポリシー

Organization 配下のアカウントのS3バケットのみにアクセス許可する VPC エンドポイントポリシー。

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-axxxxxxxxy"
                }
            }
        }
    ]
}

参考

S3 VPC Endpoint Policy for Private Subnet Zone
The sample endpoint policy below is used to restrict access to whitelisted S3 buckets by IAM users and roles within the same AWS Organization, using aws:PrincipalOrgId global IAM condition key.

Resources:
  PrivateSubnetS3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      VpcId: !Ref Vpc
      ServiceName: !Sub "com.amazonaws.${AWS::Region}.s3"
      RouteTableIds:
        - !Ref PrivateSubnetRouteTable
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          # Read/write object access to specific buckets in the same region 
          - Effect: Allow
            Principal: "*"
            Action: "s3:*"
            Resource: 
              - "arn:aws:s3:::my-bucket-001/*"
              - "arn:aws:s3:::my-bucket-002/*"
            Condition:
              StringEquals:
                "aws:PrincipalOrgID":["o-xxxxxxxxxxx"]
Preventing Leaky Buckets - Enabling Private and Secure Access to S3 for Hybrid Clouds - Sourced
  • aws:PrincipalOrgID – リソースベースのポリシーの Principal 要素を簡単に指定できます。このグローバルキーは、組織内のすべての AWS アカウントのすべてのアカウント ID を一覧表示する代わりに使用できます。組織のメンバーであるすべてのアカウントを一覧表示せずに、Condition 要素に組織 ID を指定することができます。 注記 また、このグローバル条件は、組織のマスターアカウントにも適用されます。詳細については、グローバル条件キーの詳細については、『IAM ユーザーガイド』の「AWS グローバル条件コンテキストキー」でPrincipalOrgID の説明を参照してください。
  • aws:PrincipalOrgPaths – この条件キーを使用して、特定の組織ルート、OU、またはその子のメンバーを照合します。リクエストを行うプリンシパル (ルートユーザー、IAM ユーザー、またはロール) が指定された組織パスにある場合、aws:PrincipalOrgPaths 条件キーは true を返します。パスとは、AWS Organizations エンティティの構造をテキストで表記したものです。パスの詳細については、IAM ユーザーガイドの「AWS Organizations エンティティパスを理解する」を参照してください。この条件キーの使用方法の詳細については、IAM ユーザーガイドの「aws:PrincipalOrgPaths」を参照してください。たとえば次の条件要素は、同じ組織内の 2 つの OU のいずれかのメンバーと一致します。
            "Condition": {
                "ForAnyValue:StringLike": {
                    "aws:PrincipalOrgPaths": [
                        "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-def0-awsbbbbb/",
                        "o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-jkl0-awsddddd/"
                    ]
                }
            }
  • organizations:ServicePrincipal – EnableAWSServiceAccess オペレーションまたは DisableAWSServiceAccess オペレーションで、他の AWS サービスを使用して信頼されたアクセスを有効または無効にする場合の条件として使用できます。organizations:ServicePrincipal を使用して、これらのオペレーションからのリクエストを、承認されたサービスプリンシパル名のリストに制限できます。たとえば以下のポリシーでは、ユーザーは、AWS Organizations を使用して信頼されたアクセスを有効および無効にする場合のみ、AWS Firewall Manager を指定することができます。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowOnlyAWSFirewallIntegration",
            "Effect": "Allow",
            "Action": [
                "organizations:EnableAWSServiceAccess",
                "organizations:DisableAWSServiceAccess"
            ],
            "Resource": "*",
            "Condition": { 
                "ForAllValues:StringLike": {
                    "organizations:ServicePrincipal": [ "fms.amazonaws.com" ]
                }
            }
        }
    ]
https://docs.aws.amazon.com/ja_jp/organizations/latest/userguide/orgs_permissions_overview.html