

# 動的参照を使用して他のサービスに格納されている値を取得する
<a name="dynamic-references"></a>

動的参照には、他のサービスに格納および管理されている外部値を指定し、Infrastructure as Code (IaC) テンプレートから機密情報を切り離すことができる便利な方法があります。CloudFormation は、スタックオペレーションおよび変更セットオペレーション中に、必要に応じて指定された参照の値を取得します。

動的参照を使用すると、次のことができます。
+ **SecureString を使用する** – 機密データの場合、保管中のデータが暗号化されるように、常に AWS Systems Manager Parameter Store または AWS Secrets Manager のシークレットで SecureString パラメータを使用します。
+ **アクセスを制限する** – Parameter Store パラメータまたは Secrets Manager シークレットへのアクセスを、認可されたプリンシパルとロールのみに制限します。
+ **認証情報をローテーションする** – Parameter Store または Secrets Manager に保存されている機密データを定期的にローテーションして、高いレベルのセキュリティを維持します。
+ **ローテーションを自動化する** – Secrets Manager の自動ローテーション機能を活用して、機密データを定期的に更新し、アプリケーションや環境で分散します。

## 一般的な考慮事項
<a name="dynamic-references-considerations"></a>

CloudFormation テンプレートで動的参照を指定する前に考慮すべき一般的な考慮事項を次に示します。
+ リソースのプライマリ識別子の一部であるリソースプロパティに、動的参照や機密データを含めないでください。CloudFormation は、プライマリリソース識別子で実際のプレーンテキスト値を使用する場合がありますが、これはセキュリティリスクとなる可能性があります。このリソース ID は、派生した出力または送信先に表示されます。

  リソースタイプのプライマリ識別子を構成するリソースプロパティを確認するには、「[AWS リソースおよびプロパティタイプのリファレンス](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-template-resource-type-ref.html)」でそのリソースのリソースリファレンスドキュメントを参照してください。**[Return values]** (戻り値) セクションの `Ref` 関数の戻り値は、リソースタイプのプライマリ識別子を構成するリソースプロパティを表します。
+ スタックテンプレートには最大 60 個の動的な参照を含めることができます。
+ 変換 (`AWS::Include` や `AWS::Serverless` など) を使用している場合、CloudFormation は変換を適用する前に動的参照を解決しません。代わりに、動的参照のリテラル文字列を変換に渡し、テンプレートを使用して変更セットを実行する際に参照を解決します。
+ カスタムリソース内の安全な値 (Parameter Store や Secrets Manager に保存されている値など) に動的参照を使用することはできません。
+ また、動的参照は `AWS::CloudFormation::Init` メタデータと Amazon EC2 `UserData` プロパティでもサポートされていません。
+ バックスラッシュ (\$1) で終わる動的参照を作成しないでください。CloudFormation はこれらの参照を解決できず、スタックオペレーションが失敗します。

次のトピックでは、動的参照の使用に関する情報と他の考慮事項について説明します。

**Topics**
+ [一般的な考慮事項](#dynamic-references-considerations)
+ [Systems Manager Parameter Store からプレーンテキスト値を取得する](dynamic-references-ssm.md)
+ [Systems Manager Parameter Store から SecureString 値を取得する](dynamic-references-ssm-secure-strings.md)
+ [Secrets Manager からシークレットまたはシークレット値を取得する](dynamic-references-secretsmanager.md)

# Systems Manager Parameter Store からプレーンテキスト値を取得する
<a name="dynamic-references-ssm"></a>

CloudFormation テンプレートを作成する際には、Parameter Store に保存されているプレーンテキスト値を使用することをお勧めします。パラメータストアは AWS Systems Manager の一機能です。Parameter Store の概要については、「*AWS Systems Manager ユーザーガイド*」の「[AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)」を参照してください。

テンプレート内で Parameter Store のプレーンテキスト値を使用するには、`ssm` 動的リファレンスを使用します。この参照では、Parameter Store のタイプ `String` または `StringList` のパラメータの値にアクセスできます。

スタック操作で使用する `ssm` 動的参照のバージョンを確認するには、スタック操作の変更セットを作成します。次に、**[テンプレート]** タブで処理済みテンプレートをレビューします。詳細については、「[CloudFormation スタックの変更セットを作成する](using-cfn-updating-stacks-changesets-create.md)」を参照してください。

`ssm` 動的参照を使用する場合、留意すべき重要な点がいくつかあります。
+ CloudFormation は、動的参照でのドリフト検出をサポートしていません。パラメータのバージョンを指定していない `ssm` 動的参照の場合、Systems Manager でパラメータのバージョンを更新する際は、最新バージョンのパラメータに変更するために、`ssm` 動的参照を含むすべてのスタックでスタックの更新オペレーションも実施することをお勧めします。
+ CloudFormation テンプレートの `Parameters` セクションで `ssm` 動的参照を使用するには、バージョン番号を含める必要があります。CloudFormation では、このセクションのバージョン番号なしで Parameter Store 値を参照することはできません。あるいは、テンプレートで Systems Manager パラメータタイプとしてパラメータを定義することもできます。これを行う際には、Systems Manager パラメータキーを、パラメータのデフォルト値として指定できます。その後、バージョン番号を指定しなくても、CloudFormation は Parameter Store から最新バージョンのパラメータ値を取得します。これにより、テンプレートをよりシンプルかつ簡単にメンテナンスできます。詳細については、「[CloudFormation が提供するパラメータタイプを使用して、実行時に既存のリソースを指定する](cloudformation-supplied-parameter-types.md)」を参照してください。
+ カスタムリソースの場合、CloudFormation はリクエストをカスタムリソースに送信する前に `ssm` の動的参照を解決します。
+ CloudFormation は、別の AWS アカウント から共有されたパラメータを参照する際の動的参照の使用をサポートしません。
+ CloudFormation は、動的参照での Systems Manager パラメータラベルの使用をサポートしません。

## アクセス許可
<a name="dynamic-references-ssm-permissions"></a>

Systems Manager パラメータストアに保存されているパラメータを指定するには、指定されたパラメータに対して [https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) を呼び出すためのアクセス許可が必要です。特定の Systems Manager パラメータへのアクセスを提供する IAM ポリシーを作成する方法については、「AWS Systems Manager ユーザーガイド」の「[IAM ポリシーを使用して Systems Manager パラメータへのアクセスを制限する](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-access.html)」を参照してください。

## リファレンスパターン
<a name="dynamic-references-ssm-pattern"></a>

CloudFormation テンプレートで Systems Manager Parameter Store に保存されているプレーンテキスト値を参照するには、次の `ssm` 参照パターンを使用します。

```
{{resolve:ssm:parameter-name:version}}
```

参照は、parameter-name と version について、以下の正規表現パターンに従う必要があります。

```
{{resolve:ssm:[a-zA-Z0-9_.\-/]+(:\d+)?}}
```

`parameter-name`  
 パラメータストア内のパラメータの名前。パラメータ名では大文字と小文字が区別されます  
必須。

`version`  
使用するパラメータのバージョンを指定する整数。正確なバージョンを指定しない場合、CloudFormation は、スタックを作成または更新するたびに最新バージョンのパラメータを使用します。詳細については、「*AWS Systems Manager ユーザーガイド*」の「[パラメータバージョンの使用](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-versions.html)」を参照してください。  
オプション。

## 例
<a name="dynamic-references-ssm-examples"></a>

**Topics**
+ [パブリック AMI ID パラメータ](#dynamic-references-ssm-public-ami-example)
+ [カスタム AMI ID パラメータ](#dynamic-references-ssm-custom-ami-example)

### パブリック AMI ID パラメータ
<a name="dynamic-references-ssm-public-ami-example"></a>

次の例では、パブリック AMI パラメータを参照する EC2 インスタンスを作成します。動的リファレンスは、パブリックパラメータから最新の Amazon Linux 2023 AMI ID を取得します。パブリックパラメータの詳細については、「*AWS Systems Manager ユーザーガイド*」の「[Parameter Store でのパブリックパラメータの検出](https://docs.aws.amazon.com/systems-manager/latest/userguide/parameter-store-finding-public-parameters.html)」を参照してください。

#### JSON
<a name="dynamic-references-ssm-public-ami-example.json"></a>

```
{
    "Resources": {
        "MyInstance": {
            "Type": "AWS::EC2::Instance",
            "Properties": {
                "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}",
                "InstanceType": "t2.micro"
            }
        }
    }
}
```

#### YAML
<a name="dynamic-references-ssm-public-ami-example.yaml"></a>

```
Resources:
  MyInstance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-6.1-x86_64}}'
      InstanceType: t2.micro
```

### カスタム AMI ID パラメータ
<a name="dynamic-references-ssm-custom-ami-example"></a>

次の例は、Parameter Store に保存されているカスタム AMI ID を参照する EC2 起動テンプレートを作成します。動的参照は、起動テンプレートからインスタンスが起動されると `golden-ami` パラメータの *`2`* から AMI ID を取得します。

#### JSON
<a name="dynamic-references-ssm-custom-ami-example.json"></a>

```
{
    "Resources": {
        "MyLaunchTemplate": {
            "Type": "AWS::EC2::LaunchTemplate",
            "Properties": {
                "LaunchTemplateName": {
                    "Fn::Sub": "${AWS::StackName}-launch-template"
                },
                "LaunchTemplateData": {
                    "ImageId": "{{resolve:ssm:golden-ami:2}}",
                    "InstanceType": "t2.micro"
                }
            }
        }
    }
}
```

#### YAML
<a name="dynamic-references-ssm-custom-ami-example.yaml"></a>

```
Resources:
  MyLaunchTemplate:
    Type: AWS::EC2::LaunchTemplate
    Properties: 
      LaunchTemplateName: !Sub ${AWS::StackName}-launch-template
      LaunchTemplateData:
        ImageId: '{{resolve:ssm:golden-ami:2}}'
        InstanceType: t2.micro
```

# Systems Manager Parameter Store から SecureString 値を取得する
<a name="dynamic-references-ssm-secure-strings"></a>

CloudFormation では、機密データを「SecureString」として AWS Systems Manager Parameter Store に保存することで、パスワードやライセンスキーなどの機密データをテンプレートで直接公開することなく使用できます。Parameter Store の概要については、「*AWS Systems Manager ユーザーガイド*」の「[AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)」を参照してください。

テンプレートで Parameter Store の Secure String を使用するには、`ssm-secure` 動的参照を使用します。CloudFormation が実際の SecureString 値を保存することはありません。代わりに、SecureString のプレーンテキストパラメータ名を含むリテラルな動的参照のみを保存します。

スタックの作成時または更新時に、CloudFormation は、実際の値を公開することなく、必要に応じて SecureString 値にアクセスします。SecureString は、`ssm-secure` の動的参照パターンをサポートするリソースプロパティのためにのみ使用できます。詳細については、「[Secure String のための動的なパラメータパターンをサポートするリソース](#template-parameters-dynamic-patterns-resources)」を参照してください。

CloudFormation は、どの API コールでも SecureString の実際のパラメータ値を返しません。リテラル動的参照のみを返します。変更セットを使用して変更を比較する場合、CloudFormation は、リテラルの動的参照文字列のみを比較します。実際の SecureString の値を解決して比較することはありません。

`ssm-secure` 動的参照を使用する場合、留意すべき重要な点がいくつかあります。
+ CloudFormation は、他の AWS アカウント から Parameter Store 値にアクセスできません。
+ CloudFormation は、動的参照での Systems Manager パラメータラベルまたはパブリックパラメータの使用をサポートしません。
+ `cn-north-1` および `cn-northwest-1` リージョンでは、SecureString は Systems Manager によってサポートされていません。
+ `ssm-secure` などの安全な値の動的参照は、現在カスタムリソースではサポートされていません。
+ CloudFormation がスタックの更新をロールバックする必要があり、以前に指定したバージョンの SecureString パラメータが利用できなくなっている場合、ロールバックオペレーションは失敗します。このような場合、次の 2 つのオプションがあります。
  + リソースをスキップするには `CONTINUE_UPDATE_ROLLBACK` を使用してください。
  + Systems Manager パラメータストアで Secure String パラメータを再作成し、パラメータのバージョンがテンプレートで使用されているバージョンに達するまでそれを更新します。その後、リソースをスキップせずに `CONTINUE_UPDATE_ROLLBACK` を使用します。

## Secure String のための動的なパラメータパターンをサポートするリソース
<a name="template-parameters-dynamic-patterns-resources"></a>

`ssm-secure` の動的参照パターンをサポートするリソースには、以下のものがあります。


| リソース | プロパティタイプ | プロパティ | 
| --- | --- | --- | 
| [AWS::DirectoryService::MicrosoftAD](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-directoryservice-microsoftad.html) |  | `Password` | 
| [AWS::DirectoryService::SimpleAD](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-directoryservice-simplead.html) |  | `Password` | 
| [AWS::ElastiCache::ReplicationGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticache-replicationgroup.html) |  | `AuthToken` | 
| [AWS::IAM::User](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-user.html) | [LoginProfile](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-iam-user-loginprofile.html) | `Password` | 
| [AWS::KinesisFirehose::DeliveryStream](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-kinesisfirehose-deliverystream.html) | [RedshiftDestinationConfiguration](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-kinesisfirehose-deliverystream-redshiftdestinationconfiguration.html) | `Password` | 
| [AWS::OpsWorks::App](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-app.html) | [ソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-app-source.html) | `Password` | 
| [AWS::OpsWorks::Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-stack.html) | [CustomCookbooksSource](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-stack-source.html) | `Password` | 
| [AWS::OpsWorks::Stack](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-opsworks-stack.html) | [RdsDbInstances](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-opsworks-stack-rdsdbinstance.html) | `DbPassword` | 
| [AWS::RDS::DBCluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbcluster.html) |  | `MasterUserPassword` | 
| [AWS::RDS::DBInstance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) |  | `MasterUserPassword`  | 
| [AWS::Redshift::Cluster](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-redshift-cluster.html) |  | `MasterUserPassword` | 

## リファレンスパターン
<a name="dynamic-references-ssm-secure-pattern"></a>

CloudFormation テンプレートで Systems Manager Parameter Store の Secure String 値を参照するには、次の `ssm-secure` 参照パターンを使用します。

```
{{resolve:ssm-secure:parameter-name:version}}
```

参照は、parameter-name と version について、以下の正規表現パターンに従う必要があります。

```
{{resolve:ssm-secure:[a-zA-Z0-9_.\-/]+(:\d+)?}}
```

`parameter-name`  
 パラメータストア内のパラメータの名前。パラメータ名では大文字と小文字が区別されます  
必須。

`version`  
使用するパラメータのバージョンを指定する整数。正確なバージョンを指定しない場合、CloudFormation は、スタックを作成または更新するたびに最新バージョンのパラメータを使用します。詳細については、「*AWS Systems Manager ユーザーガイド*」の「[パラメータバージョンの使用](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-versions.html)」を参照してください。  
オプション。

## 例
<a name="dynamic-references-ssm-secure-example"></a>

次の例では、`ssm-secure` の動的参照を使用して、IAM ユーザーのパスワードを Parameter Store に格納されている SecureString に設定します。指定されているとおり、CloudFormation はスタック操作および変更セット操作に `IAMUserPassword` パラメータのバージョン *`10`* を使用します。

### JSON
<a name="dynamic-references-ssm-secure-example.json"></a>

```
  "MyIAMUser": {
    "Type": "AWS::IAM::User",
    "Properties": {
      "UserName": "MyUserName",
      "LoginProfile": {
        "Password": "{{resolve:ssm-secure:IAMUserPassword:10}}"
      }
    }
  }
```

### YAML
<a name="dynamic-references-ssm-secure-example.yaml"></a>

```
  MyIAMUser:
    Type: AWS::IAM::User
    Properties:
      UserName: 'MyUserName'
      LoginProfile:
        Password: '{{resolve:ssm-secure:IAMUserPassword:10}}'
```

# Secrets Manager からシークレットまたはシークレット値を取得する
<a name="dynamic-references-secretsmanager"></a>

Secrets Manager は、データベース認証情報、パスワード、サードパーティー API キーなどのシークレットを安全に保存および管理できるようにするサービスです。Secrets Manager を使用すると、これらのシークレットへのアクセスを一元的に保存および制御できるため、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API 呼び出しに置き換えて、プログラムでシークレットを取得できます。詳細については、「*AWS Secrets Manager ユーザーガイド*」の「[What is AWS Secrets Manager?](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)」を参照してください。

CloudFormation テンプレート内の Secrets Manager に保存されているシークレット全体またはシークレット値全体を使用するには、`secretsmanager` 動的参照を使用します。

## ベストプラクティス
<a name="dynamic-references-secretsmanager-best-practices"></a>

CloudFormation テンプレートで Secrets Manager の動的参照を使用する場合は、次のベストプラクティスに従ってください。
+ **CloudFormation テンプレートにバージョンレス参照を使用する** – Secrets Manager に認証情報を保存し、適切なシークレットローテーションワークフローをサポートするために `version-stage` または `version-id` パラメータを指定せずに動的参照を使用します。
+ **自動ローテーションの活用** – Secrets Manager の自動ローテーション機能を使用して、認証情報管理のためのバージョンレスの動的参照を行います。これにより、テンプレートを変更することなく、認証情報が定期的に更新されます。詳細については、「[AWS Secrets Manager シークレットのローテーション](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)」を参照してください。
+ **バージョン付き参照の使用は控えめにする** – テストやロールバックなどの特定のシナリオでは、明示的な `version-stage` または `version-id` パラメータのみを指定します。

## 考慮事項
<a name="dynamic-references-secretsmanager-considerations"></a>

`secretsmanager` 動的参照を使用する場合は、次のような重要な考慮事項に留意する必要があります。
+ CloudFormation は、以前のデプロイで使用されたシークレットのバージョンを追跡しません。動的な参照を実装する前に、シークレット管理戦略を慎重に計画してください。可能な場合はバージョンレス参照を使用して、自動シークレットローテーションを活用します。バージョンがない動的参照からバージョン付きの動的参照に移行する場合など、動的参照設定に変更を加えるときは、リソースの更新をモニタリングして検証します。
+ Secrets Manager のシークレット値のみを更新しても、CloudFormation は自動的に新しい値を取得しません。CloudFormation は、リソースの作成時または動的参照を含むリソースを変更する更新時にのみシークレット値を取得します。

  例えば、テンプレートに、`MasterPassword` プロパティが Secrets Manager 動的参照に設定されている [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) リソースが含まれているとします。このテンプレートからスタックを作成したら、Secrets Manager でシークレットの値を更新します。ただし、`MasterPassword` プロパティは古いパスワード値を保持します。

  新しいシークレット値を適用するには、CloudFormation テンプレートで `AWS::RDS::DBInstance` リソースを変更し、スタックの更新を実行する必要があります。

  今後この手動プロセスを回避するには、Secrets Manager を使用してシークレットを自動的にローテーションすることを検討してください。
+ `secretsmanager` などの安全な値の動的参照は、現在カスタムリソースではサポートされていません。
+ `secretsmanager` の動的な参照は、すべてのリソースプロパティで使用できます。`secretsmanager` の動的な参照を使用することは、Secrets Manager ログも CloudFormation ログも解決済みのシークレットの値を保持してはならないことを示します。ただし、シークレット値は、それが使用されているリソースを持つサービスに表示されることがあります。シークレットデータが漏れるのを防ぐために、使用方法を確認します。

## アクセス許可
<a name="dynamic-references-secretsmanager-permissions"></a>

Secrets Manager に保存されているシークレットを指定するには、シークレットに対して [https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) を呼び出すためのアクセス許可が必要です。

## リファレンスパターン
<a name="dynamic-references-secretsmanager-pattern"></a>

CloudFormation テンプレートで Secrets Manager シークレットを参照するには、次の `secretsmanager` 参照パターンを使用します。

```
{{resolve:secretsmanager:secret-id:secret-string:json-key:version-stage:version-id}}
```

`secret-id`  
シークレット名またはシークレット ARN。  
AWS アカウントのシークレットにアクセスするには、シークレット名を指定するだけです。別の AWS アカウントのシークレットにアクセスするには、そのシークレットの完全な ARN を指定します。  
必須。

`secret-string`  
`SecretString` はサポートされる唯一の値です。デフォルトは `SecretString` です。

`json-key`  
値を取得するペアのキー名を指定します。`json-key` を指定しない場合、CloudFormation はシークレットテキスト全体を取得します。  
このセグメントにはコロン文字 (`:`) を含めることはできません。

`version-stage`  
使用するシークレットのバージョンのステージングラベル。シークレットマネージャーは、ステージングラベルがローテーション処理中にさまざまなバージョンを追跡するために使用されます。`version-stage` を使用する場合は、`version-id` を指定することはできません。`version-stage` または `version-id`、を指定しない場合、デフォルトでは `AWSCURRENT` というラベルの付いたバージョンが取得されます。  
このセグメントにはコロン文字 (`:`) を含めることはできません。

`version-id`  
使用したいシークレットのバージョンの固有識別子を指定します。`version-id` を指定した場合は、`version-stage` を指定しないでください。`version-stage` または `version-id` を指定しない場合、次にデフォルトでは `AWSCURRENT` というバージョンが取得されます。  
このセグメントにはコロン文字 (`:`) を含めることはできません。

## 例
<a name="dynamic-references-secretsmanager-examples"></a>

**Topics**
+ [シークレットからユーザー名とパスワードの値を取得する](#dynamic-references-secretsmanager-examples-user-name-and-password)
+ [SecretString 全体を取得する](#dynamic-references-secretsmanager-examples-entire-secretstring)
+ [シークレットの特定のバージョンから値を取得する](#dynamic-references-secretsmanager-examples-specific-version)
+ [別の AWS アカウントからシークレットを取得する](#dynamic-references-secretsmanager-examples-secrets-from-another-account)

### シークレットからユーザー名とパスワードの値を取得する
<a name="dynamic-references-secretsmanager-examples-user-name-and-password"></a>

次の [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-rds-dbinstance.html) の例では、`MySecret` に保存されているユーザー名とパスワードの値を取得します。この例では、バージョンレスの動的参照に推奨されるパターンを示します。このパターンは、`AWSCURRENT` バージョンを自動的に使用し、テンプレートの変更を必要とせずに Secrets Manager のローテーションワークフローをサポートします。

#### JSON
<a name="dynamic-references-secretsmanager-examples-user-name-and-password.json"></a>

```
{
    "MyRDSInstance": {
        "Type": "AWS::RDS::DBInstance",
        "Properties": {
            "DBName": "MyRDSInstance",
            "AllocatedStorage": "20",
            "DBInstanceClass": "db.t2.micro",
            "Engine": "mysql",
            "MasterUsername": "{{resolve:secretsmanager:MySecret:SecretString:username}}",
            "MasterUserPassword": "{{resolve:secretsmanager:MySecret:SecretString:password}}"
        }
    }
}
```

#### YAML
<a name="dynamic-references-secretsmanager-examples-user-name-and-password.yaml"></a>

```
  MyRDSInstance:
    Type: AWS::RDS::DBInstance
    Properties:
      DBName: MyRDSInstance
      AllocatedStorage: '20'
      DBInstanceClass: db.t2.micro
      Engine: mysql
      MasterUsername: '{{resolve:secretsmanager:MySecret:SecretString:username}}'
      MasterUserPassword: '{{resolve:secretsmanager:MySecret:SecretString:password}}'
```

### SecretString 全体を取得する
<a name="dynamic-references-secretsmanager-examples-entire-secretstring"></a>

次の動的リファレンスは、 `MySecret` の `SecretString` を取得します。

```
{{resolve:secretsmanager:MySecret}}
```

または:

```
{{resolve:secretsmanager:MySecret::::}}
```

### シークレットの特定のバージョンから値を取得する
<a name="dynamic-references-secretsmanager-examples-specific-version"></a>

次の動的リファレンスは、 `MySecret` の `AWSPREVIOUS` バージョンの `password` 値を取得します。

```
{{resolve:secretsmanager:MySecret:SecretString:password:AWSPREVIOUS}}
```

### 別の AWS アカウントからシークレットを取得する
<a name="dynamic-references-secretsmanager-examples-secrets-from-another-account"></a>

次の動的リファレンスは、別の AWS アカウントにある `MySecret` の `SecretString` を取得します。別の AWS アカウントのシークレットにアクセスするには、完全なシークレット ARN を指定する必要があります。

```
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret}}
```

次の動的リファレンスは、別の AWS アカウントにある `MySecret` の `password` 値を取得します。別の AWS アカウントのシークレットにアクセスするには、完全なシークレット ARN を指定する必要があります。

```
{{resolve:secretsmanager:arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret:SecretString:password}}
```