ハンズオン(簡易版): CFnテンプレート入門(S3::BucketPolicy)

1.1. S3バケットポリシドキュメントの作成 (CloudFormation)

手順の目的 [why]

CloudFormationで作成するS3バケットのGetObjectを許可するバケットポリシーに必要なポリシードキュメントを作成します。

設定値の指定

設定値の指定

手順に必要な設定値を変数に格納をします。

1. S3バケットのリソース名

S3バケットのリソース名の指定します。

変数の設定:

TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET='S3Bucket0'

2. バケットポリシーファイル用ディレクトリ

バケットポリシーファイル用ディレクトリを指定します。

変数の設定:

DIR_S3_BUCKET_POLICY_DOC="${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy"

ディレクトリが存在することを確認します。

コマンド:

ls -d ${DIR_S3_BUCKET_POLICY_DOC}

結果(例:存在する場合):

${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy

存在しない場合は作成します。

コマンド:

mkdir -p ${DIR_S3_BUCKET_POLICY_DOC}

結果(例):

(出力なし)

3. バケットポリシーファイル名

バケットポリシーファイル名を指定します。

変数の設定:

FILE_S3_BUCKET_POLICY_DOC="${DIR_S3_BUCKET_POLICY_DOC}/${TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET}-s3-bucket-policy.yaml" \
  && echo ${FILE_S3_BUCKET_POLICY_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy/S3Bucket0-s3-bucket-policy.yaml

設定値の確認

各変数に正しい設定値が格納されていることを確認しながら保存します。

変数の確認:

cat << END

  # 1. TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET:"S3Bucket0"
       TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET="${TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET}"
  # 2. DIR_S3_BUCKET_POLICY_DOC:"${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy"
       DIR_S3_BUCKET_POLICY_DOC="${DIR_S3_BUCKET_POLICY_DOC}"
  # 3. FILE_S3_BUCKET_POLICY_DOC:"${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy/S3Bucket0-s3-bucket-policy.yaml"
       FILE_S3_BUCKET_POLICY_DOC="${FILE_S3_BUCKET_POLICY_DOC}"

END

下段の変数が入っていない、もしくは上段と同等の値が入っていない場合は、それぞれの手順番号に戻って変数の設定を行います。

処理の実行

S3バケットポリシードキュメントを作成します。

変数の確認:

cat << END

  # FILE_S3_BUCKET_POLICY_DOC:"${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy/S3Bucket0-s3-bucket-policy.yaml"
    FILE_S3_BUCKET_POLICY_DOC="${FILE_S3_BUCKET_POLICY_DOC}"
  # TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET:"S3Bucket0"
    TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET="${TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET}"

END

コマンド:

cat << EOF > ${FILE_S3_BUCKET_POLICY_DOC}
Version: 2012-10-17
Statement:
  - Effect: Allow
    Principal: '*'
    Action:
      - 's3:GetObject'
    Resource: !Join
      - ''
      - - 'arn:aws:s3:::'
        - !Ref ${TEMPLATE_CFN_RESOURCE_NAME_S3_BUCKET}
        - /*
EOF

cat ${FILE_S3_BUCKET_POLICY_DOC}

YAMLファイルを作成したら、フォーマットが壊れてないか必ず確認します。

コマンド:

yamllint ${FILE_S3_BUCKET_POLICY_DOC}

結果(例):

(出力なし)

完了確認

「ポリシードキュメントファイル"${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy/S3Bucket0-s3-bucket-policy.yaml"が存在する。」ことを確認します。

コマンド:

ls ${FILE_S3_BUCKET_POLICY_DOC}

結果(例):

${HOME}/environment/conf-handson-cli-cfn-s3-bucket-policy/S3Bucket0-s3-bucket-policy.yaml

手順の完了