Configurar opções de metadados da instância para novas instâncias
É possível configurar as opções de metadados de instância a seguir em cada instância.
É possível utilizar um dos métodos a seguir para exigir o uso do IMDSv2 nas novas instâncias.
Definir o IMDSv2 como o padrão para a conta
É possível definir a versão padrão do serviço de metadados de instância (IMDS) em nível de conta para cada Região da AWS. Isso significa que, quando uma nova instância é executada, a versão dos metadados da instância é definida automaticamente para padrão do nível de conta. No entanto, você pode substituir manualmente o valor na execução ou após a execução. Para obter mais informações sobre como as configurações em nível de conta e as substituições manuais afetam uma instância, consulte Ordem de precedência das opções de metadados da instância.
Definir o padrão no nível de conta não redefine as instâncias existentes. Por exemplo, se você definir o padrão no nível de conta como IMDSv2, as instâncias existentes definidas como IMDSv1 não serão afetadas. Se desejar alterar o valor nas instâncias existentes, altere manualmente o valor nas próprias instâncias.
É possível definir o padrão da conta para a versão dos metadados de instância como IMDSv2 para que todas as novas instâncias na conta sejam iniciadas com o IMDSv2 obrigatório. Nesse caso, o IMDSv1 será desabilitado. Com esse padrão da conta, quando você executar uma instância, os valores padrão da instância serão os seguintes:
-
Console: a Versão de metadados estará definida como Somente V2 (requer token) e o Limite de salto de resposta de metadados como 2.
-
AWS CLI: HttpTokens
estará definido como required
e HttpPutResponseHopLimit
como 2
.
- Console
-
Para definir o IMDSv2 como padrão para a conta da região especificada
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.
-
Para alterar a Região da AWS, use o seletor de regiões no canto superior direito da página.
-
No painel de navegação, escolha EC2 Dashboard (Painel do EC2).
-
Em Account attributes (Atributos da conta), escolha Data orotection and security (Proteção e segurança de dados).
-
Ao lado de Padrões do IMDS, escolha Gerenciar.
-
Na página Gerenciar padrões do IMDS, faça o seguinte:
-
Em Serviço de metadados de instância, escolha Habilitado.
-
Em Metadata version (Versão de metadados), selecione V2 only (token required) (Apenas V2 [token obrigatório]).
-
Em Limite de salto de resposta de metadados, especifique 2 se suas instâncias forem hospedar contêineres. Caso contrário, selecione Sem preferência. Quando não houver uma preferência especificada, na execução, o valor padrão será 2 se a AMI exigir IMDSv2. Caso contrário, o padrão será 1 por padrão.
-
Selecione Atualizar.
- AWS CLI
-
Para definir o IMDSv2 como padrão para a conta da região especificada
Use o comando modify-instance-metadata-defaults e especifique a região na qual deseja modificar as configurações do IMDS por conta. Inclua --http-tokens
definido como required
e --http-put-response-hop-limit
como 2
se suas instâncias forem hospedar contêineres. Caso contrário, especifique -1
para não indicar nenhuma preferência. Quando -1
(sem preferência) for especificado, na execução, o valor padrão será 2
se a AMI exigir IMDSv2. Caso contrário, o padrão será 1
por padrão.
aws ec2 modify-instance-metadata-defaults \
--region us-east-1
\
--http-tokens required \
--http-put-response-hop-limit 2
Saída esperada
{
"Return": true
}
Para visualizar as configurações padrão de conta para as opções de metadados de instância para a região especificada
Use o comando get-instance-metadata-defaults e especifique a região.
aws ec2 get-instance-metadata-defaults --region us-east-1
Exemplo de saída
{
"AccountLevel": {
"HttpTokens": "required",
"HttpPutResponseHopLimit": 2
}
}
Para definir o IMDSv2 como o padrão para a conta de todas as regiões
Use o comando modify-instance-metadata-defaults para modificar as configurações em nível de conta do IMDS para todas as regiões. Inclua --http-tokens
definido como required
e --http-put-response-hop-limit
como 2
se suas instâncias forem hospedar contêineres. Caso contrário, especifique -1
para não indicar nenhuma preferência. Quando -1
(sem preferência) for especificado, na execução, o valor padrão será 2
se a AMI exigir IMDSv2. Caso contrário, o padrão será 1
por padrão.
echo -e "Region \t Modified" ; \
echo -e "-------------- \t ---------" ; \
for region in $(
aws ec2 describe-regions \
--region us-east-1 \
--query "Regions[*].[RegionName]" \
--output text
);
do (output=$(
aws ec2 modify-instance-metadata-defaults \
--region $region \
--http-tokens required \
--http-put-response-hop-limit 2
\
--output text)
echo -e "$region \t $output"
);
done
Saída esperada
Region Modified
-------------- ---------
ap-south-1 True
eu-north-1 True
eu-west-3 True
...
Para visualizar as configurações padrão de conta para as opções de metadados de instância para todas as regiões
Use o comando get-instance-metadata-defaults.
echo -e "Region \t Level Hops HttpTokens" ; \
echo -e "-------------- \t ------------ ---- ----------" ; \
for region in $(
aws ec2 describe-regions \
--region us-east-1 \
--query "Regions[*].[RegionName]" \
--output text
);
do (output=$(
aws ec2 get-instance-metadata-defaults \
--region $region \
--output text)
echo -e "$region \t $output"
);
done
Saída esperada
Region Level Hops HttpTokens
-------------- ------------ ---- ----------
ap-south-1 ACCOUNTLEVEL 2 required
eu-north-1 ACCOUNTLEVEL 2 required
eu-west-3 ACCOUNTLEVEL 2 required
...
- PowerShell
-
Para definir o IMDSv2 como padrão para a conta da região especificada
Use o comando Edit-EC2InstanceMetadataDefault e especifique a região na qual deseja modificar as configurações do IMDS por conta. Inclua -HttpToken
definido como required
e -HttpPutResponseHopLimit
como 2
se suas instâncias forem hospedar contêineres. Caso contrário, especifique -1
para não indicar nenhuma preferência. Quando -1
(sem preferência) for especificado, na execução, o valor padrão será 2
se a AMI exigir IMDSv2. Caso contrário, o padrão será 1
por padrão.
Edit-EC2InstanceMetadataDefault `
-Region us-east-1
`
-HttpToken required `
-HttpPutResponseHopLimit 2
Saída esperada
True
Para visualizar as configurações padrão de conta para as opções de metadados de instância para a região especificada
Use o comando Get-EC2InstanceMetadataDefault e especifique a região.
Get-EC2InstanceMetadataDefault -Region us-east-1
| Format-List
Exemplo de saída
HttpEndpoint :
HttpPutResponseHopLimit : 2
HttpTokens : required
InstanceMetadataTags :
Para definir o IMDSv2 como o padrão para a conta de todas as regiões
Use o cmdlet Edit-EC2InstanceMetadataDefault para modificar as configurações em nível de conta do IMDS para todas as regiões. Inclua -HttpToken
definido como required
e -HttpPutResponseHopLimit
como 2
se suas instâncias forem hospedar contêineres. Caso contrário, especifique -1
para não indicar nenhuma preferência. Quando -1
(sem preferência) for especificado, na execução, o valor padrão será 2
se a AMI exigir IMDSv2. Caso contrário, o padrão será 1
por padrão.
(Get-EC2Region).RegionName | `
ForEach-Object {
[PSCustomObject]@{
Region = $_
Modified = (Edit-EC2InstanceMetadataDefault `
-Region $_ `
-HttpToken required `
-HttpPutResponseHopLimit 2
)
}
} | `
Format-Table Region, Modified -AutoSize
Saída esperada
Region Modified
------ --------
ap-south-1 True
eu-north-1 True
eu-west-3 True
...
Para visualizar as configurações padrão de conta para as opções de metadados de instância para todas as regiões
Use o cmdlet Get-EC2InstanceMetadataDefault.
(Get-EC2Region).RegionName | `
ForEach-Object {
[PSCustomObject]@{
Region = $_
HttpPutResponseHopLimit = (Get-EC2InstanceMetadataDefault -Region $_).HttpPutResponseHopLimit
HttpTokens = (Get-EC2InstanceMetadataDefault -Region $_).HttpTokens
}
} | `
Format-Table -AutoSize
Exemplo de saída
Region HttpPutResponseHopLimit HttpTokens
------ ----------------------- ----------
ap-south-1 2 required
eu-north-1 2 required
eu-west-3 2 required
...
Quando você inicia uma instância, pode configurá-la para exigir o uso do IMDSv2, configurando os seguintes campos:
Quando você especificar que o IMDSv2 é obrigatório, também deverá habilitar o endpoint do Serviço de metadados da instância (IMDS) definindo Metadados acessíveis como Habilitado (console) ou HttpEndpoint
como enabled
(AWS CLI).
Em um ambiente de contêiner, quando o IMDSv2 for necessário, recomendamos definir o limite de saltos como 2
. Para ter mais informações, consulte Considerações sobre o acesso aos metadados da instância.
- Console
-
Como exigir o uso do IMDSv2 em uma nova instância
-
Ao executar uma nova instância no console do Amazon EC2, expanda Advanced details (Detalhes avançados) e faça o seguinte:
-
Para Metadata acessible (Metadados acessíveis), escolha Enabled (Habilitado).
-
Em Metadata version (Versão de metadados), selecione V2 only (token required) (Apenas V2 [token obrigatório]).
-
(Ambiente de contêiner) Em Limite de salto de resposta dos metadados, escolha 2.
Para ter mais informações, consulte Detalhes avançados.
- AWS CLI
-
Como exigir o uso do IMDSv2 em uma nova instância
O exemplo de run-instances a seguir executa uma instância c6i.large
com --metadata-options
definido como HttpTokens=required
. Quando você especifica um valor para HttpTokens
, também deve definir HttpEndpoint
como enabled
. Como o cabeçalho de token seguro é definido como required
para solicitações de recuperação de metadados, é necessário que a instância use o IMDSv2 ao solicitar metadados da instância.
Em um ambiente de contêiner, quando o IMDSv2 for necessário, recomendamos definir o limite de saltos como 2
com HttpPutResponseHopLimit=2
.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=enabled,HttpTokens=required,HttpPutResponseHopLimit=2"
- PowerShell
-
Como exigir o uso do IMDSv2 em uma nova instância
O exemplo de Cmdlet New-EC2Instance a seguir inicia uma instância c6i.large
com MetadataOptions_HttpEndpoint
definido como enabled
e o parâmetro MetadataOptions_HttpTokens
como required
. Quando você especifica um valor para HttpTokens
, também deve definir HttpEndpoint
como enabled
. Como o cabeçalho de token seguro é definido como required
para solicitações de recuperação de metadados, é necessário que a instância use o IMDSv2 ao solicitar metadados da instância.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint enabled `
-MetadataOptions_HttpTokens required
- AWS CloudFormation
-
Para especificar as opções de metadados de uma instância usando AWS CloudFormation, consulte a propriedade AWS::EC2::LaunchTemplate MetadataOptions no Guia do usuário do AWS CloudFormation.
Ao registrar uma nova AMI ou modificar uma AMI existente, é possível definir o parâmetro imds-support
como v2.0
. As instâncias iniciadas a partir dessa AMI terão Metadata version (Versão de metadados) definido como V2 only (token required) (Apenas V2 [token obrigatório]) (console) ou HttpTokens
definido como required
(AWS CLI). Com essas configurações, a instância exige que o IMDSv2 seja usado ao solicitar metadados da instância.
Observe que quando você configura imds-support
como v2.0
, as instâncias iniciadas a partir dessa AMI também têm Metadata response hop limit (Limite de saltos na resposta de metadados) (console) ou http-put-response-hop-limit
(AWS CLI) definido como 2.
Não use esse parâmetro, a menos que seu software AMI ofereça suporte ao IMDSv2. Após definir o valor como v2.0
, você não poderá desfazer essa ação. A única maneira de “redefinir” sua AMI é criando uma nova AMI a partir do snapshot subjacente.
Para configurar uma nova AMI para o IMDSv2
Use um dos métodos a seguir para configurar uma nova AMI para o IMDSv2.
- AWS CLI
-
O exemplo de register-image a seguir registra uma AMI usando o snapshot especificado de um volume raiz do EBS como /dev/xvda
de dispositivo. Especifique v2.0
para o parâmetro imds-support
, de forma que instâncias iniciadas a partir dessa AMI exijam que o IMDSv2 seja usado ao solicitar metadados da instância.
aws ec2 register-image \
--name my-image
\
--root-device-name /dev/xvda \
--block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example
} \
--architecture x86_64 \
--imds-support v2.0
- PowerShell
-
O exemplo de Cmdlet Register-EC2Image a seguir registra uma AMI usando o snapshot especificado de um volume raiz do EBS como dispositivo /dev/xvda
. Especifique v2.0
para o parâmetro ImdsSupport
, de forma que instâncias iniciadas a partir dessa AMI exijam que o IMDSv2 seja usado ao solicitar metadados da instância.
Register-EC2Image `
-Name 'my-image
' `
-RootDeviceName /dev/xvda `
-BlockDeviceMapping (
New-Object `
-TypeName Amazon.EC2.Model.BlockDeviceMapping `
-Property @{
DeviceName = '/dev/xvda';
EBS = (New-Object -TypeName Amazon.EC2.Model.EbsBlockDevice -Property @{
SnapshotId = 'snap-0123456789example
'
VolumeType = 'gp3'
} )
} ) `
-Architecture X86_64 `
-ImdsSupport v2.0
Para configurar uma AMI existente para o IMDSv2
Use um dos métodos a seguir para configurar uma AMI para IMDSv2 existente.
- AWS CLI
-
O exemplo de modify-image-attribute a seguir modifica uma AMI existente para IMDSv2 somente. Especifique v2.0
para o parâmetro imds-support
, de forma que instâncias iniciadas a partir dessa AMI exijam que o IMDSv2 seja usado ao solicitar metadados da instância.
aws ec2 modify-image-attribute \
--image-id ami-0123456789example
\
--imds-support v2.0
- PowerShell
-
O exemplo de Cmdlet Edit-EC2ImageAttribute a seguir só modifica uma AMI existente para IMDSv2. Especifique v2.0
para o parâmetro imds-support
, de forma que instâncias iniciadas a partir dessa AMI exijam que o IMDSv2 seja usado ao solicitar metadados da instância.
Edit-EC2ImageAttribute `
-ImageId ami-0abcdef1234567890
`
-ImdsSupport 'v2.0'
Você pode criar uma política do IAM que impeça que os usuários iniciem novas instâncias, a menos que exijam o IMDSv2 na nova instância.
Para impor o uso do IMDSv2 em todas as novas instâncias usando uma política do IAM
Para garantir que os usuários possam executar apenas instâncias que requeiram o uso do IMDSv2 ao solicitar metadados da instância, é possível especificar que a condição para exigir o IMDSv2 deve ser atendida para que uma instância possa ser executada. Para ver um exemplo de política do IAM, consulte Trabalhar com metadados de instância.
O IMDS tem dois endpoints em uma instância: IPv4 (169.254.169.254
) e IPv6 ([fd00:ec2::254]
). Quando você habilita o IMDS, o endpoint IPv4 é habilitado automaticamente. O endpoint IPv6 permanece desabilitado mesmo que você inicie uma instância em uma sub-rede IPv6 apenas. Para habilitar o endpoint IPv6, você precisa fazer isso explicitamente. Quando você habilita o endpoint IPv6, o endpoint IPv4 permanece habilitado.
Você pode habilitar o endpoint iPv6 ao iniciar a instância ou posteriormente.
Requisitos para habilitação do endpoint iPv6
Use um dos métodos a seguir para iniciar uma instância com o endpoint IPv6 do IMDS habilitado.
- Console
-
Para habilitar o endpoint IPv6 do IMDS na inicialização de instância
Para ter mais informações, consulte Detalhes avançados.
- AWS CLI
-
Para habilitar o endpoint IPv6 do IMDS na inicialização de instância
O exemplo de run-instances a seguir inicia uma instância c6i.large
com o endpoint IPv6 habilitado para o IMDS. Para habilitar o endpoint IPv6, no parâmetro --metadata-options
, especifique HttpProtocolIpv6=enabled
. Quando você especifica um valor para HttpProtocolIpv6
, também deve definir HttpEndpoint
como enabled
.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=enabled,HttpProtocolIpv6=enabled"
- PowerShell
-
Para habilitar o endpoint IPv6 do IMDS na inicialização de instância
O exemplo de Cmdlet New-EC2Instance a seguir inicia uma instância c6i.large
com o endpoint IPv6 habilitado para IMDS. Para habilitar o endpoint IPv6, especifique MetadataOptions_HttpProtocolIpv6
como enabled
. Quando você especifica um valor para MetadataOptions_HttpProtocolIpv6
, também deve definir MetadataOptions_HttpEndpoint
como enabled
.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint enabled `
-MetadataOptions_HttpProtocolIpv6 enabled
Você pode desativar o acesso aos metadados da instância desativando o IMDS ao executar uma instância. Você pode ativar o acesso mais tarde reativando o IMDS. Para ter mais informações, consulte Ativar o acesso aos metadados da instância.
É possível desativar o IMDS na execução ou após a execução. Se você desativar o IMDS na execução, os seguintes problemas poderão ocorrer:
-
Talvez você não tenha acesso SSH à sua instância. A public-keys/0/openssh-key
, que é a chave SSH pública da sua instância, não estará acessível porque a chave normalmente é fornecida e acessada nos metadados da instância do EC2.
-
Os dados do usuário do EC2 não estarão disponíveis e não serão executados no início da instância. Os dados do usuário do EC2 são hospedados no IMDS. Caso desative o IMDS, você desativará efetivamente o acesso aos dados do usuário.
Para acessar essa funcionalidade, você pode reativar o IMDS após a execução.
- Console
-
Desativar o acesso aos metadados da instância na execução
Para ter mais informações, consulte Detalhes avançados.
- AWS CLI
-
Desativar o acesso aos metadados da instância na execução
Inicie a instância com --metadata-options
definido como HttpEndpoint=disabled
.
aws ec2 run-instances \
--image-id ami-0abcdef1234567890
\
--instance-type c6i.large
\
...
--metadata-options "HttpEndpoint=disabled"
- PowerShell
-
Desativar o acesso aos metadados da instância na execução
O exemplo de Cmdlet New-EC2Instance a seguir inicia uma instância MetadataOptions_HttpEndpoint
definida como disabled
.
New-EC2Instance `
-ImageId ami-0abcdef1234567890
`
-InstanceType c6i.large
`
-MetadataOptions_HttpEndpoint disabled
- AWS CloudFormation
-
Para especificar as opções de metadados de uma instância usando AWS CloudFormation, consulte a propriedade AWS::EC2::LaunchTemplate MetadataOptions no Guia do usuário do AWS CloudFormation.