AWS PolicyDocumentでのワイルドカード



PolicyDocumentでワイルドカードを使って部分指定しようとしたところ失敗した。



AWSでポリシーを作成しアクセス制御を行う際、

  • Actionで動作を、
  • Principalで操作するユーザやロールを、
  • Resourceで操作対象のリソースを、

それぞれ指定することができる。

PolicyName: MyS3Policy
PolicyDocument: 
  Version: "2012-10-17"
  Statement: 
  - Effect: Allow
    Action:
      - s3:PutObject
      - s3:GetObject
    Principal: 
      AWS:
        - arn:aws:iam::123456789012:user/username
    Resource:
      - arn:aws:s3:::examplebucket/exampledir

例えばこんなPolicyを作ると、「arn:aws:iam::123456789012:user/username」のarnを持つユーザーが、「arn:aws:s3:::examplebucket/exampledir」のリソースに対し、PutObjectGetObjectできるようになる。

このあたりの記載は*(ワイルドカード)を使って「何でも」を指定できる。

  Statement: 
  - Effect: Allow
    Action: '*'
    Principal:
      AWS: '*'
    Resource: '*'

ActionResourceは、文字列中に*を入れて部分指定をすることもできる。

ただし、Principalで同じことをしようとするとエラーになる。

  Statement: 
  - Effect: Allow
    Action:
      - s3:Put*
      - s3:Get*
    Principal: 
      AWS:
        # - arn:aws:iam::123456789012:user/user* <= エラーになる
        - arn:aws:iam::123456789012:user/user1
        - arn:aws:iam::123456789012:user/user2
        - arn:aws:iam::123456789012:user/user_admin
    Resource:
      - arn:aws:s3:::examplebucket/*

Principalは*で全て許可するか、そうでない場合はきちんと記述しないといけない。

先日リソースを作ろうとして失敗した時に初めて知りました。